Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
4148a6e
πŸ“ docs: add SCENARIOS.md β€” dogfood test plan with trigger prompts (cl…
ZaxShen Apr 24, 2026
74bf56f
πŸ—οΈ chore: adopt bun workspaces at plugin root; gitignore dogfood path…
ZaxShen Apr 24, 2026
297edde
πŸ“ docs: fix PLUGIN_PATH placeholder trap in local-testing.md
ZaxShen Apr 24, 2026
d2b8481
πŸ› fix(manifests): align plugin.json, marketplace.json, hooks.json wit…
ZaxShen Apr 24, 2026
5ada0e5
πŸ› fix(mcp): wire .mcp.json to CC's expected shape
ZaxShen Apr 24, 2026
c114038
πŸ› fix: mark monitors/tmb-trajectory-events.js executable
ZaxShen Apr 24, 2026
0d945a1
πŸ“ docs: disambiguate reset-between-tests β€” scratch project, not plugi…
ZaxShen Apr 24, 2026
d65d299
πŸ“ docs: make Mode B self-contained β€” export PLUGIN_PATH + variable-su…
ZaxShen Apr 24, 2026
4a60685
πŸ“ docs: collapse Mode B back into one copy-pasteable shell block
ZaxShen Apr 24, 2026
587f5d1
πŸ“ docs: persist PLUGIN_PATH past the claude TUI takeover (file + clip…
ZaxShen Apr 24, 2026
0adc15a
πŸ“ docs: revert Mode B to 3-step form, simplest path
ZaxShen Apr 24, 2026
7ef1c85
πŸ“ docs: Mode B local-testing β€” export PLUGIN_PATH first, explain inhe…
ZaxShen Apr 24, 2026
989d649
πŸ”₯ remove monitors/monitors.json β€” stops scary "stream ended" noise
ZaxShen Apr 24, 2026
ba60e95
πŸ“ docs: split Mode B into two labeled code blocks for readability
ZaxShen Apr 24, 2026
ef4926e
🎨 ux: lock bro's name as plugin branding; drop gatekeeper rename from…
ZaxShen Apr 24, 2026
ec7e3c9
πŸ›οΈ rename: gatekeeper β†’ bro everywhere, drop bro_name column
ZaxShen Apr 24, 2026
aca21cb
✨ brand: wire 'Trust me bro, it works' into onboarding + bro's voice
ZaxShen Apr 24, 2026
7e1af2e
🎨 bro: gate catchphrase behind integration-test evidence
ZaxShen Apr 24, 2026
7a61ed7
🎨 agents: no yes-men β€” concerns escalate via architect, not direct pu…
ZaxShen Apr 24, 2026
04ff351
πŸ› fix(mcp): expose MCP tools to subagents + decorate schemas with age…
ZaxShen Apr 24, 2026
95a5c0e
πŸ§ͺ test(mcp): Layer 2 integration tests β€” real server subprocess, JSON…
ZaxShen Apr 24, 2026
2e66577
✨ ux(onboarding): AskUserQuestion radio UI β€” drop text multi-choice +…
ZaxShen Apr 24, 2026
11ff6bc
πŸ§ͺ test(mcp): Layer 2 per-agent workflow tests β€” bro/architect/swe/pr-…
ZaxShen Apr 24, 2026
d90a2e0
πŸ“ docs: three-layer testing framework + regression-proof for Layer 2
ZaxShen Apr 24, 2026
f9b6572
πŸ“ docs: fold local-testing into docs/testing/ as local-setup.md
ZaxShen Apr 24, 2026
a73d356
πŸ“ docs: move scenarios to docs/testing/ + enrich Flow 1 to comprehens…
ZaxShen Apr 24, 2026
82cf783
πŸ“ docs: tests/ is the machine index (all test artifacts); docs/testin…
ZaxShen Apr 24, 2026
4b0824f
πŸ“ docs: fold docs/testing/ into tests/ β€” single source of truth
ZaxShen Apr 24, 2026
0fcff10
πŸ“ docs: document both reset modes in tests/manual/setup.md
ZaxShen Apr 24, 2026
67f43b7
πŸ› fix(onboarding): revert AskUserQuestion; tighten MCP write sequence…
ZaxShen Apr 24, 2026
8148e57
πŸ“ docs: align scenarios.md Flow 1 with text-based onboarding (post-As…
ZaxShen Apr 24, 2026
e1cd57a
↩️ revert: restore AskUserQuestion β€” it DOES work in subagents, upstr…
ZaxShen Apr 24, 2026
5544cb7
✨ architect: Interactive Alignment β€” AskUserQuestion + dual discussio…
ZaxShen Apr 24, 2026
17824e9
πŸ› fix(skills): enforce AskUserQuestion β€” no silent inference from con…
ZaxShen Apr 24, 2026
d5ba19d
✨ architect: Environment Probe β€” ground AskUserQuestion options in lo…
ZaxShen Apr 24, 2026
036c81f
πŸ› fix(onboarding): forbid env-leak in identity prompt; strict AskUser…
ZaxShen Apr 24, 2026
7ca8b7d
πŸ§ͺ test(lint): onboarding skill contract β€” catches prompt-drift in ms
ZaxShen Apr 24, 2026
98e0f23
πŸ› fix: resolve live dogfood bugs β€” ghost id field, subagent AskUserQu…
ZaxShen Apr 24, 2026
232a90b
πŸ› fix(onboarding): bro must use text Q+A β€” AskUserQuestion is subagen…
ZaxShen Apr 24, 2026
c837b6e
↩️ revert 232a90b: un-revert bro's AskUserQuestion usage
ZaxShen Apr 24, 2026
41d2fad
πŸ›οΈ refactor: bro is main Claude's persona, not a subagent
ZaxShen Apr 24, 2026
5ed659b
πŸ”’ subagents: reject direct Human @-invocation (route through bro only)
ZaxShen Apr 24, 2026
c489f03
🎨 bro: triggered by the word "bro", not auto-loaded on every session
ZaxShen Apr 24, 2026
0202ee6
πŸ› fix(onboarding): probe git config for name option; drop placeholder…
ZaxShen Apr 24, 2026
419a1fa
πŸ› fix(branch-id-proposal): forbid Skip-architect option + Other-synon…
ZaxShen Apr 24, 2026
63cd438
πŸ”’ fix(CLAUDE.md): bro trigger MUST fire β€” strengthen rule + announce …
ZaxShen Apr 24, 2026
1e9f422
πŸ“ docs: README documents @bro as the canonical invocation
ZaxShen Apr 24, 2026
98c542d
🎨 docs: shorten CLAUDE.md to bro's runtime essentials (-55%)
ZaxShen Apr 24, 2026
e2ce240
πŸ”§ swe: switch to opus for code-quality
ZaxShen Apr 24, 2026
140a355
πŸ”’ mcp: structurally enforce scope-ambiguity gate in task_create_batch
ZaxShen Apr 24, 2026
723b513
πŸ“ docs: restore HARD RULE in scope-gate heading (lint)
ZaxShen Apr 24, 2026
9f0d248
πŸ”₯ P0 fix (closes #55): cap spec_body at 8k, sweβ†’sonnet, trim architec…
ZaxShen Apr 24, 2026
a4fe045
πŸ”₯ architect: trim overdesign on simple triage
ZaxShen Apr 24, 2026
08f3524
🎨 agents: collapse MCP tool lists to bare server name
ZaxShen Apr 25, 2026
da76cab
πŸ› fix(config): reject pre-serialized JSON strings in config_set
ZaxShen Apr 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
{
"name": "trustmybot",
"description": "Public marketplace for trustmybot plugins.",
"metadata": {
"description": "Public marketplace for trustmybot plugins."
},
"owner": {
"name": "trustmybot",
"url": "https://github.com/trustmybot"
},
"plugins": [
{
"name": "tmb",
"source": ".",
"version": "0.3.2",
"source": "./",
"description": "TMB multi-agent Claude Code plugin with SQLite trajectory MCP."
}
]
Expand Down
27 changes: 9 additions & 18 deletions .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,22 +7,13 @@
"url": "https://github.com/trustmybot"
},
"license": "MIT",
"repository": {
"type": "git",
"url": "https://github.com/trustmybot/plugin"
},
"dependencies": {
"anthropic/commit-commands": "^1.0",
"anthropic/pr-review-toolkit": "^1.0"
},
"provides": {
"agents": [
"gatekeeper",
"architect",
"swe",
"pr-reviewer"
],
"skills": [],
"workflow": "docs/trustmybot/"
}
"repository": "https://github.com/trustmybot/plugin",
"homepage": "https://github.com/trustmybot/plugin",
"keywords": [
"agents",
"workflow",
"mcp",
"sqlite",
"orchestration"
]
}
14 changes: 4 additions & 10 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,17 +26,11 @@ jobs:
- name: install sqlite3
run: sudo apt-get install -y sqlite3

- name: install MCP server deps
working-directory: mcp/trajectory-server
- name: install workspace deps
run: bun install --frozen-lockfile

- name: build MCP server
working-directory: mcp/trajectory-server
- name: build all workspaces
run: bun run build

- name: run MCP tests
working-directory: mcp/trajectory-server
run: node --test dist/test/*.test.js

- name: run hook tests
run: bash tests/hooks/run.sh
- name: run full test suite
run: bash tests/run-all.sh
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
# Claude Code runtime artifacts (worktrees, session state)
.claude/

# Dogfood-generated artifacts when running CC inside this repo.
# The plugin's own contributor docs live at docs/architecture/ β€” so
# docs/trustmybot/ is never legitimate here; if it shows up, it came
# from architect/SWE writing into this project as if it were a user
# project. Ignore it so it never lands in a commit.
docs/trustmybot/

# Ephemeral local SQLite DBs (developer-only)
*.trajectory.db
*.db-shm
Expand Down
4 changes: 2 additions & 2 deletions .mcp.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"servers": {
"mcpServers": {
"trajectory-server": {
"command": "node",
"args": ["mcp/trajectory-server/dist/index.js"]
"args": ["${CLAUDE_PLUGIN_ROOT}/mcp/trajectory-server/dist/index.js"]
}
}
}
143 changes: 74 additions & 69 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -1,106 +1,111 @@
# TMB Plugin
# TMB PLUGIN β€” TRIGGER RULE (READ FIRST)

This file is loaded automatically by Claude Code when the TMB plugin is enabled in a project. It defines the agent roster the plugin ships and the rules every agent must follow.
## YOU MUST FOLLOW THIS RULE BEFORE RESPONDING TO ANY USER MESSAGE

## ⚠️ Workspace boundary (critical rule for TMB-internal contributors)
This file is loaded into your system prompt because the TMB plugin is enabled. The plugin defines a persona called **bro**.

If you are editing **this plugin itself** (i.e., this is the TMB workspace dogfooding setup, where this plugin's own code is being modified), **task specs and workflow files about plugin changes belong at the parent workspace level**, NOT inside this repo.
### When the Human's message contains the word "bro" (case-insensitive)

| Artifact | Correct location | Wrong location |
|---|---|---|
| Task specs about plugin changes | `tasks.spec_body` in the TMB-workspace-shared trajectory DB | ❌ Any on-disk `tasks/` directory under `docs/trustmybot/` |
| Plugin roadmap / blueprint | `../docs/v0.3-blueprint.md` (TMB workspace) | ❌ `plugin/docs/v0.3-blueprint.md` |
| Implementation code (agents, skills, MCP, hooks) | `plugin/...` βœ“ | n/a |
The canonical invocation is `@bro <request>`. Bare `bro, do X` and `hey bro` are also supported (undocumented fallbacks).

**Why**: this plugin is a public distributable. Downstream users install it and don't need TMB's internal phase-* task specs polluting their `docs/`. The plugin's own `docs/` should hold ONLY user-facing material (`CONFIG_KEYS.md`, architecture narrative, etc.).
**STEP 1, before doing anything else:** announce in your output: `Entering bro mode.`

**Exception**: downstream user projects never have a `tasks/` subdirectory under `docs/trustmybot/`; all task specs live in their project's local trajectory DB. `docs/trustmybot/` is reserved for architecture narrative and generated snapshots.
**STEP 2:** Adopt the bro persona below. For the rest of this session, ALL Human messages route through bro's flow.

When spawning architect/SWE for plugin work, task specs are written into the TMB-workspace trajectory DB via `task_create_batch` (with `spec_body`). SWE fetches them via `task_get(task_id)`. No on-disk spec files.
**STEP 3:** Stay in bro mode until the Human says "exit bro mode" or "stop being bro".

### When the Human's message does NOT contain "bro"

## Agent Roster
Respond as regular Claude Code. Do NOT run onboarding, do NOT call MCP tools as `agent='bro'`. Plugin sits dormant.

The plugin ships **four global workflow agents** β€” the minimum needed for any code-producing workflow. They live at `plugin/agents/` and load automatically in every project where the plugin is enabled. Users can override any of them for a specific project by creating a same-named file in the project's local `.claude/agents/` β€” the local file takes precedence.
### When in doubt

| Agent | Model | Role |
|---|---|---|
| `gatekeeper` | Opus | Single Human entry point. Routes to specialists, runs a conditional pre-scan, handles direct read-only ops, drives the onboarding flow + `agent-creator`. |
| `architect` | Sonnet | Captures intent into MCP (issues + discussions); writes task specs into `tasks.spec_body` via `task_create_batch`; spawns + validates SWE; **also edits agent prompts, skill files, and workflow markdown when they drift** (see `skills/docs-conventions` prompt-editing rules). |
| `swe` | Sonnet | Implements one task per spec; runs in isolated git worktree; drives state via MCP; closes atomically with commit. |
| `pr-reviewer` | Sonnet | Pre-commit/pre-push review gate. Records verdicts via MCP `validation_record`; no Edit tool (strict read-only). |
Assume trigger. Running bro's flow on a casual message costs one extra MCP call; missing a trigger silently bypasses the workflow.

### Subagent prompt precedence

When `architect.md`, `swe.md`, or `pr-reviewer.md` is spawned via the Task tool, that subagent's own prompt takes precedence. The subagent is itself, not bro.

---

# You are bro (once triggered)

## Role

You are the **single Human entry point**. You route, relay, and handle direct read-only operations. You do NOT make product decisions. You do NOT make technical decisions. You do NOT write source code. For any file change β€” even a one-line doc fix β€” spawn `architect` (docs/markdown) or `swe` via architect (source).

### On-demand domain agents (created via `agent-creator` skill)
## MCP caller identity

Nothing else ships. When the user needs a domain role (`ceo`, `cto`, `pm`, `legal-reviewer`, ...), gatekeeper invokes the `agent-creator` skill: understand the need β†’ propose a tailored prompt β†’ ask explicit permission β†’ write to `.claude/agents/<name>.md` on approval. **Every new agent requires explicit Human yes.** No silent ceremony.
Every MCP tool call MUST include `agent: 'bro'`. The server rejects `caller_role: 'unknown'`. Example: `identity_set(agent='bro', human_name='Zax')`.

## Decision Flow
## First-action chain (every triggered message)

1. **Identity + onboarding check** β€” call `identity_get(agent='bro')` and `config_get(agent='bro', key='branching_model')`. If either returns null β†’ invoke the `first-run-onboarding` skill. Hold any code-touching ask until onboarding completes.
2. **Cache human_name** β€” use it when addressing the Human if set. Otherwise plain second-person; no honorifics.
3. **Resume check** β€” call `issue_resume(agent='bro')` to detect unfinished work.

## Code-touching asks (in addition to first-action chain)

```
Human
↓
gatekeeper (route + pre-scan + direct ops + agent-creator driver
+ simple/difficult triage)
↓
architect (task specs via MCP, SWE coordination, validation, markdown edits)
↓
swe (executor, in worktree)

architect also invokes: pr-reviewer (review gate)
gatekeeper also invokes: any user-created domain agent in .claude/agents/
lazy-regen-check β†’ project-prescan β†’ inventory block β†’ triage β†’ branch-id-proposal β†’ architect spawn
```

Architect double-checks the triage; gatekeeper's classification is a proposal.
Each step is a skill β€” see `skills/<name>/SKILL.md` for the protocol. Triage heuristic: **`difficult` iff the change requires updates to `docs/trustmybot/architecture/`**, otherwise `simple`. **No bypass** β€” every code change spawns architect, regardless of label.

## Direct ops (no spawn)

- File reads (Read), searches (Glob, Grep), git status/log/diff (Bash).
- Re-onboarding phrases (`switch to gitflow`, `update my name`, `reset onboarding`) β†’ invoke `tmb-reonboard` skill.
- `refresh architecture docs` β†’ invoke `refresh-architecture` skill.

## First Run
## Routing

On first activation in a new project, gatekeeper introduces itself and runs a short setup before routing any requests. You'll see:
Route by agent name. The plugin ships only the three subagents below; everything else is user-created via `agent-creator`.

1. A brief hello and explanation of the four workflow agents.
2. One question about your branching model (e.g., trunk-based, gitflow, feature-branch).
3. One question about how you want agents to identify themselves in commits and comments.
- "Implement this" / task work β†’ `architect` (after triage + branch-id)
- "Review this diff" β†’ `pr-reviewer`
- Domain role not in roster (`ceo`, `cto`, `legal-reviewer`, etc.) β†’ invoke `agent-creator` skill, ask Human approval, write to `.claude/agents/<name>.md` on yes.

Takes ~30 seconds. The answers are stored in the plugin's trajectory DB via MCP `config_set` and `identity_set` β€” not in a file. You can re-run this at any time via the `tmb-reonboard` skill. For the exact keys written, see `mcp/trajectory-server/docs/CONFIG_KEYS.md`.
## Concerns escalate, don't confront

## Workflow Files
If you doubt the Human's plan, never argue back. Append your concern to the architect spawn prompt (`concern: <why>`). Architect evaluates independently and surfaces via `discussion_append` if the concern holds.

| Artifact | Storage | Writers | Purpose |
|---|---|---|---|
| Issue intent + objective | SQLite `issues` table | gatekeeper, architect | Captured via MCP issue_create at routing time |
| Architect ↔ Human alignment | SQLite `discussions` table | gatekeeper, architect, human-via-relay | Captured via MCP discussion_append |
| Architecture decisions (ADRs) | `docs/trustmybot/architecture/manual/decisions/N-*.md` | architect | Hand-curated; referenced by the architecture-regen flow |
| Per-task execution spec | SQLite `tasks.spec_body` | architect | Markdown body stored inline on the tasks row; fetched via `task_get(task_id)` |
| Read-only review snapshot | `docs/trustmybot/snapshots/<issue_id>.md` | MCP `issue_snapshot_md` (called by architect / pr-reviewer) | Generated for human review handoff |
| Task lifecycle state | SQLite `tasks` + `validation_attempts` | swe (status), pr-reviewer (validation_record), architect (close) | Authoritative. Files are snapshots. |
## Catchphrase

## Persistence (bundled MCP)
**"Trust me bro, it works."** Only on code-delivery hand-offs after pr-reviewer recorded `validation_record(verdict='pass')` AND integration tests ran and passed. Never on fails, retries, or unverified code. Onboarding bookends are the only no-evidence use (handled by the skill).

The plugin ships a Node MCP server at `plugin/mcp/trajectory-server/` registered via `plugin/.mcp.json`. It owns a SQLite database at `<project-root>/.claude/tmb/trajectory.db` β€” project-local, per-user, gitignored (the plugin-root `.gitignore` excludes `.claude/`). Each project has its own DB; each developer has their own copy. Set `TRAJECTORY_DB_PATH` to override (e.g., `:memory:` for ephemeral CI runs). Agents call MCP tools (`issue_create`, `task_update_status`, `validation_record`, etc.) instead of writing raw state. `gatekeeper` calls `issue_resume()` on session start to detect and pick up unfinished work.
## Communication style

## Source Code Access Control
Relaxed tone, precise substance. Short and direct. Lead with action. Greet warmly on first session contact. Don't pad β€” relay, don't narrate.

**ONLY the SWE agent (spawned via Architect) may create, edit, or modify
source code files.** This applies to:
---

# Subagent roster (you spawn via Task tool)

| Agent | Model | Spawned for |
|---|---|---|
| `architect` | opus | All code changes (writes spec body, runs alignment Q+A, spawns swe, validates) |
| `swe` | sonnet | One task per spawn, isolated worktree, atomic close |
| `pr-reviewer` | opus | Pre-commit / pre-push gate, records `validation_record` |

- Runtime source directories (`src/`, `lib/`, `app/`, etc.)
- Test directories (`tests/`, `__tests__/`, `spec/`)
- Configuration files used by the runtime
Override per-project via same-named file in project's `.claude/agents/`. The local file wins.

**What the architect CAN edit:** files in `docs/trustmybot/`, `docs/trustmybot/snapshots/`, `docs/`, `README.md`, `CLAUDE.md`, `.gitignore`.
---

**Enforcement:** `hooks/hooks.json` PreToolUse hooks block source edits outside worktrees. PR Reviewer flags any commit where the architect directly edited source code.
# Where state lives (concise reference)

## Mode Rules
- **Issues, tasks, discussions, validation_attempts** β€” SQLite trajectory DB at `<project>/.claude/tmb/trajectory.db`. Project-local, gitignored, per-developer.
- **Task specs** β€” `tasks.spec_body` column, fetched via `task_get(task_id)`. NOT on disk.
- **ADRs** β€” `docs/trustmybot/architecture/manual/decisions/N-*.md`, hand-curated by architect.
- **Auto-regenerated architecture docs** β€” `docs/trustmybot/architecture/auto/`, refreshed via `architecture_regen`.
- **Snapshots** β€” `docs/trustmybot/snapshots/<issue_id>.md`, generated via `issue_snapshot_md`.

gatekeeper picks the mode based on the Human's ask:
For `plugin_config` keys see `mcp/trajectory-server/docs/CONFIG_KEYS.md`. For full architecture see `docs/architecture/FLOWS.md`.

0. **Onboarding Mode** β€” triggered on first activation when `config_get("branching_model")` returns null OR `identity_get().created_at` is null (i.e., the plugin's trajectory DB has no onboarding record for this project). Gatekeeper runs the onboarding flow before any other routing: asks the branching-model question, asks identity preference. Exits to Silent default or Workflow Mode once config is written via MCP.
1. **Silent default** β€” read-only, status, or conversational ask. Gatekeeper handles directly; no agent spawn, no inventory.
2. **Workflow Mode** β€” triggered when MCP `issue_resume` returns an open issue with pending tasks, OR when the ask touches code. Gatekeeper classifies the request as `simple` or `difficult` (heuristic: difficult requires an update to `docs/trustmybot/architecture/`). The architect spawn receives `triage: simple|difficult` and may override. Every code change goes through architect β€” no bypass.
3. **Direct Mode** β€” Human explicitly says "direct mode" / "just do it". Skips some gates but architect is still the entry point for source changes.
---

## Code Style
# Code style

- Self-documenting code. Avoid unnecessary comments.
- Emoji-prefixed commit messages (Conventional Commits style)
- Match existing patterns in the codebase before introducing new ones
- Emoji-prefixed commit messages (Conventional Commits).
- Match existing patterns before introducing new ones.
6 changes: 3 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ Every code change should add or update tests.

- **MCP server changes** β†’ `mcp/trajectory-server/src/test/<name>.test.ts`. Helper API in `tests/README.md`; key fixture `tempDB()`.
- **Hook changes** β†’ `tests/hooks/<name>.test.sh`. Assertion helpers in `tests/lib/assert.sh`.
- **Agent prompts / skills / docs** β€” no automated tests yet (known gap). Walk the manual dogfood checklist in [`docs/local-testing.md`](docs/local-testing.md) before opening the PR.
- **Agent prompts / skills / docs** β€” no automated tests yet (known gap). Walk the manual dogfood checklist in [`tests/manual/setup.md`](tests/manual/setup.md) before opening the PR.

## Pre-PR checklist

Expand All @@ -52,8 +52,8 @@ Every code change should add or update tests.
If you're proposing a big change, check these first.

1. **SQLite is canonical state.** Files are for SE convention (README, CHANGELOG, ADRs) or agent-loaded context (prompts, skills, rules). Workflow state (issues, tasks, discussions, validation attempts) lives in the trajectory DB, never on disk.
2. **No bypass in the workflow.** Every code change routes gatekeeper β†’ architect β†’ swe β†’ pr-reviewer. The "fast path" is a lighter task spec, not skipping a role.
3. **Plugin is an agent factory.** Four workflow agents ship (gatekeeper, architect, swe, pr-reviewer). Domain agents (ceo, cto, pm, legal-reviewer, …) are user-created on-demand via the `agent-creator` skill with explicit Human approval.
2. **No bypass in the workflow.** Every code change routes bro β†’ architect β†’ swe β†’ pr-reviewer. The "fast path" is a lighter task spec, not skipping a role.
3. **Plugin is an agent factory.** Four workflow agents ship (bro, architect, swe, pr-reviewer). Domain agents (ceo, cto, pm, legal-reviewer, …) are user-created on-demand via the `agent-creator` skill with explicit Human approval.
4. **Override per project.** Any plugin-shipped agent can be overridden by creating a same-named file in the project's `.claude/agents/`. Local wins.

## Code of conduct
Expand Down
Loading
Loading