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.