Skip to content
Open
Show file tree
Hide file tree
Changes from 58 commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
e036ea9
fix(deps): bump ethnum to 1.5.3 to unbreak the build
geudrik Aug 2, 2026
cc12621
docs: correct README inaccuracies and drop the unimplemented Spacedri…
geudrik Aug 2, 2026
a16d7ef
feat(tasks): add attempt log, failure budget, and project binding
geudrik Aug 2, 2026
af937a8
fix(interface): regenerate stale OpenAPI schema and drop the contradi…
geudrik Aug 2, 2026
2681461
feat(interface): surface blocked tasks, attempt history, and repo bin…
geudrik Aug 2, 2026
4407824
chore(interface): add a dev-only UI lab for task components
geudrik Aug 2, 2026
406c39a
fix(tasks): stop a partial binding PATCH from unbinding its siblings
geudrik Aug 2, 2026
39904a2
test(db): pin foreign key enforcement on the instance database
geudrik Aug 2, 2026
983350c
fix(worker): actually run bound tasks in their bound directory
geudrik Aug 2, 2026
186fedd
feat(cortex): reap task pickups whose worker died
geudrik Aug 2, 2026
eb16a3c
fix(interface): consume the generated API types instead of hand-writt…
geudrik Aug 2, 2026
7b6ede8
feat(tasks): dependency edges and typed block reasons
geudrik Aug 2, 2026
1cda977
feat(interface): surface dependencies and typed block reasons on the …
geudrik Aug 2, 2026
f7f5b8f
feat(tasks): typed input/output contracts between tasks
geudrik Aug 2, 2026
1894252
feat(tasks): enforce contracts at claim and completion
geudrik Aug 2, 2026
392c149
feat(interface): contract inspector in the task drawer
geudrik Aug 2, 2026
4ffd2f2
feat(tasks): let workers file cards instead of spawning sub-workers
geudrik Aug 2, 2026
3758a1d
feat(interface): show where a card came from and what it filed
geudrik Aug 2, 2026
4e03c1e
fix(interface): keep the dev-only UI lab out of production builds
geudrik Aug 2, 2026
4e4abb4
fix(interface): stop the drawer crashing on blocked tasks, and let hu…
geudrik Aug 3, 2026
7f15d36
docs(prompts): tell workers about their task tools
geudrik Aug 3, 2026
e46bbea
feat(interface): author dependencies and bindings, and gate status moves
geudrik Aug 3, 2026
17d1c88
fix(tasks): stop the ready sweep from looping a task it can never run
geudrik Aug 3, 2026
e255abb
fix(interface): make copy buttons work outside a secure context
geudrik Aug 3, 2026
5ee6574
feat(interface): kanban board view on /tasks, owned locally
geudrik Aug 3, 2026
dfe221e
feat(tasks): make the per-task failure budget settable
geudrik Aug 3, 2026
e534fd9
refactor(llm): collapse 7 API types and 20 providers down to two
geudrik Aug 3, 2026
16d7746
feat(workflows): compile a pipeline template into a runnable task graph
geudrik Aug 3, 2026
2bb6c6d
fix(tasks): let the scheduler release what the scheduler parked
geudrik Aug 3, 2026
190cdee
feat(workflows): serve the DAG builder and let a step instruct its wo…
geudrik Aug 3, 2026
674726f
feat(interface): expose the per-task failure budget in the drawer
geudrik Aug 3, 2026
f60a324
feat(interface): author and launch workflows from the dashboard
geudrik Aug 3, 2026
58739a1
feat(tasks): gate a task on external state, and refuse a template tha…
geudrik Aug 3, 2026
972318a
feat(interface): edit and watch workflows on a canvas
geudrik Aug 3, 2026
f4aed51
feat(workflows): fan out a step over a collection it did not know the…
geudrik Aug 3, 2026
0591881
feat: draw the graph a task belongs to, and render fan-out branches a…
geudrik Aug 3, 2026
c01995b
feat(interface): see the graph any task belongs to, from that task
geudrik Aug 3, 2026
8ef5c33
docs: plan workflow branching
geudrik Aug 3, 2026
997f8c6
docs: plan command steps
geudrik Aug 3, 2026
136661b
docs: plan worktree provisioning, and correct what the sandbox actual…
geudrik Aug 3, 2026
2cabc2a
fix(interface): put Projects in the main nav so a fresh instance can …
geudrik Aug 3, 2026
eca34d6
feat(workflows): bounded loops, with converging and giving up as diff…
geudrik Aug 3, 2026
9d37ccc
docs: spec the operational layer, human decisions, assignment, and re…
geudrik Aug 3, 2026
07ef234
fix(sandbox): stop reporting containment that is not there
geudrik Aug 3, 2026
8c92b1c
feat(interface): author loops, and stop drawing passes as branches
geudrik Aug 3, 2026
f06fcb7
feat(workflows): branching, and the end of the parked-forever branch
geudrik Aug 3, 2026
06abe93
feat(interface): author conditions, and record what a routing one dec…
geudrik Aug 3, 2026
1fe5672
fix(interface): use tokens that exist — 392 dead colour classes acros…
geudrik Aug 3, 2026
e371c36
feat(workflows): give a run a state, and a ceiling on what it can spend
geudrik Aug 4, 2026
925e7a8
chore: keep deep-review output out of the tree
geudrik Aug 4, 2026
df6afaa
feat(interface): show what a run is doing, and let it be stopped
geudrik Aug 4, 2026
e161b65
feat(workflows): let a schedule, a webhook, or an agent launch a run
geudrik Aug 4, 2026
11ab9f5
feat(workflows): command steps, and a checkout of their own
geudrik Aug 4, 2026
553bbc3
feat(interface): author command steps, and read what they printed
geudrik Aug 4, 2026
59673ff
feat(tasks): say what a task needs instead of who should do it
geudrik Aug 4, 2026
9de4b5c
fix(api): 404 an unmatched API path instead of serving the dashboard
geudrik Aug 4, 2026
b89a572
feat(interface): declare capabilities, require them, and see what not…
geudrik Aug 4, 2026
fc6191a
feat: ask a person a question, declare what repos need from each other
geudrik Aug 4, 2026
69356bc
chore: drop stale review reports that should never have been committed
geudrik Aug 4, 2026
f653e74
chore(release): bump to 0.6.0 for the breaking task-DAG branch
geudrik Aug 4, 2026
bc649b9
fix(llm,config): honest routing defaults and exactly-once usage accou…
geudrik Aug 5, 2026
430d037
fix(tasks): claim the chokepoint, harden HTTP gates, enforce binding …
geudrik Aug 5, 2026
d682b7b
fix(workflows): refuse unreadable sources, emit atomically, keep run …
geudrik Aug 5, 2026
2e92961
fix(cortex): stop settling incomplete work as done, close timeout run…
geudrik Aug 5, 2026
85d46cd
fix(api): plug key-exfil paths, test task and workflow handlers
geudrik Aug 5, 2026
acb988d
fix(sandbox): reap the whole process tree on timeout, not just the child
geudrik Aug 5, 2026
cbca8f3
fix(tools): load task_complete's description like its siblings, test …
geudrik Aug 5, 2026
544214a
fix(interface): keyboard access, honest controls, and a test runner
geudrik Aug 5, 2026
677b040
docs: make tasks, docker, config, and roadmap pages tell the truth
geudrik Aug 5, 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
156 changes: 156 additions & 0 deletions .agents/skills/deep-review/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
---
name: deep-review
description: This skill should be used when the user asks for a "deep review", "thorough review", "multi-agent review", "full review", or "review this PR/branch/diff" beyond a quick pass. Fans out parallel specialist reviewer agents (security, logic, conformity, quality, tests, contracts, docs, UI) over a shared change map and synthesizes one deduplicated, severity-ranked report.
---

# Deep Review

Multi-agent code review. You are the orchestrator: you build the change map, fan out dedicated reviewer agents in one batch, and own the synthesized report. Reviewers advise; you decide.

The reviewers are project agents defined in `.omp/agents/review-*.md`. Each is read-only, carries its own area brief and severity contract, and returns structured findings. Read an agent file to see exactly what a reviewer checks.

## Principles

- Reviewers NEVER edit code or run builds/gates/test suites. Their agent definitions enforce this; repeat it in the batch context.
- Fan out exactly as wide as the change surface justifies. Never pad the batch with areas the change does not touch.
- Subagents start blank. Each task item carries the change map (or a `local://` pointer to it) and its specific focus.

## Severity Scheme

| Severity | Meaning | Examples |
|---|---|---|
| P1 | Must fix before merge | Correctness bug, security hole, data loss, breaking change, race condition |
| P2 | Should fix | New contract without a test, convention violation with teeth, real maintainability debt |
| P3 | Optional | Nits, style preferences, speculative improvements |

Every P1/P2 finding must include a targeted verification command.

## Reviewer Roster

Core reviewers run on every review. Conditional reviewers run only when their trigger surface appears in the change map.

| Name | Agent | Trigger |
|---|---|---|
| SecurityReview | `review-security` | always |
| LogicReview | `review-logic` | always |
| ConformityReview | `review-conformity` | always |
| QualityReview | `review-quality` | always |
| TestReview | `review-tests` | always |
| ContractReview | `review-contracts` | public API, migration, config, or wire/event surface changed |
| DocsReview | `review-docs` | user-facing behavior, config, or feature changed |
| UiReview | `designer` (bundled) | UI/frontend files changed; task: point at changed UI files, ask for visual/UX/accessibility review |

## Workflow

### Phase 0 — Map the change surface (you, inline; never delegated)

Establish WHAT is under review before spawning anyone:

- PR: read `pr://<N>` for intent and discussion; diff base..head.
- Branch: `git log <base>..HEAD --oneline` and `git diff <base>...HEAD --stat`, then the full diff.
- Working tree: `git status` + `git diff`.

Build the change map:

1. Changed files grouped by subsystem.
2. Exported symbols added/changed/removed.
3. Callers of changed exported symbols (`lsp references`).
4. Surface triggers: migrations? public API? config/env? UI? user-facing behavior?

Write the map to `local://change-map.md` if it exceeds ~50 lines. Decide which roster areas trigger. Skipping an area requires a stated reason in the final report.

### Phase 1 — Fan out (exactly one `task` batch call)

Spawn ALL triggered reviewers in a SINGLE `tasks[]` batch, each with its roster `agent`. Never serialize reviewers across multiple calls.

Shared `context`:

```
# Goal
Deep review of <target>: <one-paragraph intent of the change>.
# Constraints
- READ-ONLY: no edits, no writes, no builds, no test-suite or gate runs.
- Report only what the diff touches or directly affects.
# Contract
- Change map: <inline map, or "read local://change-map.md">
- Return your structured findings per your output schema; severity per P1/P2/P3; P1/P2 include a verification command.
```

Each task item:

```
# Target
<files and symbols this reviewer owns, from the change map>
# Focus
<change-specific pointers: which hunks matter most for this area, cross-area boundaries to respect>
```

Attach this `outputSchema` to every item:

```json
{
"type": "object",
"required": ["summary", "findings"],
"properties": {
"summary": { "type": "string", "description": "2-3 sentence area verdict" },
"findings": {
"type": "array",
"items": {
"type": "object",
"required": ["severity", "confidence", "title", "location", "evidence", "recommendation"],
"properties": {
"severity": { "enum": ["P1", "P2", "P3"] },
"confidence": { "enum": ["high", "medium", "low"] },
"title": { "type": "string" },
"location": { "type": "string", "description": "file:line" },
"evidence": { "type": "string", "description": "quoted code + why it is wrong" },
"recommendation": { "type": "string" },
"verification": { "type": "string", "description": "targeted command; required for P1/P2" }
}
}
}
}
}
```

A reviewer that finds nothing returns empty `findings`. That is a valid result — do not respawn to force findings.

### Phase 2 — Synthesize (you)

1. Collect structured outputs from all reviewers.
2. Dedupe: same root cause from multiple areas → one finding, highest severity, note all reporting areas.
3. Spot-check every P1 by reading the cited code yourself. A false P1 erodes the report's trust.
4. Contradictions: reviewers stay `idle` after yielding — message them via `hub` (`send` with `await: true`) instead of respawning.
5. Drop low-confidence P3s unless they corroborate another finding.

### Phase 3 — Report

```
## Deep Review: <target>

### Verdict
merge | merge after P1 fixes | do not merge — one-sentence justification

### Findings
| # | Severity | Area | Location | Finding | Recommendation | Verification |
(severity-ordered, deduplicated)

### Coverage
Areas run / skipped + reasons. Reviewer disagreements and how resolved.

### Residual Risk
What static review cannot see: runtime behavior, external systems, perf under load.

### Open Questions
Low-confidence items and judgment calls needing a human.
```

## Guardrails

- NEVER delegate Phase 0 or Phase 2 — decomposition and adjudication stay with you.
- NEVER spawn a second wave to re-review covered ground; use `hub` follow-ups with the idle reviewers.
- If the change surface is tiny (< ~3 files, no API/schema/security surface), say so and review it yourself instead of fanning out.

## Model Routing (optional)

Reviewer agents inherit the session model by default. For a dedicated review model, add `model: "@review"` to each `.omp/agents/review-*.md` frontmatter and set `modelRoles.review` in `~/.omp/agent/config.yml`.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,6 @@ docs/phases/
docs/specs/
PROJECT-STATUS.md
.worktrees/

# Deep-review output, kept out of the tree
review_report.*.md
Loading