account-hygiene
Periodic hygiene review of a client's 1Password account for QBRs and license true-ups: reconciling active and suspended seats…
Tracking SSL certificate expiry across every client domain in a GoGetSSL reseller account: which order fields carry the expiry date, how to treat unissued orders, grouping certificates by client domain, renewal tiers, batch status checks for a known set of orders, and reading
Claude Code
$ npx -y skills add wyre-ai/msp-claude-plugins --skill certificate-expiry --agent claude-code
Codex
$ npx skills add wyre-ai/msp-claude-plugins --skill certificate-expiry -a codex -y
Cursor
$ npx skills add wyre-ai/msp-claude-plugins --skill certificate-expiry -a cursor -y
Gemini CLI
$ npx skills add wyre-ai/msp-claude-plugins --skill certificate-expiry -a gemini-cli -y
GitHub Copilot
$ npx skills add wyre-ai/msp-claude-plugins --skill certificate-expiry -a github-copilot -y
OpenCode
$ npx skills add wyre-ai/msp-claude-plugins --skill certificate-expiry -a opencode -y
Windsurf
$ npx skills add wyre-ai/msp-claude-plugins --skill certificate-expiry -a windsurf -y
name: "GoGetSSL Certificate Expiry" description: > Tracking SSL certificate expiry across every client domain in a GoGetSSL reseller account: which order fields carry the expiry date, how to treat unissued orders, grouping certificates by client domain, renewal tiers, batch status checks for a known set of orders, and reading one order's validity and renewal flags. when_to_use: >- When an MSP needs to know which client certificates bought through GoGetSSL are expiring, already expired, or stuck before issuance. Use when: ssl expiry, certificate expiry report, expiring certificates, cert renewal list, which certs expire this month, expired ssl, gogetssl orders, or certificate inventory.
An expired certificate is one of the most visible outages an MSP can let happen: the client's site or mail shows a browser warning and the client notices before you do. GoGetSSL holds the record of every certificate bought through the reseller account, so it is the right source for a monthly expiry sweep. Every tool here is read tier and none is admin-gated in Conduit.
[renewal-prep](../renewal-prep/SKILL.md). This skill finds what expires; that one gets a renewal ready.
CA account, another reseller): GoGetSSL has no record of them. Only orders in this reseller account appear.
| Field | Source | Meaning | |-------|--------|---------| | `order_id` | all order tools | Numeric GoGetSSL order ID | | `common_name` | `gogetssl_orders_list`, `gogetssl_orders_get_status` | Primary domain on the certificate | | `valid_from` / `valid_till` | `gogetssl_orders_list`, `gogetssl_orders_get_status` | Certificate validity, `YYYY-MM-DD`. `null` or `0000-00-00` until issued | | `expires` | `gogetssl_orders_get_statuses` | Expiry date, returned only for active orders | | `begin_date` / `end_date` | `gogetssl_orders_get_status` | The order's subscription period, which can be longer than one certificate's validity on a multi-year order | | `status` | all order tools | `active`, `processing`, `expired`, `revoked`, `rejected` (plus other vendor statuses on single-order detail) |
**Certificate validity versus subscription.** Public TLS certificate lifetimes are capped by the CA/Browser Forum, and that cap keeps shrinking, but GoGetSSL sells multi-year subscriptions. On such an order, `valid_till` is when the current certificate expires and `end_date` is when the subscription ends. A certificate expiring inside a paid subscription needs a reissue, not a new purchase. Check `gogetssl_orders_get_status` before telling anyone to buy.
1. Call `gogetssl_orders_list` with `status: "active"`. The vendor does not page this list, so the status filter is what keeps it inside the response limit. If the response comes back `truncated`, or fails with the response-size error, do not report from it; use the paged fallback below. 2. Drop rows whose `valid_till` is `null` or `0000-00-00`. Those were never issued; handle them in the stuck-order check below. 3. Compute days to expiry from today and sort ascending. 4. Bucket into tiers:
| Tier | Days left | Action | |------|-----------|--------| | Critical | 14 or fewer | Renew or reissue now; validation can take days | | Due | 15-30 | Start renewal this week | | Upcoming | 31-60 | Quote the client, confirm the domain is still in use | | Healthy | over 60 | No action |
5. Group by registrable domain under `common_name` and map domains to clients. Flag domains you cannot map. 6. For each Critical and Due order, call `gogetssl_orders_get_status` to read `end_date`, the reissue and renew flags, and the domains and SANs covered. That separates "reissue inside the subscription" from "buy a renewal".
When `gogetssl_orders_list` for a status is truncated or too large:
1. Page through `gogetssl_orders_list_ssl` (`limit` and `offset`) to get every order ID, and keep the ones with the status you were listing. 2. Call `gogetssl_orders_get_statuses` with those IDs in batches of 100. For active orders, use `expires` as the expiry date (`valid_till`). Expired orders get no `expires`, so call `gogetssl_orders_get_status` for each expired ID to read `valid_till` before filtering by date. If any expiry date cannot be retrieved, mark the expired-orders report incomplete and list the order IDs you could not date. 3. These results carry no domain. Call `gogetssl_orders_get_status` for each order you will report (for the expiry sweep, the ones inside the planning window) to get `common_name` and the SANs before grouping. Reuse any order detail you already retrieved in step 2.
Call `gogetssl_orders_list` with `status: "expired"` (or the paged fallback) and keep rows whose `valid_till` is within the last 30-60 days. These are either sites that went dark or certificates that were replaced by a new order. Before treating one as replaced, read both orders with `gogetssl_orders_get_status` and check that the active order covers every name the expired one did, `common_name` and SANs. Report any name it does not cover.
Call `gogetssl_orders_list` with `status: "processing"`. An order that has sat in processing for days usually failed domain validation. Read it with `gogetssl_orders_get_status`: the domain validation status and method fields tell you whether it is waiting on an approver email, a DNS record or an HTTP file. Fixing it (resending the email, switching the DCV method) happens in the GoGetSSL client area; this plugin cannot do it.
When you already have order IDs (from a previous report or a PSA configura
One 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.