Source profileQuality 97/100

WYRE-AI/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
42
Declared platforms
0
Static risk flags
1
Last source update
2026-08-28
Source checked
2026-08-28

Decision brief

What it does: 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.

Best for

    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

    PlatformStatusEvidenceWhat to check
    CodexNot declaredNo explicit evidencePortability before use
    Claude CodeNot declaredNo explicit evidencePortability before use
    CursorNot declaredNo explicit evidencePortability before use
    Gemini CLINot declaredNo explicit evidencePortability before use
    Open the compatibility checker

    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.

    Source-detected install commandSource
    npx skills add https://github.com/WYRE-AI/msp-claude-plugins --skill "msp-claude-plugins/hudu/hudu/skills/companies"
    Safe inspection promptEditorial

    Inspect the Agent Skill "Hudu Companies" from https://github.com/WYRE-AI/msp-claude-plugins/blob/5005f73ba2f52cd299f58aa6bb79f4e70ae87103/msp-claude-plugins/hudu/hudu/skills/companies/SKILL.md at commit 5005f73ba2f52cd299f58aa6bb79f4e70ae87103. 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

    1. 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.
    2. 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
    3. 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.
    4. 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:
    5. 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

    medium · line 147

    The documentation includes network, browsing, or remote request actions.

    "website": "https://newclient.com",

    Evidence record

    Why each signal appears

    EvidenceSourceComputedTestedEditorial
    SignalValueEvidence typeMeaning
    Quality score97/100ComputedDocumentation, specificity, maintenance, and trust rules
    Repository stars42SourceRepository attention, not individual Skill quality
    Compatibility0 platformsSourceDeclared in the catalog source record
    Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

    Pinned source

    Provenance and original SKILL.md

    Repository
    WYRE-AI/msp-claude-plugins
    Skill path
    msp-claude-plugins/hudu/hudu/skills/companies/SKILL.md
    Commit
    5005f73ba2f52cd299f58aa6bb79f4e70ae87103
    License
    Apache-2.0
    Collected
    2026-08-28
    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, or halopsa-clients. Hudu's id_in_integration field holds the PSA's ID precisely because the two are different records.
    • The same client in IT Glue — IT Glue calls these Organizations; use itglue-api-patterns for its equivalent surface.
    • The monitored client container — an RMM organization or site is a monitoring scope, not documentation; use ninjaone-organizations, atera-customers, or datto-rmm-sites.
    • The client's licence or billing entity — use pax8-companies, sherweb-customers, or qbo-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:

    PatternDescriptionExample
    Active ClientCurrently serviced customerStandard operational state
    ProspectPotential clientPre-sales documentation
    VendorProduct/service supplierSoftware vendors
    InternalYour own MSPInternal documentation
    Former ClientPreviously servicedHistorical 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

    FieldTypeRequiredDescription
    idintegerSystemAuto-generated unique identifier
    namestringYesCompany name
    nicknamestringNoShort name or abbreviation
    company_typestringNoType classification
    address_line_1stringNoStreet address line 1
    address_line_2stringNoStreet address line 2
    citystringNoCity
    statestringNoState/province
    zipstringNoPostal code
    country_namestringNoCountry
    phone_numberstringNoPhone number
    fax_numberstringNoFax number
    websitestringNoCompany website URL
    notesstringNoRich text notes

    Integration Fields

    FieldTypeDescription
    id_in_integrationintegerPSA system company ID
    integration_slugstringPSA integration identifier

    Relationship Fields

    FieldTypeDescription
    parent_company_idintegerParent company ID
    parent_company_namestringParent company name (read-only)

    Metadata Fields

    FieldTypeDescription
    created_atdatetimeCreation timestamp
    updated_atdatetimeLast update timestamp
    slugstringURL-friendly identifier
    object_typestringAlways "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

    1. Create company with basic info (name, address, phone, website)
    2. Set integration ID to link with PSA
    3. Add notes for quick reference (primary contact, contract info)
    4. Create initial assets (servers, workstations, network devices)
    5. Document passwords for the company
    6. Create articles (network overview, procedures)
    7. 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

    1. Review and export critical documentation if needed
    2. Archive passwords (do not delete for audit purposes)
    3. Archive the company instead of deleting
    4. 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

    CodeMessageResolution
    400Name can't be blankProvide company name
    400Name has already been takenUse unique name
    401Invalid API keyCheck HUDU_API_KEY
    404Company not foundVerify company ID and HUDU_BASE_URL
    422Validation failedCheck required fields

    Validation Errors

    ErrorCauseFix
    Name requiredMissing name fieldAdd name to request body
    Name not uniqueDuplicate company nameUse a different name
    Invalid parent IDNon-existent parent companyVerify 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

    1. Use descriptive names - Include location or identifier if needed for uniqueness
    2. Set nicknames - Short abbreviations for quick reference
    3. Maintain notes - Keep emergency contact info and contract details readily available
    4. Link to PSA - Always set id_in_integration for cross-platform lookups
    5. Use parent/child - Organize multi-location or division clients
    6. Archive, don't delete - Preserve historical documentation
    7. Include address info - Useful for dispatch and site visit planning
    8. Document website - Track the company's primary website URL

    Related Skills

    Frequently asked questions

    What to verify before installation and use

    What does the Hudu Companies source document cover?

    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.

    How do I install Hudu Companies?

    The source record exposes this install command: npx skills add https://github.com/WYRE-AI/msp-claude-plugins --skill "msp-claude-plugins/hudu/hudu/skills/companies". Inspect the command and pinned source before running it.

    Which permission-related actions were detected?

    Static rules flagged network in the source; the page lists the matching lines and excerpts.

    Alternatives

    Compare before choosing

    Computed 100147

    oaustegard/claude-skills

    featuring

    Generate hierarchical _FEATURES.md files that describe what a codebase DOES from a user/consumer perspective, anchored to source symbols via tree-sitting. Supports large complex codebases through feature-driven decomposition into sub-feature files. Uses a multi-pass synthesis: orientation → detail → overview rewrite. Use when someone says "what does this do", "document features", "feature inventory", "_FEATURES.md", or needs to understand a codebase's purpose before modifying it. Complements tre

    Computed 10017

    dancingteeth/unified-code-review

    unified-code-review

    Risk-first code review for PRs and branch audits: blast-radius triage, agent-authored discipline (tests first, intent evidence), call-graph pincer for integration defects between modules, then structural code-judo bar. Use when reviewing PRs, auditing agent-written diffs, catching rubber-stamp green CI, or wiring bugs single-file review misses. Prefer over structure-only thermo-nuclear review alone. Do not use for unrelated coding tasks or as an always-on rule.

    Computed 99241

    enuno/unifi-mcp-server

    unifi-mcp-tool-builder

    Specialized guide for adding new MCP tools to the UniFi MCP Server following project standards, UniFi API patterns, and test-driven development practices. Use when implementing new UniFi Network Controller features as MCP tools.

    Computed 9970

    PaulRBerg/agent-skills

    skill-writing

    Create/scaffold/init a project-local agent skill under `.agents/skills` in an ordinary repository; defer to repository instructions that define a source catalog and lifecycle.