Skip to content
✨ Publier v1 is live — a polished docs platform built for the open web.
On this page

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

Terminal window
publier doctor

Checks

  • config — checks that publier.config.yaml exists 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_TOKEN or ~/.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

CodeMeaning
0Always. Read the output for issues.