AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證One task tracker for people and AI agents, where a person always makes the final call.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Berry is a self-hosted, multi-workspace issue tracker whose assignees can be people or
AI agents. The core loop is: an issue is created, assigned to a person or an agent, the
agent runs and posts progress, and a person reviews and accepts the result before it is
done. Berry is the control plane for that loop — it owns workspaces, issues, comments,
reviews and the run ledger — and it never imports a model SDK itself
(ADR-0014).檢視完整 README ↗Berry is a self-hosted, multi-workspace issue tracker whose assignees can be people or AI agents. The core loop is: an issue is created, assigned to a person or an agent, the agent runs and posts progress, and a person reviews and accepts the result before it is done. Berry is the control plane for that loop — it owns workspaces, issues, comments, reviews and the run ledger — and it never imports a model SDK itself (ADR-0014).
Every workspace is provisioned with a small organization of role agents (product, engineering, quality, platform, growth and leadership roles, plus an Orchestrator) with their own contracts, autonomy levels and review rules. Agents can plan, implement and propose work, but they cannot mark an issue done or merge anything — release is always a human decision. See PRODUCT.md for the product-level description.
| Path | What |
|---|---|
server-ts | TypeScript product server, its migrations, and the agent runtime sources |
frontend | Next.js App Router UI |
packages/plugin-sdk | SDK for building Berry plugins |
docs | Product brief, ADRs, API contract, design system, and AI runtime matrix |
The server, frontend, plugin SDK, desktop and mobile packages form a pnpm workspace and do not share a validation workflow (different formatters and linters) — see AGENTS.md for the per-package rules.
The server serves identity, workspaces, boards, issues, comments, dependencies, reviews,
goals, projects, attachments, agents, the organization, work proposals, runs, runtimes,
integrations, approvals, the inbox, conversations, search, saved views, catalogs, plans,
autopilots, skills, MCP servers, plugins, usage and dashboards, editor AI, the task-token
agent-tools API, the public /v1 API, and the realtime event streams. GET /api/v1/config
reports only the capabilities this deployment actually has (for example, agentExecution
is only true when an agent runtime target is configured), so the UI switches off what is
missing rather than offering it. server-ts/SCOPE.md records what is deliberately left
unserved.
Berry connects supported AI subscriptions so teams can coordinate agents using accounts they already pay for. Subscription access and limits remain with the provider. Native/API execution is a separate option; a disconnected subscription does not silently fall back to API billing. See AI runtimes.
Berry can run directly on the host. Optional Docker development and Dokploy deployment stacks are documented in deploy/local and deploy/dokploy.
| Dependency | Purpose |
|---|---|
| PostgreSQL 16 | Berry's durable product state, reached through DATABASE_URL |
| AWS S3 (or an S3-compatible store) | Artifact storage, through the S3_* variables |
| AWS Bedrock AgentCore Runtime | Where agents run (ADR-0014) |
| Kilo AI gateway (optional) | Native model calls in Berry's model tiers instead of straight to Bedrock (ADR-0017) |
| User AI subscription | Supported official CLIs on the workstation that runs Berry (matrix and setup); connected subscription runs do not require model API billing |
Provider keys and object-store credentials are server-side only, never under a
NEXT_PUBLIC_* name.
Prerequisites: Node 22 (with --experimental-strip-types), pnpm 12.5.1 (the version pinned in package.json), a
PostgreSQL 16 instance you run yourself, and Python 3 for repository checks.
cp .env.example .env
pnpm install
pnpm db:migrate # forward-only, under an advisory lock; reads DATABASE_URL
pnpm db:seed # idempotent development dataset
pnpm dev:server # http://127.0.0.1:4000
cd frontend && cp .env.example .env.local && cd ..
pnpm dev:frontend # http://127.0.0.1:3000
Check the server is up:
curl http://127.0.0.1:4000/health
curl http://127.0.0.1:4000/ready
curl http://127.0.0.1:4000/api/v1/config
With APP_ENV=development and AUTH_ALLOW_PASSWORDLESS_LOGIN (default on),
POST /api/v1/auth/dev-login signs in an existing user by email without GitHub. For
real sign-in, configure a GitHub OAuth App (BERRY_AUTH_GITHUB_CLIENT_ID/SECRET).
Run the checks:
pnpm typecheck:server
pnpm test:server # DB-backed tests self-skip without BERRY_TEST_DATABASE_URL
pnpm test:plugin-sdk && pnpm typecheck:plugin-sdk
cd frontend && pnpm lint && pnpm build:check # build:check writes .next-verify, not .next
Never point any of this at your everyday development database: creating a workspace
provisions a protected Orchestrator agent that cannot be deleted, so a schema-only copy
is the right target for BERRY_TEST_DATABASE_URL. See server-ts/ROUTING.md.
Berry queues a task (from an assignment, a mention, chat, an autopilot, a quick action, the
agent builder, or a completion request such as the planner's calls), a dispatcher claims it under a lease, and the task is sent as a
TaskEnvelope to an agent runtime — either an AWS Bedrock AgentCore Runtime, or the same
runtime image reached over plain HTTP. Inside that runtime, a Strands Agents SDK loop
calls the model — Amazon Bedrock directly by default, or the Kilo AI gateway — and
streams lifecycle events (task.started, task.message, task.usage, task.completed,
task.failed) back to Berry, which is the only writer of run state. The agent acts on
Berry exclusively through /api/v1/agent-tools/* with a short-lived, task-scoped token —
never through the database directly.
For agent execution, connect a subscription AI runtime (Kiro, Claude Code, Codex, or another workstation CLI) and place its models on Berry tiers in Settings → Model tiers. AgentCore is the AWS compute host for the runtime image, not a model provider:
server-ts/sandbox/agentcore/deploy.sh builds it, pushes it
to ECR and publishes it as an AgentCore Runtime; it needs account-owner AWS credentials
and Docker buildx on the machine running it. Point BERRY_AGENTCORE_RUNTIME_ARN at the
ARN it prints. (Alternatively, set BERRY_AGENT_RUNTIME_URL to call the same image over
HTTP without AgentCore.)BERRY_RUNTIME_CALLBACK_URL (or
BERRY_PUBLIC_URL), which AWS must be able to reach — a tunnel when developing locally.S3_BUCKET so a run's files have somewhere to land, and INTEGRATION_ENCRYPTION_KEY
if the run needs GitHub or plugin credentials.There is no native Bedrock or Kilo model path. Completions and agent runs
fail until a subscription is connected. Tiers remain: each agent is on
BerryMax, BerryXHigh, BerryHigh, BerryMid or BerryLow, and a run uses the
first connected model on that tier unless the task names one. Kiro runs as
kiro-cli on this workstation; it does not run in the runtime image.
Without a runtime target, agentExecution reports false in GET /api/v1/config and
the dispatcher, scheduler and review gate simply do not start — the rest of Berry works
normally.
Documentation website — searchable product guides, setup, operations, and API reference; preview with npm --prefix documentation run dev after installing its dependencies.
AGENTS.md — the authoritative short guide for coding agents working in this repo
PRODUCT.md — product description: capabilities, the organization, reviews and proposals
Server scope and routing
Berry is licensed under the GNU Affero General Public License v3. See LICENSE.
Berry's own code stays AGPL-3.0-only.
The web interface began as the MIT-licensed Circle template; that notice stays in frontend/LICENSE.md.
Shipped dependencies may be MIT, Apache-2.0, or Elastic License 2.0. Elastic License 2.0 code may not be offered as a managed service, may not have its notices or license-key checks stripped, and is not relicensed to AGPL.