{"_id":"@acfstandards/cli","_rev":"3-a9aabf6ec8af04ff1a86077e23704c37","name":"@acfstandards/cli","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.0":{"name":"@acfstandards/cli","version":"1.0.0","keywords":["acf","ai-agent","certification","testing","compliance","behavioral-testing"],"author":{"name":"Blue Horn Ventures LLC","email":"registry@acfstandards.org"},"license":"MIT","_id":"@acfstandards/cli@1.0.0","maintainers":[{"name":"bluehornv","email":"arvind@bluehornv.com"},{"name":"techiarvind","email":"arvindverma.email@gmail.com"}],"homepage":"https://acfstandards.org","bugs":{"url":"https://github.com/acfstandards/acf/issues","email":"registry@acfstandards.org"},"bin":{"acf-certify":"dist/cli.js"},"dist":{"shasum":"e866738058422d62869c419d328940be5c2fc377","tarball":"https://registry.npmjs.org/@acfstandards/cli/-/cli-1.0.0.tgz","fileCount":16,"integrity":"sha512-n1VqbfG+GnzcZRcrpwgWQ8Q2rC20TAgEO9haE56QW2XcoMmzl7pbjIuDQDUJL4qMmeDJev1vuXs4VEnW6Wljfw==","signatures":[{"sig":"MEQCIDQPBXyiYeKt0QnXYAejwEs3a5tBAqjcgQxeGyjpJSkjAiBeudgyfVXmzkICY1x4oWCmKAccB+9vQOWfWYFTRaxfqg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":41792},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"9115ca2dc9ce0b9d787f619f86f6f6fd0c54d3fd","scripts":{"dev":"tsc --watch","build":"tsc && chmod +x dist/cli.js","clean":"rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"techiarvind","email":"arvindverma.email@gmail.com"},"repository":{"url":"git+https://github.com/acfstandards/acf.git","type":"git","directory":"packages/acf-cli"},"_npmVersion":"11.12.1","description":"ACF Agent Certification CLI — run behavioral certification for your AI agent from the terminal","directories":{},"_nodeVersion":"25.9.0","dependencies":{"ora":"^8.1.0","chalk":"^5.3.0","commander":"^12.1.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_1.0.0_1777327861795_0.48967062765666225","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@acfstandards/cli","version":"1.0.1","keywords":["acf","ai-agent","certification","testing","compliance","behavioral-testing"],"author":{"name":"Blue Horn Ventures LLC","email":"registry@acfstandards.org"},"license":"MIT","_id":"@acfstandards/cli@1.0.1","maintainers":[{"name":"bluehornv","email":"arvind@bluehornv.com"},{"name":"techiarvind","email":"arvindverma.email@gmail.com"}],"homepage":"https://acfstandards.org","bugs":{"url":"https://github.com/acfstandards/acf/issues","email":"registry@acfstandards.org"},"bin":{"acf-certify":"dist/cli.js"},"dist":{"shasum":"3d7b6d5bb904760023b00bc8b4d053c8130991dd","tarball":"https://registry.npmjs.org/@acfstandards/cli/-/cli-1.0.1.tgz","fileCount":18,"integrity":"sha512-xdipoo4bU4ZfNOOR+1D9UMssItqsPIMXBPAPicCakyQVGpY4kJCmJg0VmCf5Z7AyKTY/TQaTDEJ5pDSb3dGKEA==","signatures":[{"sig":"MEUCIGLSeDlxtu4YQn7IOMnyqMA6qBBy3OBmNisMubVTbVZvAiEA/Oqm1Hh7G+Wj0NzVSjN7UAu2CqzGIbAcwhkgoUgVSHY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47443},"main":"./dist/index.js","type":"module","_from":"file:/Users/arvindverma/Downloads/acf-npm-tarballs/acfstandards-cli-1.0.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsc --watch","build":"tsc && chmod +x dist/cli.js","clean":"rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"techiarvind","email":"arvindverma.email@gmail.com"},"_resolved":"/Users/arvindverma/Downloads/acf-npm-tarballs/acfstandards-cli-1.0.1.tgz","_integrity":"sha512-xdipoo4bU4ZfNOOR+1D9UMssItqsPIMXBPAPicCakyQVGpY4kJCmJg0VmCf5Z7AyKTY/TQaTDEJ5pDSb3dGKEA==","repository":{"url":"git+https://github.com/acfstandards/acf.git","type":"git","directory":"packages/acf-cli"},"_npmVersion":"11.19.0","description":"ACF Agent Certification CLI — run behavioral certification for your AI agent from the terminal","directories":{},"_nodeVersion":"26.7.0","dependencies":{"ora":"^8.1.0","chalk":"^5.3.0","commander":"^12.1.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_1.0.1_1786478720552_0.4799649022675787","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@acfstandards/cli","version":"1.0.2","description":"ACF Agent Certification CLI — run behavioral certification for your AI agent from the terminal","license":"MIT","author":{"name":"Blue Horn Ventures LLC","email":"registry@acfstandards.org"},"homepage":"https://acfstandards.org","bugs":{"url":"https://github.com/acfstandards/acf/issues","email":"registry@acfstandards.org"},"repository":{"type":"git","url":"git+https://github.com/acfstandards/acf.git","directory":"packages/acf-cli"},"keywords":["acf","ai-agent","certification","testing","compliance","behavioral-testing"],"type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"bin":{"acf-certify":"dist/cli.js"},"engines":{"node":">=18.0.0"},"scripts":{"build":"tsc && chmod +x dist/cli.js","dev":"tsc --watch","prepublishOnly":"npm run clean && npm run build","clean":"rm -rf dist","test":"vitest run","test:watch":"vitest"},"dependencies":{"chalk":"^5.3.0","commander":"^12.1.0","ora":"^8.1.0"},"devDependencies":{"@types/node":"^20.14.0","typescript":"^5.5.0","vitest":"^2.1.9"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_id":"@acfstandards/cli@1.0.2","_integrity":"sha512-F1hJofpU2bafA6tpOSUsaF6Wz31ZabKU9SkJG5+AXF/JdaJPQjSWQeNqCm68tjU94RuwM4cg/cd7IgJMZ+hBZg==","_resolved":"/Users/arvindverma/Downloads/acf-npm-tarballs/acfstandards-cli-1.0.2.tgz","_from":"file:/Users/arvindverma/Downloads/acf-npm-tarballs/acfstandards-cli-1.0.2.tgz","_nodeVersion":"26.7.0","_npmVersion":"11.19.0","dist":{"integrity":"sha512-F1hJofpU2bafA6tpOSUsaF6Wz31ZabKU9SkJG5+AXF/JdaJPQjSWQeNqCm68tjU94RuwM4cg/cd7IgJMZ+hBZg==","shasum":"b499efff6f80dde668cb3c9a0fe7107487761ea9","tarball":"https://registry.npmjs.org/@acfstandards/cli/-/cli-1.0.2.tgz","fileCount":20,"unpackedSize":71102,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIA9bzB9lnBme2WzDH5BHOUKIlph8cQopPJHbw0a1cO5/AiAllATzC6qpEUZkmsuwQpD47ggYTAsWt0V6psRmMq/kSQ=="}]},"_npmUser":{"name":"techiarvind","email":"arvindverma.email@gmail.com"},"directories":{},"maintainers":[{"name":"bluehornv","email":"arvind@bluehornv.com"},{"name":"techiarvind","email":"arvindverma.email@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cli_1.0.2_1786481947181_0.9517955289856064"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-27T22:11:01.643Z","modified":"2026-08-11T20:59:07.553Z","1.0.0":"2026-04-27T22:11:01.918Z","1.0.1":"2026-08-11T20:05:20.714Z","1.0.2":"2026-08-11T20:59:07.364Z"},"bugs":{"url":"https://github.com/acfstandards/acf/issues","email":"registry@acfstandards.org"},"author":{"name":"Blue Horn Ventures LLC","email":"registry@acfstandards.org"},"license":"MIT","homepage":"https://acfstandards.org","keywords":["acf","ai-agent","certification","testing","compliance","behavioral-testing"],"repository":{"type":"git","url":"git+https://github.com/acfstandards/acf.git","directory":"packages/acf-cli"},"description":"ACF Agent Certification CLI — run behavioral certification for your AI agent from the terminal","maintainers":[{"name":"bluehornv","email":"arvind@bluehornv.com"},{"name":"techiarvind","email":"arvindverma.email@gmail.com"}],"readme":"# @acfstandards/cli\n\nRun [ACF](https://acfstandards.org) behavioral certification for your AI agent from the terminal.\n\nACF (Agent Certification Framework) tests AI agents against defined behavioral standards and issues tiered certifications. This CLI triggers the certification process using a code obtained after registration and payment on the ACF portal.\n\nAll tests run **server-side** — prompts and rubrics never leave the ACF platform.\n\n> **Certifying an agent that is not already an HTTPS endpoint** — a Claude Managed\n> Agent, an OpenAI agent, or anything on a private network — needs\n> [`@acfstandards/agent-bridge`](https://www.npmjs.com/package/@acfstandards/agent-bridge)\n> in front of it. [Connect your agents to ACF](../../docs/connect-your-agents.md)\n> is the end-to-end path covering both packages.\n\n## Install\n\n```bash\nnpm install -g @acfstandards/cli\n```\n\nOr run directly with `npx`:\n\n```bash\nnpx @acfstandards/cli --code acf_abc123 --endpoint https://my-agent.com/chat\n```\n\n## Prerequisites\n\n1. **Register** your agent at [acfstandards.org](https://acfstandards.org/register)\n2. **Select a tier** and complete payment\n3. **Copy your certification code** (`acf_...`) from the portal\n\nYour agent must expose an HTTP endpoint that accepts POST requests with an OpenAI-compatible messages format:\n\n```json\n{\n  \"messages\": [\n    { \"role\": \"user\", \"content\": \"...\" }\n  ]\n}\n```\n\n## CLI Usage\n\n### Basic\n\n```bash\nacf-certify --code acf_abc123 --endpoint https://my-agent.com/chat\n```\n\n### With Bearer Token Auth\n\n```bash\nacf-certify \\\n  --code acf_abc123 \\\n  --endpoint https://my-agent.com/chat \\\n  --auth-method bearer \\\n  --auth-secret sk-my-token\n```\n\n### With API Key Auth\n\n```bash\nacf-certify \\\n  --code acf_abc123 \\\n  --endpoint https://my-agent.com/chat \\\n  --auth-method api_key \\\n  --auth-header X-API-Key \\\n  --auth-secret my-key\n```\n\n### With Anthropic Request Format\n\n```bash\nacf-certify \\\n  --code acf_abc123 \\\n  --endpoint https://my-agent.com/chat \\\n  --format anthropic\n```\n\n### All Options\n\n| Option | Required | Default | Description |\n|--------|----------|---------|-------------|\n| `--code` | Yes | — | Certification code from ACF portal |\n| `--endpoint` | Yes | — | Agent HTTP endpoint URL |\n| `--auth-method` | No | `none` | `bearer`, `api_key`, or `none` |\n| `--auth-secret` | No* | — | Auth token or API key (*required if method ≠ none) |\n| `--auth-header` | No | `X-API-Key` (api_key) / `Authorization` (bearer) | Custom header name for the secret |\n| `--format` | No | `openai` | Request format: `openai`, `anthropic`, `custom` |\n| `--base-url` | No | `https://acfstandards.org` | API base URL |\n| `--skip-preflight` | No | `false` | Skip agent connectivity check |\n\n## Fleet certification (`acf-certify fleet`)\n\n*Added in 1.0.2.* Certify every agent behind an [ACF bridge](https://github.com/acfstandards/acf/tree/main/packages/acf-bridge) in one command, instead of registering each one through the browser wizard.\n\n```bash\nexport ACF_API_KEY=acf_live_...        # Portal -> Settings -> API Keys (read-write)\n\nacf-certify fleet \\\n  --config ./agents.json \\\n  --bridge-url https://bridge.acme.com \\\n  --tier tier2\n```\n\nThe command reads the bridge's own `agents.json`, so there is no second inventory to maintain: each route's `slug` becomes `https://<bridge-url>/agent/<slug>` and its `token` becomes the bearer secret. Run `bridge gen` first if any token is still a placeholder.\n\nAdd `--dry-run` to validate the config and print the fleet without registering anything.\n\n### Fleet options\n\n| Option | Required | Default | Description |\n|--------|----------|---------|-------------|\n| `--config` | Yes | — | Path to the bridge's `agents.json` |\n| `--bridge-url` | Yes | — | Public **HTTPS** base URL of your deployed bridge |\n| `--tier` | Yes | — | `tier1`, `tier2`, `tier3` or `tier4` |\n| `--payment-intent` | No | `billing_bypassed` | Stripe PaymentIntent covering the fleet |\n| `--discount-code` | No | — | Discount code, when billing is bypassed by code |\n| `--api-key` | No | `$ACF_API_KEY` | Operator API key — needs **read-write** scope |\n| `--base-url` | No | `https://acfstandards.org` | API base URL |\n| `--poll-interval` | No | `15000` | Milliseconds between status polls |\n| `--dry-run` | No | `false` | Validate and print, register nothing |\n\n### Paying for a fleet\n\nOne PaymentIntent can fund many certifications when its metadata carries `certCount`; the server verifies that the amount received covers `certCount x tier price`. Operators on the exempt list or holding a 100% discount code pass `--payment-intent billing_bypassed`.\n\n### Output\n\n```\n  Fleet Summary\n  ─────────────────────────────────────────────\n    ✓ billing-agent                PASS\n    ✗ support-agent                FAIL\n    • research-agent               INCOMPLETE (testing)\n  ─────────────────────────────────────────────\n    1 passed · 1 failed · 1 incomplete · 0 rejected\n```\n\nExit code is `0` only when every agent passed. Scores are never printed — ACF reports suite-level PASS/FAIL only.\n\nInterrupted? Re-run the same command: certifications continue server-side and the summary reattaches to them.\n\n## Programmatic API\n\n```typescript\nimport { certify } from '@acfstandards/cli';\n\nconst result = await certify({\n  code: 'acf_abc123',\n  endpoint: 'https://my-agent.com/chat',\n  authMethod: 'bearer',\n  authSecret: 'sk-my-token',\n  onProgress: (progress) => {\n    console.log(`${progress.percent}% — ${progress.message}`);\n  },\n});\n\nif (result.passed) {\n  console.log('Certificate:', result.certificateUrl);\n  console.log('Registry:', result.registryUrl);\n} else {\n  console.log('Failed suites:', result.suiteResults);\n  if (result.reportPath) {\n    console.log('Report saved:', result.reportPath);\n  }\n}\n```\n\n### `certify(options)` Options\n\n| Property | Type | Required | Default | Description |\n|----------|------|----------|---------|-------------|\n| `code` | `string` | Yes | — | Certification code |\n| `endpoint` | `string` | Yes | — | Agent endpoint URL |\n| `authMethod` | `\"bearer\" \\| \"api_key\" \\| \"none\"` | No | `\"none\"` | Auth method |\n| `authSecret` | `string` | No | — | Auth token/key |\n| `authHeader` | `string` | No | `\"X-API-Key\"` (api_key) / `\"Authorization\"` (bearer) | Custom auth header |\n| `requestFormat` | `\"openai\" \\| \"anthropic\" \\| \"custom\"` | No | `\"openai\"` | Request format |\n| `baseUrl` | `string` | No | `\"https://acfstandards.org\"` | API base URL |\n| `maxWaitMs` | `number` | No | 4× the server estimate (30 min–4 h) | Overall polling budget before giving up |\n| `pollInterval` | `number` | No | `5000` | Polling interval (ms) |\n| `onProgress` | `function` | No | — | Progress callback |\n\n### `CertifyResult`\n\n| Property | Type | Description |\n|----------|------|-------------|\n| `passed` | `boolean` | Whether the agent passed |\n| `status` | `string` | Final status |\n| `suiteResults` | `Record<string, string>` | Per-suite PASS/FAIL |\n| `certificateUrl` | `string \\| null` | PDF certificate URL (pass only) |\n| `registryUrl` | `string \\| null` | Registry listing URL (pass only) |\n| `failureReport` | `object \\| null` | Structured failure details (fail only) |\n| `failureReportUrl` | `string \\| null` | PDF failure report URL (fail only) |\n| `reportPath` | `string` | Local markdown report path (fail only) |\n\n## Certification Tiers\n\n| Tier | Label | Suites Tested |\n|------|-------|---------------|\n| T1 | Identity | CB + CS |\n| T2 | Behavioral | CB + CS + HD |\n| T3 | Compliance | CB + CS + HD + AR |\n| T4 | Enterprise Audit | All suites + full audit |\n\n## How It Works\n\n1. You register and pay on [acfstandards.org](https://acfstandards.org)\n2. You receive a one-time certification code (`acf_...`)\n3. The CLI sends your agent endpoint + auth to the ACF server\n4. ACF runs all behavioral tests **server-side** (prompts/rubrics stay private)\n5. The CLI polls for progress and displays results\n6. On **pass**: certificate PDF + public registry listing\n7. On **fail**: detailed failure report with remediation guidance\n\n## Requirements\n\n- Node.js >= 18\n- Agent must accept HTTP POST with JSON body\n- Agent must respond within 30 seconds per request\n\n## License\n\nMIT — Blue Horn Ventures LLC\n","readmeFilename":"README.md"}