{"_id":"@aaspai/cli","_rev":"9-d60490b614e8d4facc1755dbebabccaf","name":"@aaspai/cli","dist-tags":{"latest":"0.2.4"},"versions":{"0.1.0":{"name":"@aaspai/cli","version":"0.1.0","license":"AGPL-3.0-only","_id":"@aaspai/cli@0.1.0","maintainers":[{"name":"sk-aaspai","email":"ceo@aasp.ai"}],"bin":{"aaspai":"dist/aaspai.js"},"dist":{"shasum":"5765ae941192d3bb27bc550a5efa9734d178eb54","tarball":"https://registry.npmjs.org/@aaspai/cli/-/cli-0.1.0.tgz","fileCount":4,"integrity":"sha512-m0T6FsNOxjYddbpEtsmgX1rgRkn3CR1C/tFwclIIkniWFzmIxSQQhFi8oy8YPvbXd19HUlmvRnUkNPhTntiM0A==","signatures":[{"sig":"MEUCIQDCjFpPKAUOKmObjGhUP0XrPgu6pE3iiFG+mIwnXLAG/AIgQH5+ocQwg7poP8/qkiC9OKOYtoMYm2Qwe62BJ6feThM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5328147},"main":"./dist/aaspai.js","types":"./dist/aaspai.d.ts","engines":{"node":">=20.18.0 <21"},"gitHead":"286a8de8e37886970a01ca832a59932a5c6851b5","scripts":{"lint":"biome check .","build":"rimraf dist && tsc --noEmit && node build.mjs","clean":"rimraf dist .turbo","start":"node --import tsx ./src/cli.ts","typecheck":"tsc --noEmit","prepublishOnly":"yarn build"},"_npmUser":{"name":"sk-aaspai","email":"ceo@aasp.ai"},"_npmVersion":"11.13.0","description":"Self-hosted control plane for AI-agent workforces","directories":{},"_nodeVersion":"24.17.0","dependencies":{"commander":"^12.1.0","picocolors":"^1.1.1","better-sqlite3":"^12.11.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.16.2","rimraf":"^6.1.3","esbuild":"0.25","typescript":"^5.8.3","@types/node":"^24.0.0","@biomejs/biome":"^2.1.1"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.1.0_1784700940199_0.4594023832320311","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@aaspai/cli","version":"0.1.1","license":"AGPL-3.0-only","_id":"@aaspai/cli@0.1.1","maintainers":[{"name":"sk-aaspai","email":"ceo@aasp.ai"}],"bin":{"aaspai":"dist/aaspai.js"},"dist":{"shasum":"88e9b5424d9c5b6856362b388bc6f8c379e774ad","tarball":"https://registry.npmjs.org/@aaspai/cli/-/cli-0.1.1.tgz","fileCount":5,"integrity":"sha512-gGL3HTEsaEWwqjEpxMvWojweghu1BPAoeHrFwWlq8sqC2pHe2eB0gkSUPAf1RmyS+3qxhZcdzw4ywDS4A2f61g==","signatures":[{"sig":"MEYCIQCBQl0tPpnPoh2+FrVsMzMM8Pcbr1IXs9i5ymmCWTgYQwIhAOBlzQzF+lqICRJfC4GwRfm5Ro+eQV1x3BN2aTTkbk7K","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5334059},"main":"./dist/aaspai.js","types":"./dist/aaspai.d.ts","engines":{"node":">=20.18.0 <21"},"gitHead":"286a8de8e37886970a01ca832a59932a5c6851b5","scripts":{"lint":"biome check .","build":"rimraf dist && tsc --noEmit && node build.mjs","clean":"rimraf dist .turbo","start":"node --import tsx ./src/cli.ts","typecheck":"tsc --noEmit","prepublishOnly":"yarn build"},"_npmUser":{"name":"sk-aaspai","email":"ceo@aasp.ai"},"_npmVersion":"11.13.0","description":"Self-hosted control plane for AI-agent workforces","directories":{},"_nodeVersion":"24.17.0","dependencies":{"commander":"^12.1.0","picocolors":"^1.1.1","better-sqlite3":"^12.11.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.16.2","rimraf":"^6.1.3","esbuild":"0.25","typescript":"^5.8.3","@types/node":"^24.0.0","@biomejs/biome":"^2.1.1"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.1.1_1784701108601_0.1312211221327293","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@aaspai/cli","version":"0.1.2","license":"AGPL-3.0-only","_id":"@aaspai/cli@0.1.2","maintainers":[{"name":"sk-aaspai","email":"ceo@aasp.ai"}],"bin":{"aaspai":"dist/aaspai.js"},"dist":{"shasum":"1d54a3fcd98efa5a53390e6bc86f8513521b1064","tarball":"https://registry.npmjs.org/@aaspai/cli/-/cli-0.1.2.tgz","fileCount":5,"integrity":"sha512-HtqGBva1eK8x0pSroYjkrOrsKvFuLrbsBjYWIvBFAeamOfuTDmoNSKgzlk052SnXNtwt/8iTlF8UJBJi3ozxgw==","signatures":[{"sig":"MEUCIHUS+rCZxM+BAYjNBhPsCun0iWW4n9K523NZwHAPyKd/AiEAlMiXvWhgjme7qdAzLGApSEcykqgWePoTma5sD8uIdtU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5335241},"main":"./dist/aaspai.js","types":"./dist/aaspai.d.ts","engines":{"node":">=20.18.0 <21"},"gitHead":"286a8de8e37886970a01ca832a59932a5c6851b5","scripts":{"lint":"biome check .","build":"rimraf dist && tsc --noEmit && node build.mjs","clean":"rimraf dist .turbo","start":"node --import tsx ./src/cli.ts","typecheck":"tsc --noEmit","prepublishOnly":"yarn build"},"_npmUser":{"name":"sk-aaspai","email":"ceo@aasp.ai"},"_npmVersion":"11.13.0","description":"Self-hosted control plane for AI-agent workforces","directories":{},"_nodeVersion":"24.17.0","dependencies":{"commander":"^12.1.0","picocolors":"^1.1.1","better-sqlite3":"^12.11.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.16.2","rimraf":"^6.1.3","esbuild":"0.25","typescript":"^5.8.3","@types/node":"^24.0.0","@biomejs/biome":"^2.1.1"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.1.2_1784701477244_0.9425067896293915","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@aaspai/cli","version":"0.1.3","license":"AGPL-3.0-only","_id":"@aaspai/cli@0.1.3","maintainers":[{"name":"sk-aaspai","email":"ceo@aasp.ai"}],"bin":{"aaspai":"dist/aaspai.js"},"dist":{"shasum":"c8d4289e50cf038768c363919debca7e46de2039","tarball":"https://registry.npmjs.org/@aaspai/cli/-/cli-0.1.3.tgz","fileCount":5,"integrity":"sha512-ST+/gWEsA4Lr63byoZFJRp9p9LAGc/zV9AAMKrIPyH467TBONGM2X/DGWtr1cvelFgH5te7x8a8w/lkLzDWIbg==","signatures":[{"sig":"MEUCIC7tyq9LoLLOzI3753NdyvFCFWjRom8py93qMtbYEpQyAiEA+VaEVXjZMMSb0rB503DJyBIQp1LKOEmiOKs1V9XTRhg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5335558},"main":"./dist/aaspai.js","types":"./dist/aaspai.d.ts","engines":{"node":">=20.18.0 <21"},"gitHead":"286a8de8e37886970a01ca832a59932a5c6851b5","scripts":{"lint":"biome check .","build":"rimraf dist && tsc --noEmit && node build.mjs","clean":"rimraf dist .turbo","start":"node --import tsx ./src/cli.ts","typecheck":"tsc --noEmit","prepublishOnly":"yarn build"},"_npmUser":{"name":"sk-aaspai","email":"ceo@aasp.ai"},"_npmVersion":"11.13.0","description":"Self-hosted control plane for AI-agent workforces","directories":{},"_nodeVersion":"24.17.0","dependencies":{"commander":"^12.1.0","picocolors":"^1.1.1","better-sqlite3":"^12.11.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.16.2","rimraf":"^6.1.3","esbuild":"0.25","typescript":"^5.8.3","@types/node":"^24.0.0","@biomejs/biome":"^2.1.1"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.1.3_1784701634905_0.5687582019623305","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@aaspai/cli","version":"0.2.0","license":"AGPL-3.0-only","_id":"@aaspai/cli@0.2.0","maintainers":[{"name":"sk-aaspai","email":"ceo@aasp.ai"}],"bin":{"aaspai":"dist/aaspai.js"},"dist":{"shasum":"22723b205c384980100f04d00a75f3f8023b2aff","tarball":"https://registry.npmjs.org/@aaspai/cli/-/cli-0.2.0.tgz","fileCount":5,"integrity":"sha512-IPEarnyB2jm677lsoVHQ2BC1IsjrQZd01WRHrnIaJsz0TgSTy85xj+RFzthHY0ewkkJXo+t+uxH6UKQV7DUfCw==","signatures":[{"sig":"MEUCIQCrLhkYOtpzMQdJd/x82Z5sNvlRSv/JRpW4Ua0r9VgrXgIgKk5Y74/+Otj2fYcv4zOGMLD3XtrcB7vF9uE6vJ53pK8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5535337},"main":"./dist/aaspai.js","types":"./dist/aaspai.d.ts","engines":{"node":">=20.18.0 <21"},"gitHead":"6ff541d778dc6b248643d971b71314bae0bcf8c5","scripts":{"lint":"biome check .","build":"rimraf dist && tsc --noEmit && node build.mjs","clean":"rimraf dist .turbo","start":"node --import tsx ./src/cli.ts","typecheck":"tsc --noEmit","prepublishOnly":"yarn build"},"_npmUser":{"name":"sk-aaspai","email":"ceo@aasp.ai"},"_npmVersion":"11.13.0","description":"Self-hosted control plane for AI-agent workforces","directories":{},"_nodeVersion":"24.17.0","dependencies":{"commander":"^12.1.0","picocolors":"^1.1.1","better-sqlite3":"^12.11.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.16.2","rimraf":"^6.1.3","esbuild":"0.25","typescript":"^5.8.3","@types/node":"^24.0.0","@biomejs/biome":"^2.1.1"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.2.0_1784703171569_0.9651211986154573","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@aaspai/cli","version":"0.2.1","license":"AGPL-3.0-only","_id":"@aaspai/cli@0.2.1","maintainers":[{"name":"sk-aaspai","email":"ceo@aasp.ai"}],"bin":{"aaspai":"dist/aaspai.js"},"dist":{"shasum":"51dbbfadcafb3e7a809e1919348fc6210bb18ed7","tarball":"https://registry.npmjs.org/@aaspai/cli/-/cli-0.2.1.tgz","fileCount":5,"integrity":"sha512-svNs+ivZZdyzv4DHjesZYBJYX8/u2T2kcv3VJpBdaCC3MV9rYzGtUPbjF9LrGHaZ2hzaCPS33CxQKE+QZ0am9w==","signatures":[{"sig":"MEYCIQCEfKowNHjwMppEyBYUobkXH8DsbHPgjyVNe+T1xb1vSwIhANDlZq0E7Nx+7ohyEzAEJfUs83xpETJtJQdR+PgOXOId","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5535638},"main":"./dist/aaspai.js","types":"./dist/aaspai.d.ts","engines":{"node":">=20.18.0 <21"},"gitHead":"6ff541d778dc6b248643d971b71314bae0bcf8c5","scripts":{"lint":"biome check .","build":"rimraf dist && tsc --noEmit && node build.mjs","clean":"rimraf dist .turbo","start":"node --import tsx ./src/cli.ts","typecheck":"tsc --noEmit","prepublishOnly":"yarn build"},"_npmUser":{"name":"sk-aaspai","email":"ceo@aasp.ai"},"_npmVersion":"11.13.0","description":"Self-hosted control plane for AI-agent workforces","directories":{},"_nodeVersion":"24.17.0","dependencies":{"commander":"^12.1.0","picocolors":"^1.1.1","better-sqlite3":"^12.11.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.16.2","rimraf":"^6.1.3","esbuild":"0.25","typescript":"^5.8.3","@types/node":"^24.0.0","@biomejs/biome":"^2.1.1"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.2.1_1784703336763_0.31007774400473664","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@aaspai/cli","version":"0.2.2","license":"AGPL-3.0-only","_id":"@aaspai/cli@0.2.2","maintainers":[{"name":"sk-aaspai","email":"ceo@aasp.ai"}],"bin":{"aaspai":"dist/aaspai.js"},"dist":{"shasum":"15f61e278ab1b65ea7fe75cb9125aebd727df488","tarball":"https://registry.npmjs.org/@aaspai/cli/-/cli-0.2.2.tgz","fileCount":5,"integrity":"sha512-fkv31kAcG58M6PtxrdQ02/bj0yb4FsF9gnPzkXIdYYMhgPHddn8jmY2S/w1B+vJIh3kcZNkToY1/zu2wCIxckg==","signatures":[{"sig":"MEUCIQD6t1Dq3/kKMmgcp2SUlLEpxWHDzrtyJeh739fPArguDgIgeNi8Ol9dDnjRVhU3g7Fc1d83QkqlJVKbMq/j1Xo/7Pk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5550010},"main":"./dist/aaspai.js","types":"./dist/aaspai.d.ts","engines":{"node":">=20.18.0 <21"},"gitHead":"6ff541d778dc6b248643d971b71314bae0bcf8c5","scripts":{"lint":"biome check .","build":"rimraf dist && tsc --noEmit && node build.mjs","clean":"rimraf dist .turbo","start":"node --import tsx ./src/cli.ts","typecheck":"tsc --noEmit","prepublishOnly":"yarn build"},"_npmUser":{"name":"sk-aaspai","email":"ceo@aasp.ai"},"_npmVersion":"11.13.0","description":"Self-hosted control plane for AI-agent workforces","directories":{},"_nodeVersion":"24.17.0","dependencies":{"commander":"^12.1.0","picocolors":"^1.1.1","better-sqlite3":"^12.11.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.16.2","rimraf":"^6.1.3","esbuild":"0.25","typescript":"^5.8.3","@types/node":"^24.0.0","@biomejs/biome":"^2.1.1"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.2.2_1784706480859_0.42194549158459016","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@aaspai/cli","version":"0.2.3","license":"AGPL-3.0-only","_id":"@aaspai/cli@0.2.3","maintainers":[{"name":"sk-aaspai","email":"ceo@aasp.ai"}],"bin":{"aaspai":"dist/aaspai.js"},"dist":{"shasum":"e73a5fc04cf3831af719748be1ea652ced8faf15","tarball":"https://registry.npmjs.org/@aaspai/cli/-/cli-0.2.3.tgz","fileCount":5,"integrity":"sha512-er28y6WmoFdIOYpjhkG15BlWUXEM/8SRttNsjA0+o3Ahib7ajbI05VcXpbQSMypBow690hPyPfkxKpMOpIekVg==","signatures":[{"sig":"MEUCIQC9YHVskI6nJiToxRQRZD0vf0o/xvcxKCfmpqS11LTS7wIgXz0eTdBY8saPNNDOOpIpb6qZA8dbSqH5crMdSSo+zdA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5552031},"main":"./dist/aaspai.js","types":"./dist/aaspai.d.ts","engines":{"node":">=20.18.0 <21"},"gitHead":"6ff541d778dc6b248643d971b71314bae0bcf8c5","scripts":{"lint":"biome check .","build":"rimraf dist && tsc --noEmit && node build.mjs","clean":"rimraf dist .turbo","start":"node --import tsx ./src/cli.ts","typecheck":"tsc --noEmit","prepublishOnly":"yarn build"},"_npmUser":{"name":"sk-aaspai","email":"ceo@aasp.ai"},"_npmVersion":"11.13.0","description":"Self-hosted control plane for AI-agent workforces","directories":{},"_nodeVersion":"24.17.0","dependencies":{"commander":"^12.1.0","picocolors":"^1.1.1","better-sqlite3":"^12.11.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.16.2","rimraf":"^6.1.3","esbuild":"0.25","typescript":"^5.8.3","@types/node":"^24.0.0","@biomejs/biome":"^2.1.1"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.2.3_1784720997318_0.4949103224214839","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@aaspai/cli","version":"0.2.4","description":"Self-hosted control plane for AI-agent workforces","license":"AGPL-3.0-only","bin":{"aaspai":"dist/aaspai.js"},"main":"./dist/aaspai.js","types":"./dist/aaspai.d.ts","scripts":{"build":"rimraf dist && tsc --noEmit && node build.mjs","typecheck":"tsc --noEmit","lint":"biome check .","start":"node --import tsx ./src/cli.ts","clean":"rimraf dist .turbo","prepublishOnly":"yarn build"},"dependencies":{"better-sqlite3":"^12.11.1","commander":"^12.1.0","picocolors":"^1.1.1"},"devDependencies":{"@biomejs/biome":"^2.1.1","@types/node":"^24.0.0","esbuild":"0.25","rimraf":"^6.1.3","tsx":"^4.16.2","typescript":"^5.8.3"},"engines":{"node":">=20.18.0 <21"},"gitHead":"6ff541d778dc6b248643d971b71314bae0bcf8c5","_id":"@aaspai/cli@0.2.4","_nodeVersion":"24.17.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-gi3ReWJXl99yVbW7u+5fxjbz7Vveda164aAfLOi+zpiLeIBbXvgMJ+XIhNiGnoUwwLhkVCBcohKmkoG6P6uwfA==","shasum":"7bc97daf3d3ee6d6e98143e3e54b13daef56a625","tarball":"https://registry.npmjs.org/@aaspai/cli/-/cli-0.2.4.tgz","fileCount":5,"unpackedSize":5552004,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFHQmE/GRGndmxwAOSPVGafOFTxG1tQXQPDc25EQniu7AiEAo1QnzrnDlklkljQVIn5USONggkW6vb95eJujK7RG434="}]},"_npmUser":{"name":"sk-aaspai","email":"ceo@aasp.ai"},"directories":{},"maintainers":[{"name":"sk-aaspai","email":"ceo@aasp.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cli_0.2.4_1784721087686_0.431551900472982"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-22T06:15:39.974Z","modified":"2026-07-22T11:51:28.040Z","0.1.0":"2026-07-22T06:15:40.355Z","0.1.1":"2026-07-22T06:18:28.754Z","0.1.2":"2026-07-22T06:24:37.425Z","0.1.3":"2026-07-22T06:27:15.146Z","0.2.0":"2026-07-22T06:52:51.749Z","0.2.1":"2026-07-22T06:55:36.983Z","0.2.2":"2026-07-22T07:48:01.086Z","0.2.3":"2026-07-22T11:49:57.502Z","0.2.4":"2026-07-22T11:51:27.864Z"},"license":"AGPL-3.0-only","description":"Self-hosted control plane for AI-agent workforces","maintainers":[{"name":"sk-aaspai","email":"ceo@aasp.ai"}],"readme":"# aaspai\n\n> Self-hosted control plane for AI-agent workforces.\n\n`aaspai` is a CLI for running a team of AI agents (operator, developer,\ntester, …) on a file-based config. You define agents, knowledge, and\nrecurring loops in your project directory; `aaspai` reads them, schedules\nwork, runs sessions, and records every decision to a local SQLite\ndatabase.\n\n## Install\n\n```bash\nnpm install -g @aaspai/cli\n```\n\nAfter install, the `aaspai` binary is on your PATH.\n\n## Quick start\n\n```bash\nmkdir my-project && cd my-project\naaspai init                 # scaffold agents/, knowledge/, loops/\naaspai db migrate           # create the state DB\naaspai agent list           # see the 3 seeded agents\naaspai session start \\\n  --agent agent/operator \\\n  --adapter dry_run_local \\\n  --prompt \"say hello\"\n```\n\nThe `dry_run_local` adapter synthesizes a response — no API key\nrequired, no network call. Switch to a real LLM by setting\n`adapter: opencode_cli` (or `claude_local`, `codex_local`, …) in\n`agents/operator/AGENT.md`.\n\n## What you get\n\n- **File-based config** — agents in `agents/<name>/AGENT.md`, knowledge\n  in `knowledge/<concept>/<file>.md` (OKF v0.1), loops in\n  `loops/<name>/LOOP.md`. Version your project config in git; the\n  runtime state (`.aaspai/state.db`) stays out.\n- **Two-storage tier** — your project (versioned) vs. `.aaspai/`\n  (gitignored). The CLI enforces the boundary.\n- **Eight harness adapters** — `dry_run_local`, `claude_local`,\n  `codex_local`, `cursor_local`, `cursor_cloud`, `opencode_local`,\n  `opencode_cli`, plus `dry_run_local` as a default. Same agent\n  contract, swap adapters per agent.\n- **Seven starter loops** — `daily-triage`, `pr-babysitter`,\n  `ci-sweeper`, `dependency-sweeper`, `changelog-drafter`,\n  `post-merge-cleanup`, `issue-triage`. Only `daily-triage` is wired\n  end-to-end today; the rest are stubs for you to extend.\n- **Port-and-adapter design** — every external system (filesystem\n  watcher, LLM harness, DB) is behind a `Source` interface. Swap\n  SQLite for Postgres, or file-based config for a database, without\n  touching the orchestration code.\n\n## Subcommands\n\n```\naaspai init          Scaffold a new aaspai project\naaspai db            Database operations (migrate, status, backup)\naaspai agent         Agent operations (list, show, validate)\naaspai knowledge     Knowledge (OKF) operations\naaspai loop          Loop operations (list, show, tick)\naaspai session       Session operations (list, show, start, stop, cancel)\naaspai skill         Skill operations\naaspai tool          Tool operations\naaspai state         Workspace state (counts, recent activity)\naaspai start         Start the worker + API daemons\n```\n\n## Architecture\n\n```\n┌─────────────────────────────────────────────────────┐\n│  Your project (versioned in git)                    │\n│  ┌─────────┐ ┌──────────┐ ┌─────────┐               │\n│  │ agents/ │ │knowledge/│ │ loops/  │  AGENTS.md    │\n│  └────┬────┘ └─────┬────┘ └────┬────┘               │\n│       └────────────┴───────────┘                    │\n│            FileSource (port+adapter)                │\n└──────────────────────┬──────────────────────────────┘\n                       │\n┌──────────────────────┴──────────────────────────────┐\n│  aaspai runtime (this CLI)                          │\n│  ┌────────────┐  ┌────────────┐  ┌────────────┐     │\n│  │ Scheduler  │→ │ LoopRunner │→ │  Sessions  │     │\n│  └────────────┘  └────────────┘  └─────┬──────┘     │\n│                                       │             │\n│                                  ┌────┴─────┐       │\n│                                  │ Harness  │       │\n│                                  │ adapters │       │\n│                                  └──────────┘       │\n└──────────────────────┬──────────────────────────────┘\n                       │\n                  .aaspai/state.db (gitignored)\n```\n\n## Configuration\n\nEach project has an `aaspai.config.ts` at the root:\n\n```ts\nimport { defineConfig } from \"@aaspai/config\";\n\nexport default defineConfig({\n  database: {\n    url: process.env.AASPAI_DB ?? \"sqlite:./.aaspai/state.db\",\n  },\n  organization: { id: \"default\", name: \"My Project\" },\n  defaults: {\n    adapter: \"claude_local\",\n    runtime: { kind: \"local\" },\n  },\n  agents:     { root: \"./agents\" },\n  knowledge:  { root: \"./knowledge\" },\n  loops:      { root: \"./loops\" },\n});\n```\n\nThe CLI also accepts a JSON variant (`aaspai.config.json`).\n\n## Project status\n\nThis is a v0 release. The four reliability bugs found in Phase 3\ntesting are fixed in `@aaspai/cli@0.1.x` and later:\n\n- Atomic wakeup claim (`UPDATE ... WHERE status='queued'`)\n- In-flight guard on the 5s poll\n- Retry-with-backoff on session errors\n- Cross-process file-based lock for `opencode-cli`\n- Graceful shutdown (SIGINT/SIGTERM)\n\nSee [github.com/aaspai/aaspai](https://github.com/aaspai/aaspai) for\nthe full monorepo, issues, and architecture docs.\n\n## License\n\nAGPL-3.0-only. See `LICENSE` in the source repo.\n","readmeFilename":"README.md"}