AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
翻譯準備中
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Equip once. Run anywhere. Portable AI agents and toolkits—no vendor lock-in.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
One playbook, every agent. A portable operating environment for AI agents — persona, skills, MCP servers, project instructions, and memory in one source of truth.
Keep your agents yours. AgentPlaybooks stores skills, personas, MCP servers, project instructions, and memory in one portable playbook, so you can switch platforms, use several at once, or self-host without vendor lock-in.
Your agent setup stays in sync across Claude, ChatGPT, Cursor, Codex, Gemini, local models, and future platforms. The playbook is the portable source of truth—not any single vendor or editor.檢視完整 README ↗One playbook, every agent. A portable operating environment for AI agents — persona, skills, MCP servers, project instructions, and memory in one source of truth.
Keep your agents yours. AgentPlaybooks stores skills, personas, MCP servers, project instructions, and memory in one portable playbook, so you can switch platforms, use several at once, or self-host without vendor lock-in.
Your agent setup stays in sync across Claude, ChatGPT, Cursor, Codex, Gemini, local models, and future platforms. The playbook is the portable source of truth—not any single vendor or editor.
It is not another skill store or MCP registry. Skills and MCP connections are parts of a playbook; the playbook is the whole job. That holds for agents with a body too: a skill can carry demonstrations, recordings of the task in the order a robot performs them.
What a playbook holds
AGENTS.md / CLAUDE.md contentSKILL.md documents in the Agent Skills format, frontmatter preserved across every clientCredentials, without handing them over
use_secret), so the value never
enters an agent's context. Optional per-secret host allow-lists, and an
expiry that is enforced: an expired secret is refused by every path that
would use it.apb audit.Getting it into your tools
plugin.json, mcp.json, and complete Agent Skills directories. Compatible
MCP hosts can also discover hosted playbook skills through the MCP Skills extension./.well-known/skills/ — installable from a URL, no registry, no sign-upWorking with other people
| Category | Technology | Purpose |
|---|---|---|
| Framework | Next.js 16 + React 19 | App Router, SSR |
| Styling | Tailwind CSS 4 | Utility-first CSS |
| Animation | Framer Motion | UI animations |
| Icons | Lucide React | Icon library |
| API | Hono | Edge API routing |
| Database | Supabase | Postgres + Auth + RLS |
| i18n | next-intl | Localization (en, hu, de, es) |
| Docs | Plain markdown in public/docs | Fetched and rendered client-side |
| Hosting | Cloudflare Workers | Edge deployment |
| Adapter | @opennextjs/cloudflare | Next.js on Workers |
engines in package.json; CI runs 22)npm ci then rejectsgit clone https://github.com/matebenyovszky/agentplaybooks.git
cd agentplaybooks
npm install
Portable playbooks under examples/ — persona, instructions,
skills, MCP, memory, and vault in a tree you control. Small MIT examples you
can clone or cp -R. Not a marketplace.
| Starter | One-liner |
|---|---|
coding-agent-baseline | Coding-agent playbook: instructions, two skills, safe MCP stub |
doctor-drift-demo | Review playbook with host-folder drift; the portable store stays canonical |
skills-only-starter | Smallest playbook: three skills + instructions; no MCP |
cursor-hermes-starter | Playbook with persona, instructions, and skills for Cursor and Hermes hosts |
Install into a host (optional doctor check, then sync):
npx @agentplaybooks/cli@latest doctor examples/coding-agent-baseline
npx @agentplaybooks/cli@latest sync examples/coding-agent-baseline --target=claude,cursor --apply
See examples/README.md, the CLI docs, and the Agent Plugins spec.
Create a .env.local file with:
NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_service_role_key
# Required for the secrets vault. 32 bytes as 64 hex characters:
# node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
# Losing it means losing every stored secret — no vault operation can decrypt
# without it, and rotating it invalidates everything already encrypted.
SECRETS_ENCRYPTION_KEY=
Optional:
| Variable | Effect |
|---|---|
NEXT_PUBLIC_APP_URL | The canonical origin used for canonical tags, the sitemap and robots. Defaults to https://agentplaybooks.ai. |
ALLOWED_ORIGINS | Comma-separated CORS allow-list. Replaces the hosted defaults entirely — set it on a self-hosted instance so the project's own domains are not trusted there. |
SECRETS_REQUIRE_ALLOWED_HOSTS | true makes a secret's host allow-list mandatory: an unpinned secret cannot be used for outbound requests at all. |
npm run dev
npm run build:worker
npm run preview
npx wrangler deploy
packages/cli)agentplaybooks doctor <project> audits local agent configuration
(instructions, Agent Skills, custom agents, MCP servers, likely hard-coded secrets, drift)
and agentplaybooks sync <project> creates the canonical
agentplaybook.json plus the platform files missing from enabled targets:
Claude Code, Cursor, ChatGPT/Codex, GitHub Copilot, Gemini CLI, Google
Antigravity (.agents/skills), Grok Bot (.agents/skills, which it
discovers natively alongside AGENTS.md), and Hermes Agent (.agents/skills
registered in ~/.hermes/config.yaml, plus that file's mcp_servers: and
SOUL.md).
agentplaybooks plugin export|import round-trips Agent Plugins 1.0 packages;
the only manifest extension carries secret references and bindings, never
secret values.
login / playbooks / pull / push synchronize skills, MCP servers, and the
manifest with a hosted playbook using a user API key. push also creates a
private, versioned cross-platform AI agent configuration backup, including
complete Agent Skills folders and portable custom agents. backups lists
revisions; pull --snapshot can recover an earlier one. Secret values never
move, only references declared in spec.secrets. Mutating commands show a
plan first and require --apply, --yes, or interactive confirmation where
supported. See packages/cli/README.md and the
backup and migration guide.
The same package is a ChatGPT/Codex and Cursor plugin (skill + account MCP). Exact API-key setup and installation commands are in packages/cli/README.md.
The Claude plugin is a separate, lean folder, plugins/agentplaybooks: the
account MCP connector (OAuth, no key), a playbooks skill that works in chat and
Cowork, and doctor / sync commands that run the published CLI through a
pinned npx. It has no bin/ directory, because claude.ai and Cowork refuse a
plugin that has one. Add it on claude.ai under Customize → Plugins → Add
marketplace with matebenyovszky/agentplaybooks, or in Claude Code:
/plugin marketplace add matebenyovszky/agentplaybooks
/plugin install agentplaybooks@agentplaybooks
Public playbooks are visible to everyone. Unlisted playbooks are accessible via GUID but hidden from search.
GET /api/playbooks/:guid
GET /api/playbooks/:guid?format=openapi
GET /api/playbooks/:guid?format=mcp
GET /api/playbooks/:guid?format=anthropic
GET /api/playbooks/:guid?format=markdown
GET /api/playbooks/:id/personas
GET /api/playbooks/:id/skills
GET /api/playbooks/:guid/memory
Note: :id supports both UUID and GUID for personas and skills.
GET /api/playbooks
POST /api/playbooks
PUT /api/playbooks/:id
DELETE /api/playbooks/:id
POST /api/playbooks/:id/personas
PUT /api/playbooks/:id/personas/:pid
DELETE /api/playbooks/:id/personas/:pid
POST /api/playbooks/:id/skills
PUT /api/playbooks/:id/skills/:sid
DELETE /api/playbooks/:id/skills/:sid
PUT /api/playbooks/:guid/memory/:key
DELETE /api/playbooks/:guid/memory/:key
Canvas documents belong to an isolated workflow run, so multiple teams can execute the same playbook without sharing work products. They are long-form markdown artifacts that agents can revise over time. Use memory for durable facts and structured state; use canvas for deliverables such as a PR review, research report, implementation plan, or draft that may be edited passage by passage.
GET /api/playbooks/:guid/runs
POST /api/playbooks/:guid/runs
GET /api/playbooks/:guid/canvas?runId=:runId
POST /api/playbooks/:guid/canvas
GET /api/playbooks/:guid/canvas/:slug?runId=:runId
PUT /api/playbooks/:guid/canvas/:slug?runId=:runId
PATCH /api/playbooks/:guid/canvas/:slug?runId=:runId
DELETE /api/playbooks/:guid/canvas/:slug?runId=:runId
PUT replaces document fields and requires expectedVersion. PATCH performs an incremental
append, prepend, or exact replace operation and also requires expectedVersion. A stale
version returns HTTP 409, preventing two agents from silently overwriting each other's work.
curl -X PATCH 'https://your-domain.com/api/playbooks/abc123/canvas/pr-review?runId=RUN_UUID' \
-H "Authorization: Bearer apb_your_key" \
-H "Content-Type: application/json" \
-d '{
"operation": "replace",
"search": "## Security review\nPending.",
"content": "## Security review\nNo blocking issues found.",
"expectedVersion": 3
}'
GET /api/playbooks/:id/api-keys
POST /api/playbooks/:id/api-keys
DELETE /api/playbooks/:id/api-keys/:kid
Human editors are invited with a one-time link. They can edit playbook content, while ownership controls remain owner-only.
GET /api/playbooks/:id/collaborators
POST /api/playbooks/:id/collaborators
DELETE /api/playbooks/:id/collaborators/:collaboratorId
GET /api/collaboration-invites/:token
POST /api/collaboration-invites/:token
Invite links expire after 72 hours and can be accepted once. See Team Collaboration for the full permission model and security notes.
Secrets are encrypted using AES-256-GCM. Agents can use the use_secret MCP tool or proxy endpoint to use secrets in HTTP requests without ever reading the plaintext value.
GET /api/playbooks/:guid/secrets # List metadata only
POST /api/playbooks/:guid/secrets # Create encrypted secret
PUT /api/playbooks/:guid/secrets/:name # Update/rotate secret
DELETE /api/playbooks/:guid/secrets/:name # Delete secret
# Dashboard only
GET /api/playbooks/:guid/secrets/reveal/:name
# Proxy external requests using a secret
POST /api/playbooks/:guid/secrets/proxy
# Audit trail — shared with federated MCP calls
GET /api/playbooks/:guid/audit?operation=secret.
Every vault operation is recorded, refusals included: what was done, to which secret, by the
owner or by which API key prefix, and for secret.use the destination host. An entry never
holds a secret value, a full outbound URL, or a key. Owner access only — a playbook API key
performs vault operations but cannot read the record of them.
GET /api/user/profile
PUT /api/user/profile
GET /api/user/api-keys
POST /api/user/api-keys
DELETE /api/user/api-keys/:kid
These APIs support public reads, dashboard skill/MCP discovery, and existing favorites. Explore is a server-rendered use-case guide with curated first-party starter links; it does not load these catalogs or automatically feature public playbooks.
GET /api/public/playbooks
GET /api/public/skills
GET /api/public/skills/:id
GET /api/public/mcp
GET /api/public/mcp/:id
GET /api/playbooks/:id/star
POST /api/playbooks/:id/star
GET /api/user/starred
GET /api/playbooks/:guid/memory
PUT /api/playbooks/:guid/memory/:key
DELETE /api/playbooks/:guid/memory/:key
For clients that require a local stdio process, see the local MCP transport. It uses the same account tools and authorization handlers; protocol discovery starts without credentials, while data operations require your instance configuration.
GET /api/mcp/:guid # MCP manifest
POST /api/mcp/:guid # MCP JSON-RPC
POST /api/mcp/:guid/tools/:tool # Call one tool over plain HTTP
POST /api/mcp/manage # MCP management server (user API key)
GET /api/mcp/config/:serverId # Federated server config (owner)
POST /api/mcp/config/:serverId
PUT /api/mcp/config/:serverId
DELETE /api/mcp/config/:serverId
POST /api/mcp/config/:serverId/test # Try the connection before saving it
GET /api/mcp-registry/search # Search the public MCP registry
GET /.well-known/mcp-registry-auth # Registry ownership verification
Every tool a playbook exposes is also reachable as a plain HTTP call, so a client that cannot speak MCP is not shut out:
POST /api/playbooks/:guid/operations/:operation
POST /api/control/:operation # Account-level operations
Skills are served as plain markdown — an index plus one SKILL.md per skill, no
credential, open CORS. Any client can install from a base URL with no registry
and no sign-up. Only public playbooks are served; unlisted and private ones
stay reachable through apb pull.
GET /.well-known/skills/ # Site-wide: every public playbook's skills
GET /playbooks/:guid/.well-known/skills/ # One playbook
hermes skills install well-known:https://agentplaybooks.ai/.well-known/skills/<name>
GET /api/connections
Curated templates for wiring up a federated MCP server or OpenAPI service. Public, because a template is not a credential: every entry references the secrets it needs by name only, to be resolved from the playbook's vault.
GET /api/manage/openapi.json
GET /api/manage/playbooks
POST /api/manage/playbooks
GET /api/health
Playbook API keys let agents read/write memory for a single playbook.
curl -X PUT https://your-domain.com/api/playbooks/abc123/memory/user_preferences \
-H "Authorization: Bearer apb_live_xxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"value": {"theme": "dark"}}'
User API keys are used for management endpoints and the MCP management server:
curl -X POST https://your-domain.com/api/mcp/manage \
-H "Authorization: Bearer apb_live_xxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"list_playbooks","params":{}}'
agentplaybooks/
src/
app/
.well-known/skills/ # Public skill publishing (site-wide)
api/
_shared/ # auth.ts, guards.ts — where authorization lives
[[...route]]/ # Hono catch-all for most endpoints
mcp/ # MCP manifest, JSON-RPC, federation config
playbooks/ # Per-playbook routes (secrets, canvas, audit, …)
dashboard/ # Authenticated UI
enterprise/ # Self-hosting landing page
explore/ # Use cases, setup guidance, curated starters
login/ # Auth pages
page.tsx # Marketing home
components/
playbook/ # Editor components
ui/ # UI primitives
i18n/
messages/ # Translation files (en, hu, de, es)
request.ts # Server-side locale resolution
lib/
mcp/ # Federation, secret references
storage/ # Storage adapters
supabase/ # Supabase client and types
crypto.ts # Secrets vault encryption
packages/
cli/ # AgentPlaybooks CLI + Codex/Cursor plugin
plugins/
agentplaybooks/ # Claude plugin (claude.ai, Cowork, Claude Code)
.claude-plugin/ # Plugin marketplace manifest
docs/ # Contributor-facing notes
security/ # Supplier-assessment pack (HU + EN)
examples/ # Starter playbooks (fork/clone/sync)
public/
blog/ docs/ # Markdown served to the client
schemas/ # JSON schemas (agentplaybook.json, …)
scripts/ # Seed and build scripts
supabase/
migrations/ # Database migrations
tests/ # Vitest suites
open-next.config.ts
wrangler.jsonc
instructions for always-on project rules)secret.*); never holds values, full URLs or keys. Renamed from mcp_proxy_audit_logs.There is deliberately no second credential store. Federated MCP and OpenAPI
servers used to keep their own encrypted secrets in mcp_server_secrets; that
table was dropped (supabase/migrations/20260820_drop_mcp_server_secrets.sql)
because a second store meant the credentials most worth stealing sat in the
weaker box, without the rotation, expiry, usage accounting and audit trail the
vault already had. transport_config.auth.token_secret now names a vault entry
instead.
RLS is enabled on the tables listed above, but it is not the primary
authorization mechanism at runtime. Almost all API routes query with the
service-role key, which bypasses RLS; authorization is enforced in application
code (src/app/api/_shared/guards.ts).
RLS is load-bearing for the handful of endpoints that read public playbooks
with the anon key — the MCP manifest (/api/mcp/:guid), its tool routes, and
the public skills/MCP listings. Those depend on the anon SELECT policies in
supabase/migrations/20260107_permissions_refactor.sql. Removing or disabling
those policies breaks the endpoints rather than merely relaxing them.
Policies written against auth.uid() are currently inert, because no
JWT-bearing client performs table queries — the browser talks only to
/api/*, never to Postgres directly.
Report vulnerabilities privately — see SECURITY.md. Do not open a public issue for a security defect.
Self-hosted operators assembling a NIS2 / 418/2024. 77. § filing can start from
the incident runbook
(HU). Release SBOMs and cosign verify
are in docs/security/supply-chain.md.
Fork the repository
Create your feature branch (git checkout -b feature/amazing-feature)
Run the same checks CI runs, in the same order:
npm run lint # eslint
npm run test:all # vitest + the CLI suite
npm run prebuild && npx tsc --noEmit
npm run audit:production
npm run build
Commit your changes and open a Pull Request
Two things worth knowing before your first PR:
package-lock.json that
npm ci then rejects outright, so CI fails on install before it reaches your
change. npx npm@11 install works on Node 20 as well.npm run lint currently reports a
known set of react-hooks and navigation warnings, tracked in the issues —
a clean run means zero errors, not zero output.MIT — see LICENSE.
Use it for anything, including commercially. Keep the copyright notice and the permission notice in copies or substantial portions.