publier doctor
Diagnose config, sign-in, seat, and project issues.
Runs a short set of diagnostic checks and prints a summary with remediation hints. Always exits 0 — read the output to identify issues.
publier doctor walks the same chain a build walks, in order, and names the first link that is broken. “Your sign-in works but this account holds no seat” and “this machine cannot reach the sign-in service” have completely different remedies, so they are never collapsed into one line.
Usage
publier doctorChecks
- config — checks that
publier.config.yamlexists and parses as YAML. It does not validate the complete schema or dependency compatibility. - cli config — the sign-in configuration cached from the Publier deployment.
- issuer — a live request confirming this machine can actually reach the sign-in service. This is the check a corporate proxy or captive portal fails.
- signing keys — the cached public keys builds verify your seat against.
- token — the credential from
PUBLIER_TOKENor~/.config/publier/auth.json, and whether it has expired. - seat — whether the verified account actually holds a Publier seat.
- gate binary — whether
@publier/shell, the package carrying the build pipeline, is installed in this project.
It also repairs in passing where repairing is free: it renews an expiring token and re-fetches the key cache before judging them, because a stale cache is exactly what someone running doctor is trying to fix.
Sample output
All checks passing (client and account ids are elided here; publier doctor prints them in full):
publier doctor
✓ config publier.config.yaml — valid ✓ cli config Cached for https://atestum.com (client …) ✓ issuer https://atestum.com reachable (https://atestum.com/oauth/v2/token) ✓ signing keys 2 key(s) cached, fetched 2026-07-15T14:12:03Z (algs: EdDSA, RS256, RS384, RS512, ES256, ES384) ✓ token Stored for https://atestum.com (expires 2026-07-15T14:30:00Z, renews automatically) ✓ seat Active, tier pro (account …) ✓ gate binary @publier/shell installed (/home/you/my-site/node_modules/@publier/shell/package.json)
All checks passed.Signed in, but with no seat — note that the sign-in itself is fine, so signing in again would change nothing:
publier doctor
✓ config publier.config.yaml — valid ✓ cli config Cached for https://atestum.com (client …) ✓ issuer https://atestum.com reachable (https://atestum.com/oauth/v2/token) ✓ signing keys 2 key(s) cached, fetched 2026-07-15T14:12:03Z (algs: EdDSA, RS256, RS384, RS512, ES256, ES384) ✓ token Stored for https://atestum.com (expires 2026-07-15T14:30:00Z, renews automatically) ✗ seat Signed in, but this account holds no Publier seat. → Ask an administrator to assign you a Publier seat. ✓ gate binary @publier/shell installed (/home/you/my-site/node_modules/@publier/shell/package.json)
1 issue found. See https://publier.net/docs/help/troubleshooting for remediation steps.Never signed in on this machine — the cached keys are missing, so nothing downstream can be verified:
publier doctor
✓ config publier.config.yaml — valid ✗ cli config Not cached on this machine. → Run: publier login (while online) ✓ issuer https://atestum.com reachable (https://atestum.com/oauth/v2/token) ✗ signing keys No cached keys for https://atestum.com. → Run: publier login (while online) ✗ token Not signed in. → Run: publier login ✗ seat No credential to check. → Run: publier login ✓ gate binary @publier/shell installed (/home/you/my-site/node_modules/@publier/shell/package.json)
4 issues found. See https://publier.net/docs/help/troubleshooting for remediation steps.Exit codes
| Code | Meaning |
|---|---|
0 | Always. Read the output for issues. |