Synaplan
開源 AI 平台,供企業使用:自行託管的 AI 代理、符合 GDPR 的聊天機器人小工具、RAG 知識庫、WhatsApp 與 Outlook AI、MCP、多模型路由。Docker、Kubernetes 或託管於 Germ
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Give one command, pick which AI leads, and let a team of AIs (Claude, ChatGPT, Gemini, Perplexity) break it down and work it, using Linear as the shared task board, with GitHub and Firecrawl as tools.
• Ownership rule: an AI owns an issue when its name is in [brackets] at the start of the title, in a label, or the assignee. Issues with no AI owner are never touched.
• Lead AI: chosen per command in the dashboard; the name in the command's title is the lead.
• One task per AI per cycle, highest priority first.檢視完整 README ↗Give one command, pick which AI leads, and let a team of AIs (Claude, ChatGPT, Gemini, Perplexity) break it down and work it, using Linear as the shared task board, with GitHub and Firecrawl as tools.
You ──command──▶ Linear issue "[Claude] …" (created from the dashboard)
│
lead AI plans │ creates sub-issues "[Perplexity] …", "[Gemini] …"
▼
each AI claims its sub-issue ─▶ uses tools ─▶ posts "## Result" ─▶ marks Done
│
lead AI reconciles │ posts "## Command summary" on the command, marks it Done
▼
Dashboard shows in progress / queued / accomplished per AI
[brackets] at the start of the title, in a label, or the assignee. Issues with no AI owner are never touched.| Control | Default |
|---|---|
ACP_ACTIVE kill switch | false: reads and reports only |
ACP_DRY_RUN | true: Linear and GitHub writes are logged, not made |
ACP_MONTHLY_BUDGET_USD | 0: only free-tier models run (Gemini). Paid calls are checked against worst-case cost before they run |
| Pull requests | off; when on, draft PRs only on allow-listed repos, never the default branch |
| Owner-only actions | merge, delete, deploy, purchase, send email, change credentials or release gates are refused in code and posted to the issue as "Owner approval needed" |
Model output, web pages and issue text are treated as untrusted data and can't change these rules.
Requires Node 22.18+ (runs TypeScript directly, no build step).
cp .env.example .env # fill in LINEAR_API_KEY at minimum
npm ci # dev tools only (typescript, @types/node)
npm run validate # tests + typecheck
set -a; . ./.env; set +a
npm run status # what's waiting; calls no models
npm run tick # one cycle (dry run until ACP_DRY_RUN=false)
npm start # loop every ACP_POLL_SECONDS
Free hosting: .github/workflows/engine.yml runs one cycle every 15 minutes on GitHub Actions. It stays off until you set the repository variable ACP_ACTIVE=true and add the keys as repository secrets.
dashboard/index.html is both the published claude.ai page and the website. Inside Claude it reads Linear through the viewer's Linear connector. On the website (https://ai-command-post.vercel.app) dashboard/console.js drives the owner console: task lanes and the agent roster from /api/console, commands and questions through /api/intake, and an Engine & budget panel fed by the engine's Linear status document. Keep the ownership regex in src/agents.ts and the dashboard's AGENTS list in sync.
Current state, what is switched off and why, and the owner-only steps left: HANDOFF.md ("Where it stands") and docs/OWNER-CHECKLIST.md.
src/config.ts environment → config (kill switch, dry run, budget, keys, models)
src/agents.ts roster, roles, tool kits, ownership rule
src/policy.ts green / yellow / red authority tiers
src/budget.ts monthly spend ledger and pre-call cap check
src/providers.ts Anthropic, OpenAI, Gemini, Perplexity clients (plain fetch)
src/linear.ts Linear GraphQL store + dry-run wrapper
src/tools.ts GitHub, Firecrawl and Linear tools behind the policy check
src/orchestrator.ts plan → work → reconcile cycle
src/cli.ts status | tick | run
dashboard/ claude.ai dashboard page
test/ node:test suites (fake models, fake fetch; no network)
The dashboard also runs as a website: vercel.json serves dashboard/, api/console.js (read-only) and api/intake.js (commands and questions) talk to Linear for it, and api/linear.js is the legacy read-only adapter. All of them share one password and origin check (api/lib/site-auth.js once ARN-83 F6 is merged). Import the repo in Vercel and set two environment variables: LINEAR_API_KEY and ACP_SITE_PASSWORD (anyone with the password can see your Linear team and issue commands). Without both, the site refuses every request. It can list teams and issues and create new command issues, nothing else.
The owner console sends new commands only to an AI lead you have explicitly approved. In Vercel, set ACP_DEFAULT_LEAD (for example claude) and list it in ACP_INTAKE_ALLOWED_LEADS (comma-separated). If either is missing, or the lead isn't on the list, the console refuses commands and files nothing. Questions still work.
api/eve.js, off by default)Dispatch is unsupported for now. /api/eve returns unsupported for every command and sends nothing, whatever the env vars say, until a verified Eve contract, a budget reservation and an ARN-52 ownership claim exist. Only health calls Eve: it reports reachable on an {"ok":true,"status":"ready","workflowId":"…"} (the Eve 0.71.3 health schema), unknown on any other 2xx, and never claims execution readiness. Server-only env vars: ACP_EVE_ACTIVE, ACP_EVE_BUDGET_USD (default 0 blocks), EVE_BASE_URL (bare https origin), EVE_TOKEN (never sent to the browser).
OIDC preflight (api/eve-oidc.js, inert, ARN-58). It builds, but never sends, the Eve 0.71.3 session request: POST /eve/v1/session with {message, operationId}, carrying ACP's Vercel OIDC token as both Authorization: Bearer and x-vercel-trusted-oidc-idp-token. It only uses a token from an injected getToken, and nothing wires that in yet. It refuses any token whose subject isn't exactly owner:<ACP_EVE_OIDC_TEAM>:project:<ACP_EVE_OIDC_PROJECT>:environment:<ACP_EVE_OIDC_ENVIRONMENT> (one explicit environment) and redacts the token when serialized. It also reads a session-create answer strictly: only 202 {ok:true,sessionId,status:"accepted"} counts, and that means accepted, not finished. Owner-only steps still block real dispatch:
vercelOidc({ subjects: [vercelSubject({ teamSlug, projectName, environment })] }). Calling vercelOidc() with no subjects only trusts Eve's own project.getVercelOidcToken() from @vercel/oidc is wired inside the request handler.