Files
zeus-skills/ops/connectwise
Hermes Agent da6eadfe4d Add msp/security-report (sanitized): generic report flow; references carry placeholder paths
Hub tree re-sanitized across all ConnectWise skills + references; history rebuilt
so the unsanitized security-report blob (007dc40) and the wholesale hub expansion
(b42a8e3) are no longer reachable (scrub decision in issue #31 comment 139, option b).
2026-11-01 13:34:58 -08:00
..

ops/connectwise — ConnectWise PSA skills & tools

Published from VistaNet's Hermes fleet skill set (~/.hermes/skills).

Credentials are NOT embedded. Scripts resolve CW API auth from ~/.secrets/connectwise (a KV file) or CW_* environment variables. Required keys:

CW_COMPANY_ID=VNI
CW_PUBLIC_KEY=...
CW_PRIVATE_KEY=...
CW_CLIENT_ID=<uuid from CW Developer Network>

Note: the fleet stores the public key with a leading + (CW_PUBLIC_KEY=+...); the loaders normalize it (lstrip("+") / ++ collapse) before building the companyid+publickey:privatekey Basic auth string. A clientId header is always required — 401 with a valid Basic auth means the client ID is missing or disabled.

Directory Purpose Scripts
connectwise/ CW API core: schedule entries, ticket create/notes, board & status IDs, env-var auth connectwise_api.py, cw_company_ticket_audit.py, cw_week_schedule_plan.py
connectwise-msp/ Deep PSA reference: auth format, cwendpoints.json (full API spec), ticket fetching, time notes cw_api.py (workhorse: cw_request()), reads ~/.secrets/connectwise
connectwise-reporting/ Cross-company reporting recipes (server-side filtering traps, raw API auth) top-companies-by-hours.py, fetch-customer-time-entries.py
connectwise-n8n-automation/ CW × n8n automation patterns — (docs)
connectwise-open-tickets-robust/ Robust open-ticket fetching (handles empty/stale API results) schedule_cert_renewals.py
connectwise-open-tickets-report/ Open-ticket report generator generate_open_tickets.py
connectwise-psa-reporting/ Raw API reporting quirks + API reference — (docs)
cw-triage-workflow/ ConnectWise triage workflow for n8n triage builds — (docs)

Sanitization applied on publish: hardcoded client id, public key, and private key literals were replaced with _load_cw_client_id() / _load_creds() loaders and <PLACEHOLDER> text in the reference docs. Run scripts with system Python (/usr/bin/python3 on the fleet host) — the Hermes-bundled 3.14 runtime lacks requests.