wyre-technology/msp-claude-plugins/msp-claude-plugins/hudu/hudu/skills/companies/SKILL.md
Hudu Companies
Hudu companies (clients/organizations): company field reference, parent/child hierarchy, PSA integration matching via id_in_integration, the /api/v1/companies CRUD plus archive/unarchive endpoints, onboarding and offboarding workflows, and how companies scope assets, passwords, articles, and websites.
- Source repository stars
- 39
- Declared platforms
- 0
- Static risk flags
- 1
- Last source update
- 2026-08-06
- Source checked
- 2026-08-06
Decision brief
What it does—and where it fits
Hudu companies (clients/organizations): company field reference, parent/child hierarchy, PSA integration matching via id_in_integration, the /api/v1/companies CRUD plus archive/unarchive endpoints, onboarding and offboarding workflows, and how companies scope assets, passwords, articles, and websites.
Not for
- Tasks that require unconfirmed production actions or broad system permissions.
- Environments where the pinned source and install steps cannot be inspected.
Compatibility matrix
Platform support, with evidence labels
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
Inspect first. Install second.
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/wyre-technology/msp-claude-plugins --skill "msp-claude-plugins/hudu/hudu/skills/companies"Inspect the Agent Skill "Hudu Companies" from https://github.com/wyre-technology/msp-claude-plugins/blob/c1011303bfd2a65abc9b260884d9858d1a482a6f/msp-claude-plugins/hudu/hudu/skills/companies/SKILL.md at commit c1011303bfd2a65abc9b260884d9858d1a482a6f. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
What the source asks the agent to do
- 01
PSA Sync Verification
Review the “PSA Sync Verification” section in the pinned source before continuing.
Review and apply the “PSA Sync Verification” source section. - 02
Anti-triggers
The client record of record — a Hudu company scopes documentation.
The client record of record — a Hudu company scopes documentation.The same client in IT Glue — IT Glue calls these Organizations; useThe monitored client container — an RMM organization or site is a - 03
Key Concepts
Unlike IT Glue, Hudu does not enforce built-in company types. Companies are typically organized using custom fields or naming conventions. Common patterns MSPs use:
Unlike IT Glue, Hudu does not enforce built-in company types. Companies are typically organized using custom fields or naming conventions. Common patterns MSPs use:Companies can have parent/child relationships for multi-location or multi-division clients:Companies can be matched to PSA records using the idinintegration and integrationslug fields, enabling cross-platform lookups between Hudu and tools like ConnectWise Manage, Autotask, or HaloPSA. - 04
Company Types
Unlike IT Glue, Hudu does not enforce built-in company types. Companies are typically organized using custom fields or naming conventions. Common patterns MSPs use:
Unlike IT Glue, Hudu does not enforce built-in company types. Companies are typically organized using custom fields or naming conventions. Common patterns MSPs use: - 05
Company Hierarchy
Companies can have parent/child relationships for multi-location or multi-division clients:
Companies can have parent/child relationships for multi-location or multi-division clients:
Permission review
Static risk signals and limitations
Network access
The documentation includes network, browsing, or remote request actions.
"website": "https://newclient.com",Evidence record
Why each signal appears
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 97/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 39 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Provenance and original SKILL.md
- Repository
- wyre-technology/msp-claude-plugins
- Skill path
- msp-claude-plugins/hudu/hudu/skills/companies/SKILL.md
- Commit
- c1011303bfd2a65abc9b260884d9858d1a482a6f
- License
- Apache-2.0
- Collected
- 2026-08-06
- Default branch
- main
View the original SKILL.md
Hudu Companies Management
Overview
Companies are the foundational entity in Hudu, representing clients, vendors, or internal entities. All documentation, assets, passwords, articles, and websites are associated with a company. In Hudu, the "Company" label is customizable per instance -- some MSPs rename it to "Organization" or "Client" -- but the API endpoint is always /api/v1/companies.
Anti-triggers
- The client record of record — a Hudu company scopes documentation.
Contracts, contacts, and service history live in the PSA; use
autotask-crm,connectwise-psa-companies, orhalopsa-clients. Hudu'sid_in_integrationfield holds the PSA's ID precisely because the two are different records. - The same client in IT Glue — IT Glue calls these Organizations; use
it-glue-api-patternsfor its equivalent surface. - The monitored client container — an RMM organization or site is a
monitoring scope, not documentation; use
ninjaone-rmm-organizations,atera-customers, ordatto-rmm-sites. - The client's licence or billing entity — use
pax8-companies,sherweb-customers, orquickbooks-online-customers.
Key Concepts
Company Types
Unlike IT Glue, Hudu does not enforce built-in company types. Companies are typically organized using custom fields or naming conventions. Common patterns MSPs use:
| Pattern | Description | Example |
|---|---|---|
| Active Client | Currently serviced customer | Standard operational state |
| Prospect | Potential client | Pre-sales documentation |
| Vendor | Product/service supplier | Software vendors |
| Internal | Your own MSP | Internal documentation |
| Former Client | Previously serviced | Historical records |
Company Hierarchy
Companies can have parent/child relationships for multi-location or multi-division clients:
Parent Company (Acme Holdings)
+-- Child: Acme East Division
+-- Child: Acme West Division
+-- Child: Acme International
PSA Integration
Companies can be matched to PSA records using the id_in_integration and integration_slug fields, enabling cross-platform lookups between Hudu and tools like ConnectWise Manage, Autotask, or HaloPSA.
Field Reference
Core Fields
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | System | Auto-generated unique identifier |
name | string | Yes | Company name |
nickname | string | No | Short name or abbreviation |
company_type | string | No | Type classification |
address_line_1 | string | No | Street address line 1 |
address_line_2 | string | No | Street address line 2 |
city | string | No | City |
state | string | No | State/province |
zip | string | No | Postal code |
country_name | string | No | Country |
phone_number | string | No | Phone number |
fax_number | string | No | Fax number |
website | string | No | Company website URL |
notes | string | No | Rich text notes |
Integration Fields
| Field | Type | Description |
|---|---|---|
id_in_integration | integer | PSA system company ID |
integration_slug | string | PSA integration identifier |
Relationship Fields
| Field | Type | Description |
|---|---|---|
parent_company_id | integer | Parent company ID |
parent_company_name | string | Parent company name (read-only) |
Metadata Fields
| Field | Type | Description |
|---|---|---|
created_at | datetime | Creation timestamp |
updated_at | datetime | Last update timestamp |
slug | string | URL-friendly identifier |
object_type | string | Always "Company" |
API Patterns
List Companies
GET /api/v1/companies
x-api-key: YOUR_API_KEY
Content-Type: application/json
With Filters:
GET /api/v1/companies?name=Acme
GET /api/v1/companies?city=Springfield
GET /api/v1/companies?state=IL
GET /api/v1/companies?id_in_integration=12345
GET /api/v1/companies?search=acme
With Pagination:
GET /api/v1/companies?page=1
GET /api/v1/companies?page=2
Get Single Company
GET /api/v1/companies/123
x-api-key: YOUR_API_KEY
Create Company
POST /api/v1/companies
Content-Type: application/json
x-api-key: YOUR_API_KEY
{
"company": {
"name": "New Client Corporation",
"nickname": "NCC",
"company_type": "Customer",
"address_line_1": "123 Main Street",
"city": "Portland",
"state": "OR",
"zip": "97201",
"phone_number": "555-123-4567",
"website": "https://newclient.com",
"notes": "Onboarded February 2026. Primary contact: John Smith."
}
}
Update Company
PUT /api/v1/companies/123
Content-Type: application/json
x-api-key: YOUR_API_KEY
{
"company": {
"nickname": "NCC-UPDATED",
"notes": "Updated: New primary contact is Jane Doe (555-987-6543)."
}
}
Delete Company
DELETE /api/v1/companies/123
x-api-key: YOUR_API_KEY
Warning: Deleting a company removes all associated resources (assets, passwords, articles, etc.). Requires DELETE permission on the API key.
Archive / Unarchive Company
PUT /api/v1/companies/123/archive
x-api-key: YOUR_API_KEY
PUT /api/v1/companies/123/unarchive
x-api-key: YOUR_API_KEY
Search by PSA Integration ID
GET /api/v1/companies?id_in_integration=12345
Common Workflows
New Client Onboarding
- Create company with basic info (name, address, phone, website)
- Set integration ID to link with PSA
- Add notes for quick reference (primary contact, contract info)
- Create initial assets (servers, workstations, network devices)
- Document passwords for the company
- Create articles (network overview, procedures)
- Add website records for monitoring
async function onboardClient(clientData) {
// Step 1: Create company
const company = await createCompany({
name: clientData.companyName,
nickname: clientData.nickname,
company_type: 'Customer',
address_line_1: clientData.address,
city: clientData.city,
state: clientData.state,
zip: clientData.zip,
phone_number: clientData.phone,
website: clientData.website,
notes: `Onboarded: ${new Date().toLocaleDateString()}\nPrimary contact: ${clientData.primaryContact}`
});
// Step 2: Link to PSA
if (clientData.psaId) {
await updateCompany(company.id, {
id_in_integration: clientData.psaId
});
}
return company;
}
Client Offboarding
- Review and export critical documentation if needed
- Archive passwords (do not delete for audit purposes)
- Archive the company instead of deleting
- Add offboarding notes with date and reason
async function offboardClient(companyId, reason) {
// Add offboarding notes
await updateCompany(companyId, {
notes: `ARCHIVED: ${new Date().toLocaleDateString()} - ${reason}`
});
// Archive the company
await archiveCompany(companyId);
}
PSA Sync Verification
async function verifyPsaSync() {
const companies = await fetchAllCompanies();
const syncStatus = {
synced: [],
unsynced: [],
mismatched: []
};
for (const company of companies) {
if (!company.id_in_integration) {
syncStatus.unsynced.push(company);
} else {
const psaCompany = await lookupPsaCompany(company.id_in_integration);
if (psaCompany) {
syncStatus.synced.push(company);
} else {
syncStatus.mismatched.push(company);
}
}
}
return syncStatus;
}
Bulk Company Report
async function generateCompanyReport() {
const companies = await fetchAllCompanies();
return companies.map(company => ({
name: company.name,
nickname: company.nickname,
city: company.city,
state: company.state,
psaSynced: !!company.id_in_integration,
hasWebsite: !!company.website,
createdAt: company.created_at,
updatedAt: company.updated_at
}));
}
Error Handling
Common API Errors
| Code | Message | Resolution |
|---|---|---|
| 400 | Name can't be blank | Provide company name |
| 400 | Name has already been taken | Use unique name |
| 401 | Invalid API key | Check HUDU_API_KEY |
| 404 | Company not found | Verify company ID and HUDU_BASE_URL |
| 422 | Validation failed | Check required fields |
Validation Errors
| Error | Cause | Fix |
|---|---|---|
| Name required | Missing name field | Add name to request body |
| Name not unique | Duplicate company name | Use a different name |
| Invalid parent ID | Non-existent parent company | Verify parent_company_id |
Error Recovery Pattern
async function safeCreateCompany(data) {
try {
return await createCompany(data);
} catch (error) {
if (error.status === 422 && error.message?.includes('already been taken')) {
// Company exists - find and return it
const existing = await findCompanyByName(data.name);
return existing;
}
if (error.status === 401) {
throw new Error('API key invalid or expired. Check HUDU_API_KEY.');
}
throw error;
}
}
Best Practices
- Use descriptive names - Include location or identifier if needed for uniqueness
- Set nicknames - Short abbreviations for quick reference
- Maintain notes - Keep emergency contact info and contract details readily available
- Link to PSA - Always set
id_in_integrationfor cross-platform lookups - Use parent/child - Organize multi-location or division clients
- Archive, don't delete - Preserve historical documentation
- Include address info - Useful for dispatch and site visit planning
- Document website - Track the company's primary website URL
Related Skills
- Hudu Assets - Asset management for companies
- Hudu Articles - Knowledge base articles
- Hudu Passwords - Credential storage
- Hudu Websites - Website monitoring
- Hudu API Patterns - API reference
Alternatives
Compare before choosing
huggingface/skills
huggingface-zerogpu
AI demos and GPU compute with Gradio Spaces and Hugging Face Spaces ZeroGPU. Use when writing or reviewing code that uses `@spaces.GPU`, configuring `python_version` or `requirements.txt` for a ZeroGPU Space, or handling ZeroGPU-specific code constraints — pickle-based process isolation, `gr.State` semantics across the worker boundary, no `torch.compile` (use AoTI instead), CUDA wheel-only builds (no `nvcc` at build or runtime), large vs xlarge sizing, and dynamic duration callables. Make sure t
K-Dense-AI/scientific-agent-skills
esm
Use when working directly with the `esm` Python SDK, ESM3 or ESMC model IDs, Forge/Biohub inference clients, or ESMFold2 folding workflows.
testdouble/han
plan-a-feature
Builds a feature specification from scratch through a relentless, evidence-based interview that walks the design tree decision-by-decision, resolving dependencies as it goes. Use when the user wants to plan, design, scope, specify, or flesh out a new feature, capability, or system behavior before implementation. Produces a feature specification focused on system behaviors, not implementation detail. Does not refine or stress-test an existing plan — use iterative-plan-review. Does not document al
btspoony/mstar-harness
mstar-audit
Morning Star codebase audit — survey any repository as a senior advisor and produce prioritized, self-contained improvement plans for the normal Prepare → Execute flow to pick up. Strictly read-only on source code. Use when asked to audit or survey a codebase, find improvement opportunities (bugs, security, performance, test gaps, tech debt, dependency upgrades, DX), suggest what to build next (direction/roadmap), or when the user says 'what should I improve / fix / refactor / upgrade in this co