account-hygiene
Periodic hygiene review of a client's 1Password account for QBRs and license true-ups: reconciling active and suspended seats…
ConnectWise Automate computer/endpoint management: computer identifiers (ComputerID, Name, ComputerGUID, MAC), status values, OS types, hardware/software inventory, disk, patch, and antivirus status, plus remote management operations.
Claude Code
$ npx -y skills add wyre-ai/msp-claude-plugins --skill computers --agent claude-code
Codex
$ npx skills add wyre-ai/msp-claude-plugins --skill computers -a codex -y
Cursor
$ npx skills add wyre-ai/msp-claude-plugins --skill computers -a cursor -y
Gemini CLI
$ npx skills add wyre-ai/msp-claude-plugins --skill computers -a gemini-cli -y
GitHub Copilot
$ npx skills add wyre-ai/msp-claude-plugins --skill computers -a github-copilot -y
OpenCode
$ npx skills add wyre-ai/msp-claude-plugins --skill computers -a opencode -y
Windsurf
$ npx skills add wyre-ai/msp-claude-plugins --skill computers -a windsurf -y
name: "ConnectWise Automate Computers" description: > ConnectWise Automate computer/endpoint management: computer identifiers (ComputerID, Name, ComputerGUID, MAC), status values, OS types, hardware/software inventory, disk, patch, and antivirus status, plus remote management operations. when_to_use: >- When listing, searching, managing, and monitoring devices. Use when: automate computer, automate endpoint, automate device, automate agent, computer status, computer lookup, managed computer, computer online, computer offline, computer inventory, computer patches, computer antivirus, or labtech computer.
Computers are the core managed entities in ConnectWise Automate. Each computer represents an endpoint with the Automate agent installed - workstations, servers, or network devices. This skill covers computer identification, status monitoring, inventory, patch management, and antivirus status.
endpoint agent, never an AI subagent definition under `agents/*.md`.
parallel configuration record with its own ID; an Automate `ComputerID` is not a PSA `configuration/id`. Reach configurations through `connectwise-psa-api-patterns` (`/company/configurations`).
health live here; finding the right script, validating its parameters and reading execution results are `connectwise-automate-scripts`.
of devices and endpoints; use `datto-rmm-devices`, `ninjaone-devices` or `atera-devices`.
| Tool | Tier | Purpose | |------|------|---------| | `cwautomate_computers_list` | read | List computers, filtered by client, location or online status | | `cwautomate_computers_get` | read | One computer's detail | | `cwautomate_computers_search` | read | Find computers by (partial) name | | `cwautomate_commands_list` | read | Automate's fixed command catalog; find a `command_id` here | | `cwautomate_computers_command_status` | read | Read a queued command by `computer_id` and `execution_id` | | `cwautomate_computers_reboot` | write | Queue a reboot (catalog reboot command, or `command_id`) | | `cwautomate_computers_run_command` | admin | Queue a catalog command with positional `parameters` |
Commands are queued, not run synchronously. `cwautomate_computers_reboot` and `cwautomate_computers_run_command` return an `execution_id` (by default without waiting). Poll `cwautomate_computers_command_status`; never re-issue on a timeout or a "Duplicate command" result, because the first one is still queued. If a timeout leaves no `execution_id` to poll, check the computer's command queue in the Automate console (or escalate for a manual check) before retrying. Free-text commands are not accepted, and the API user's command level silently caps which catalog commands may be issued.
Every computer has multiple identifiers:
| Identifier | Type | Description | Example | |------------|------|-------------|---------| | `ComputerID` | integer | Primary key, auto-incrementing | `12345` | | `Name` | string | Computer hostname | `ACME-DC01` | | `ComputerGUID` | string | Globally unique identifier | `a1b2c3d4-e5f6-7890-abcd-ef1234567890` | | `LastContact` | datetime | Last agent check-in time | `2024-02-15T10:30:00Z` | | `MAC` | string | Primary MAC address | `00:1A:2B:3C:4D:5E` |
| Status | Description | Business Impact | |--------|-------------|-----------------| | `Online` | Agent actively checking in | Normal operation | | `Offline` | No agent communication | May require attention | | `Degraded` | Agent checking in with issues | Performance concerns | | `Unknown` | Status undetermined | Check connectivity |
| OS Type | Examples | |---------|----------| | `Windows Server` | 2016, 2019, 2022 | | `Windows Workstation` | Windows 10, Windows 11 | | `macOS` | Monterey, Ventura, Sonoma | | `Linux` | Ubuntu, CentOS, RHEL |
Computer objects expose roughly 30 fields covering identifiers, client/location association, status, network, OS, hardware, agent, and timestamp data, plus an `ExtraData` map for Extra Data Fields (EDFs). `ComputerInventory` objects cover drives, software, memory, network adapters, printers, services, and monitors.
See [references/fields.md](references/fields.md) for the complete `Computer` and `ComputerInventory` field reference.
All endpoints require `Authorization: Bearer {token}` (see the API Patterns skill for authentication and token management). Core calls:
`Status = 'Online'`, `OS contains 'Windows Server'`, etc. - see the API Patterns skill for full OData filter syntax)
`/Computers/{id}/Patches`, `/Computers/{id}/Antivirus`
See [references/api.md](references/api.md) for the complete endpoint catalog with example requests and responses.
async function findComputerByHostname(client, hostname) {
const computers = await client.request(
`/Computers?condition=Name contains '${hostname}'&pageSize=100`
);
if (computers.length === 0) {
return { found: false, suggestions: [] };
}
if (computers.length === 1) {
return { found: true, computer: computers[0] };
}
return {
found: false,
ambiguous: true,
suggestions: computers.map(c => ({
name: c.Name,
id: c.ComputerID,
client: c.Client?.Name,
status: c.StatOne command to supercharge Claude Code for MSP workflows. Then restart Claude Code. That's it. Documentation: wyre-ai.github.io/msp-claude-plugins
Periodic hygiene review of a client's 1Password account for QBRs and license true-ups: reconciling active and suspended seats…
1Password MCP fundamentals through Conduit: the region plus two independent credential halves (Events Reporting token, Users API…
How to review a departing or departed user's 1Password footprint with the read-only tools: confirm the seat is suspended, find…
Triage of 1Password sign-in attempts for one client account: pulling the sign-in feed over a window, grouping failures by user,…
3CX's live-operations surface: read-only visibility into active calls, recordings, voicemail, department and queue membership,…
3CX's read-only directory surface: resolving a caller by email or by exact extension, searching the PBX's own phonebooks,…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.