Agent-readiness doctor

@agentora/doctorscores how agent-ready your actions are by linting the manifest IR. It is agentora’s headline feature: a number that tells you whether the capabilities you exposed are safe and legible for agents to call.

$ npx agentora doctor
  ✓ products.search   ready
  ⚠ invoices.create   no permission hook
  ✗ accounts.delete   no idempotency key, unbounded concurrency
  Agent-readiness: 72/100

Rules

RuleSeverityFires when
descriptionwarnAn action has no description (agents read it to choose tools).
write-idempotencyerrorA write action declares no idempotency.
write-permissionwarnA write action declares no auth (permission hook).
write-concurrencywarnA write action declares no bounded concurrency.

Scoring

The score starts at 100 and deducts per finding (warning −5, error −20), clamped to [0, 100]. It is deterministic and monotonic — fixing a problem never lowers the score, and an empty manifest scores 100.

import { doctor } from '@agentora/doctor'

const report = doctor(app.manifest())
report.score    // 0–100
report.findings // [{ action, severity, rule, message }]

The agentora doctor CLI renders this report and exits non-zero when any error-severity finding is present — wire it into CI to gate agent-readiness.