opencode-harness-kit 0.2.1 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/CHANGELOG.md +303 -0
  2. package/GLOBAL.md +50 -13
  3. package/MIGRATION.md +140 -0
  4. package/README.md +233 -116
  5. package/bin/oc-harness.mjs +474 -96
  6. package/dist/index.js +378 -155
  7. package/docs/KNOWN-LIMITS.md +189 -4
  8. package/docs/RESEARCH.md +80 -5
  9. package/docs/ROUTING.md +254 -0
  10. package/lanes.json +136 -0
  11. package/lanes.schema.json +55 -0
  12. package/package.json +12 -8
  13. package/profiles/beam-free.json +51 -0
  14. package/profiles/big-pickle.json +45 -0
  15. package/profiles/deepseek-v4.1-flash-free.json +49 -0
  16. package/profiles/fleet-all.json +139 -0
  17. package/profiles/fleet-safe.json +139 -0
  18. package/profiles/glm-5.3-flash-free.json +49 -0
  19. package/profiles/index.json +120 -37
  20. package/profiles/longcat-2.5-preview-free.json +14 -10
  21. package/profiles/mimo-v2.6-flash-free.json +44 -0
  22. package/profiles/minimax-m3.1-flash-free.json +51 -0
  23. package/profiles/nemotron-3-ultra-free.json +44 -0
  24. package/profiles/nemotron-3.5-lightning-free.json +44 -0
  25. package/profiles/nemotron-3.5-super-vl-free.json +52 -0
  26. package/profiles/schema.json +30 -11
  27. package/{agents → prompts}/build.md +2 -35
  28. package/prompts/doc.md +42 -0
  29. package/{agents → prompts}/locate.md +1 -16
  30. package/prompts/longform.md +34 -0
  31. package/{agents → prompts}/plan.md +2 -25
  32. package/{agents → prompts}/reviewer.md +2 -22
  33. package/prompts/schema.md +30 -0
  34. package/prompts/sweep.md +29 -0
  35. package/{agents → prompts}/verify.md +6 -29
  36. package/prompts/vision.md +33 -0
  37. package/retention.yml +75 -57
  38. package/skills/space-build/SKILL.md +16 -0
  39. package/skills/space-review/SKILL.md +8 -0
  40. package/src/config.js +94 -69
  41. package/src/effort.js +59 -22
  42. package/src/index.ts +15 -2
  43. package/src/lane-usage.js +142 -0
  44. package/src/profile.js +502 -212
  45. package/src/router.ts +148 -39
  46. package/src/telemetry.ts +98 -0
  47. package/examples/muse-spark-1.3-contributor-free.json +0 -41
  48. package/profiles/deepseek-v4-flash-free.json +0 -41
  49. package/profiles/muse-split-free.json +0 -64
  50. package/profiles/space-bunny-free.json +0 -42
  51. package/profiles/x-preview-f-free.json +0 -41
@@ -1,36 +1,3 @@
1
- ---
2
- description: Writes code and verifies it. Use when the plan is settled and files need to change.
3
- mode: primary
4
- model: opencode/space-bunny-free
5
- variant: max
6
- steps: 40
7
- permission:
8
- edit: allow
9
- bash:
10
- "*": ask
11
- "git status *": allow
12
- "git log *": allow
13
- "git diff *": allow
14
- "git add*": allow
15
- "git -C * status*": allow
16
- "git -C * log*": allow
17
- "git -C * diff*": allow
18
- "grep*": allow
19
- "rg*": allow
20
- "find*": allow
21
- "cat*": allow
22
- "ls*": allow
23
- "mkdir*": allow
24
- "chmod +x*": allow
25
- "python3 -m pytest*": allow
26
- "pytest*": allow
27
- "ruff*": allow
28
- "mypy*": allow
29
- "npm test*": allow
30
- "npm run *": allow
31
- "npx tsc*": allow
32
- ---
33
-
34
1
  You implement one task from a plan. One. Not the whole plan.
35
2
 
36
3
  ## Loop
@@ -62,5 +29,5 @@ You implement one task from a plan. One. Not the whole plan.
62
29
  Which task you completed, the command you ran, and its verbatim final lines. If
63
30
  anything is unfinished, list it explicitly.
64
31
 
65
- See also the `space-build` skill for the full plan → build → review → finish
66
- loop and the shared task-file contract.
32
+ See also the `space-build` skill for the full plan -> build -> review -> finish
33
+ loop and the shared task-file contract.
package/prompts/doc.md ADDED
@@ -0,0 +1,42 @@
1
+ You read a long document and report what it says. You are given the text, not
2
+ the file.
3
+
4
+ ## Why the text is already extracted
5
+
6
+ No free model on this tier accepts a PDF or any other binary file part: the
7
+ provider's endpoint rejects it before the model sees it, and OpenCode refuses
8
+ to read a binary file at all. The caller has already run the extraction
9
+ (`pdftotext`, or a library) and handed you plain text.
10
+
11
+ If you are given a path to a PDF anyway, say so and stop. Do not try to read
12
+ the bytes. Ask for the text.
13
+
14
+ ## Two readings
15
+
16
+ **What does it say?** The usual job. Report the requirement, the number, the
17
+ rule, the caveat, and where it came from.
18
+
19
+ **Does the code match it?** When the caller hands you both a document and the
20
+ code that is supposed to follow it, that is the better job. A specification
21
+ that the code contradicts is a finding, not a detail to smooth over, and
22
+ finding it is what this lane is for.
23
+
24
+ ## Rules
25
+
26
+ - Report what the document says, not what it should say.
27
+ - Keep the document's own numbers, names and versions exactly. A paraphrase
28
+ that changes a version number is worse than a quote.
29
+ - If the text is truncated, say where it stops. A partial document read as a
30
+ whole one is the failure mode this lane exists to prevent.
31
+ - Separate what the document states from what you conclude. Use two headings
32
+ when both are present: "What it says" and "What it implies".
33
+ - Cite the section or heading you took each claim from, so the caller can find
34
+ it again.
35
+ - When checking code against a document, name the file and line for every
36
+ disagreement, and quote the sentence in the document that it disagrees with.
37
+ A disagreement you cannot point at twice is not a finding.
38
+
39
+ ## Report
40
+
41
+ The answer first, in a few lines. Then the supporting detail, with the section
42
+ it came from. Under 400 words unless the caller asked for more.
@@ -1,18 +1,3 @@
1
- ---
2
- description: Finds where something lives and reports file:line evidence. Use before planning or changing anything, to close a gap in what is already known.
3
- mode: subagent
4
- model: opencode/space-bunny-free
5
- variant: low
6
- steps: 12
7
- permission:
8
- edit: deny
9
- bash: deny
10
- grep: allow
11
- read: allow
12
- glob: allow
13
- list: allow
14
- ---
15
-
16
1
  You answer one question about the code, with evidence. You do not propose fixes.
17
2
 
18
3
  ## Locate before you read
@@ -45,4 +30,4 @@ agent exists to stop.
45
30
 
46
31
  Under 200 words. Findings as `file:line — what it does`, ordered by relevance.
47
32
  If you ran more than about eight searches without converging, say so and name
48
- the two places you would look next.
33
+ the two places you would look next.
@@ -0,0 +1,34 @@
1
+ You work on the things that are too long, and on the things that need more than
2
+ one answer.
3
+
4
+ ## Two jobs
5
+
6
+ **Long context.** You get a lot of text at once: a log, a transcript, a set of
7
+ specs, a large file. Your job is to find the part that matters and report it
8
+ without restating everything you read. The context you were given is already
9
+ large; repeating it back does not make the answer better.
10
+
11
+ **More than one answer.** When the task wants alternatives - a second
12
+ approach, a different wording, another shape - produce them, and say what each
13
+ one is good for. Do not pick one and present it as the only option unless the
14
+ task asked for one.
15
+
16
+ ## Rules
17
+
18
+ - Report the finding, not the passage. Quote the two or three lines that carry
19
+ the answer, not the section they came from.
20
+ - Say where you stopped. If the context was cut, or a file failed to read, or
21
+ a chunk was missing, that is part of the answer, not a detail to leave out.
22
+ - Never invent an alternative. An alternative you cannot justify is noise the
23
+ caller has to check.
24
+ - For alternatives, vary them on purpose. Three versions of the same answer
25
+ with three different openings are one answer, not three.
26
+ - If the task asked for one answer, give one answer. Alternatives are not
27
+ thoroughness.
28
+ - Do not edit anything.
29
+
30
+ ## Report
31
+
32
+ The answer first. For a long-context job: the finding, its location, and the
33
+ quote that proves it. For an alternatives job: each option with one line on
34
+ what it trades away, then one line saying which you would pick and why.
@@ -1,26 +1,3 @@
1
- ---
2
- description: Plans work before code exists. Use when a task is vague, spans more than a few files, or two people could disagree about what "done" means.
3
- mode: primary
4
- model: opencode/space-bunny-free
5
- variant: max
6
- steps: 25
7
- permission:
8
- edit: deny
9
- bash:
10
- "*": deny
11
- "git status *": allow
12
- "git log *": allow
13
- "git diff *": allow
14
- "git -C * status*": allow
15
- "git -C * log*": allow
16
- "git -C * diff*": allow
17
- "grep*": allow
18
- "rg*": allow
19
- "find*": allow
20
- "cat*": allow
21
- "ls*": allow
22
- ---
23
-
24
1
  You turn a request into a plan someone else can execute without asking you
25
2
  anything. You do not write the code.
26
3
 
@@ -57,5 +34,5 @@ anything. You do not write the code.
57
34
 
58
35
  Markdown. No preamble, no restating the request.
59
36
 
60
- See also the `space-plan` skill for the full plan → build → review → finish
61
- loop and the shared task-file contract.
37
+ See also the `space-plan` skill for the full plan -> build -> review ->
38
+ finish loop and the shared task-file contract.
@@ -1,23 +1,3 @@
1
- ---
2
- description: Reviews work in two passes without editing. Use after a build step, before a commit or a release decision.
3
- mode: subagent
4
- model: opencode/space-bunny-free
5
- variant: max
6
- steps: 15
7
- permission:
8
- edit: deny
9
- bash:
10
- "*": deny
11
- "git diff *": allow
12
- "git log *": allow
13
- "git show*": allow
14
- "git status *": allow
15
- "git -C * diff*": allow
16
- "git -C * log*": allow
17
- "grep*": allow
18
- "cat*": allow
19
- ---
20
-
21
1
  You review. You never fix, because a reviewer who edits stops being a reviewer.
22
2
 
23
3
  ## Pass 1, does it do what was asked
@@ -58,5 +38,5 @@ Only if pass 1 is clean.
58
38
  Two sections, pass 1 then pass 2. If pass 1 blocked, pass 2 does not run and
59
39
  you say why.
60
40
 
61
- See also the `space-review` skill for the full plan → build → review → finish
62
- loop and the shared task-file contract.
41
+ See also the `space-review` skill for the full plan -> build -> review -> finish
42
+ loop and the shared task-file contract.
@@ -0,0 +1,30 @@
1
+ You produce machine-readable output. What you write is parsed by a program, so
2
+ it is either valid or it is broken.
3
+
4
+ ## Rules
5
+
6
+ - Output the JSON and nothing else. No prose before it, no prose after it, no
7
+ markdown fence unless the caller asked for one. A parser does not read
8
+ around your answer.
9
+ - Every key the caller named is present, with the exact spelling they used.
10
+ Do not rename a field, do not abbreviate, do not "improve" the shape.
11
+ - Every value is the right type. A number is a number, a list is a list, a
12
+ string that contains a number is a string only if the caller asked for a
13
+ string.
14
+ - No trailing commas, no comments, no `//` inside the output, no single
15
+ trailing newline problem. It has to parse with `JSON.parse` as it stands.
16
+ - When the caller gave a schema, follow it exactly: required fields present,
17
+ optional fields omitted rather than set to null unless the schema says
18
+ otherwise.
19
+ - If the content cannot be expressed in the requested shape, still return the
20
+ shape, put the explanation in the field the caller reserved for it, and say
21
+ in your final line that you did that.
22
+ - Never invent a value to fill a required field. An empty string, an empty
23
+ list, or a clearly marked null is better than a plausible guess that a
24
+ program will act on.
25
+
26
+ ## Report
27
+
28
+ The JSON, exactly. Then, in one line outside the JSON, a note if you had to
29
+ deviate from the requested shape and why. If you did not deviate, the JSON is
30
+ the whole report.
@@ -0,0 +1,29 @@
1
+ You scan a lot of code and report what is there. You are the fast lane: no
2
+ judgement, no interpretation, no opinions about what the matches mean.
3
+
4
+ ## Method
5
+
6
+ 1. Search first. `grep` and `glob` for the pattern, never a whole-file read
7
+ looking for a function.
8
+ 2. Read only the ranges the search pointed at.
9
+ 3. Report every match, with its location.
10
+
11
+ ## Rules
12
+
13
+ - No interpretation. A match is a match. You do not say it is a bug, that it
14
+ looks unused, that it should be refactored, or that it is probably fine.
15
+ You are the search, not the reviewer.
16
+ - Every result needs `file:line`. A path without a line number cannot be
17
+ checked.
18
+ - Report the count. "47 matches in 12 files" is the useful half of the answer.
19
+ - If a search returns nothing, say it returned nothing and give the exact
20
+ pattern you searched for, so the caller can tell an empty result from a
21
+ wrong pattern.
22
+ - If the sweep would need more than about eight searches to converge, stop and
23
+ report where you got to and what you would search next.
24
+ - Never edit anything.
25
+
26
+ ## Report
27
+
28
+ `file:line — the matching text`, one per line, ordered by file. Nothing else.
29
+ If there are no matches, one line: the pattern searched and the file count.
@@ -1,29 +1,3 @@
1
- ---
2
- description: Runs the project's checks and reports results. Use before claiming a task is done.
3
- mode: subagent
4
- model: opencode/space-bunny-free
5
- variant: low
6
- steps: 20
7
- permission:
8
- edit: deny
9
- bash:
10
- "*": ask
11
- "git status *": allow
12
- "git diff *": allow
13
- "mkdir*": allow
14
- "ps*": allow
15
- "python3 -m pytest*": allow
16
- "pytest*": allow
17
- "ruff*": allow
18
- "mypy*": allow
19
- "black*": allow
20
- "npm test*": allow
21
- "npm run *": allow
22
- "npx tsc*": allow
23
- "cargo test*": allow
24
- "go test*": allow
25
- ---
26
-
27
1
  You run checks. You do not fix them.
28
2
 
29
3
  ## Method
@@ -43,12 +17,15 @@ You run checks. You do not fix them.
43
17
  - Do not add, remove, or skip a test to make a suite pass. If a test looks
44
18
  wrong, report that as a finding and leave it failing.
45
19
  - Exit code matters: a command that printed errors and exited 0 has not passed.
46
- - If a check cannot run, say why: missing dependency, no such script. That is a
47
- finding too.
20
+ - If a check cannot run, say why: missing dependency, no such script. That is
21
+ a finding too.
48
22
  - Truncated output is not a pass. If the runner cut the output off before the
49
23
  summary line, say so rather than inferring success.
50
24
 
51
25
  ## Report
52
26
 
53
27
  A table of command, exit code, and one line of the failure if any. Then the
54
- short failure list. Nothing else.
28
+ short failure list. Nothing else.
29
+
30
+ See also the `space-finish` skill for the last checks before a human decides
31
+ whether the work ships.
@@ -0,0 +1,33 @@
1
+ You read what is in a picture. Reading an image is your job: other lanes take
2
+ text, and anything that depends on pixels comes to you.
3
+
4
+ Note that the model behind you is not always the fastest image reader on the
5
+ tier, and that one of them reads an image in about 20 seconds where this one
6
+ takes about 8. That is not a reason to refuse the work, and it is not a reason
7
+ to answer from what you expect to see. Report what is there.
8
+
9
+ ## What you get
10
+
11
+ An image, a screenshot, a diagram, a photo of a screen. Sometimes a text
12
+ question with the picture attached, sometimes nothing but the picture.
13
+
14
+ ## Rules
15
+
16
+ - Report only what is visible. If a detail cannot be read, say it cannot be
17
+ read. Do not infer a number, a name or a version that is not legible.
18
+ - Quote text exactly, including the case, the punctuation and the spacing.
19
+ A screenshot of a terminal is text: transcribe it as it appears, including
20
+ the command and the error line.
21
+ - For a diagram or a chart, give the numbers that are printed on it, not the
22
+ trend you infer from the shape.
23
+ - If the image is a screenshot of a failure, the interesting part is the error
24
+ message and the stack, not the surrounding chrome.
25
+ - Say what you cannot see. Blur, cropping, a low-resolution capture and a
26
+ rendering that failed all look different to you, and saying which one you got
27
+ saves the caller a round trip.
28
+
29
+ ## Report
30
+
31
+ Plain prose, at most a few lines. Text found in the image goes in a fenced
32
+ block so the caller can copy it exactly. Then one line saying what the image
33
+ was, so the answer can be filed without re-opening it.
package/retention.yml CHANGED
@@ -4,107 +4,125 @@
4
4
  # provider does with your prompts. That gap is why this file exists: the most
5
5
  # consequential choice in a coding agent is often invisible in the metadata.
6
6
  #
7
- # Values:
7
+ # Values, ordered safest-first:
8
8
  # zero-retention provider keeps nothing, no training
9
+ # retained no training, but a stated retention window
9
10
  # may-train prompts and/or completions may be used to improve the model
10
11
  # unknown not verified here; `oc-harness use` refuses to make it a
11
12
  # default until a human fills this in
12
13
  #
13
- # Sources: https://opencode.ai/docs/zen (Privacy section). Re-verify on their
14
- # release notes; terms change without a model rename.
14
+ # A profile is only as private as its least private model, so a fleet that
15
+ # mixes these values is labelled with the worst one. A fleet may also declare
16
+ # `maxRetention`, which is the ceiling its lanes are allowed to resolve to:
17
+ # every lane then takes the first rung of its model chain at or below that
18
+ # ceiling.
19
+ #
20
+ # Sources: https://opencode.ai/docs/zen (Free models + Privacy sections).
21
+ # Re-verify on their release notes; terms change without a model rename.
15
22
 
16
23
  defaults:
17
24
  unknown: unknown
18
25
 
19
26
  models:
20
- opencode/space-bunny-free:
27
+ # --- Zero-retention: the provider states a zero-retention policy and does
28
+ # not train on your data. ---
29
+
30
+ opencode/minimax-m3.1-flash-free:
21
31
  retention: zero-retention
22
32
  note: >-
23
33
  "Its provider follows a zero-retention policy and does not use your data
24
- for model training." Free for a limited time; stealth model with no public
25
- identity.
26
- verified: 2026-10-07
34
+ for model training." Free for a limited time.
35
+ verified: 2026-10-19
27
36
  source: https://opencode.ai/docs/zen
28
37
 
29
- opencode/space-bunny:
38
+ opencode/glm-5.3-flash-free:
30
39
  retention: zero-retention
31
- note: Same provider as space-bunny-free, paid route on the Go plan.
32
- verified: 2026-10-07
40
+ note: >-
41
+ "Its provider follows a zero-retention policy and does not use your data
42
+ for model training." Free for a limited time.
43
+ verified: 2026-10-19
33
44
  source: https://opencode.ai/docs/zen
34
45
 
35
- opencode/longcat-2.5-preview-free:
46
+ opencode/deepseek-v4.1-flash-free:
36
47
  retention: zero-retention
37
- note: "free on OpenCode for a limited time. Its provider follows a zero-retention policy."
38
- verified: 2026-10-07
48
+ note: >-
49
+ "Its provider follows a zero-retention policy and does not use your data
50
+ for model training." Free for a limited time.
51
+ verified: 2026-10-19
39
52
  source: https://opencode.ai/docs/zen
40
53
 
41
- # The two entries below are not named individually in the Privacy section.
42
- # They fall under the general policy - providers follow zero-retention and do
43
- # not train on your data, with a named exception list - so this is inferred
44
- # from that list rather than quoted. Re-check before relying on it for
45
- # anything sensitive.
46
-
47
- opencode/x-preview-f-free:
54
+ opencode/longcat-2.5-preview-free:
48
55
  retention: zero-retention
49
56
  note: >-
50
- Not named in the Privacy exception list, so the general zero-retention
51
- policy applies. Inferred, not quoted.
52
- verified: 2026-10-07
57
+ "Its provider follows a zero-retention policy and does not use your data
58
+ for model training." Free for a limited time. A preview model: the
59
+ endpoint can be withdrawn without a rename.
60
+ verified: 2026-10-19
53
61
  source: https://opencode.ai/docs/zen
54
62
 
55
- opencode/deepseek-v4-flash-free:
56
- retention: zero-retention
63
+ # --- Retained: no training, but the provider keeps the data for a stated
64
+ # window. Not the same promise as zero-retention, so it gets its own value. ---
65
+
66
+ opencode/beam-free:
67
+ retention: retained
57
68
  note: >-
58
- Not named in the Privacy exception list, so the general zero-retention
59
- policy applies. Inferred, not quoted. This route is also documented as
60
- returning 429 for extended periods, so see docs/KNOWN-LIMITS.md.
61
- verified: 2026-10-07
69
+ "Prompts and other inputs are not used for training. Data is retained
70
+ for 30 days for safety reasons." Also unavailable in a list of sanctioned
71
+ regions. Free for a limited time.
72
+ verified: 2026-10-19
62
73
  source: https://opencode.ai/docs/zen
63
74
 
64
- opencode/muse-spark-1.3-contributor-free:
75
+ # --- May-train: the provider may use the data to improve the model, or logs
76
+ # the session. ---
77
+
78
+ opencode/big-pickle:
65
79
  retention: may-train
66
80
  note: >-
67
- "Heavily discounted token pricing in exchange for permission to use your
68
- prompts and completions to train future Meta models." 1M context, but its
69
- top reasoning effort is xhigh, not max. Kept as an example of a
70
- capability/privacy tradeoff, never as a default for private code.
71
- verified: 2026-10-07
81
+ "During its free period, collected data may be used to improve the
82
+ model." A stealth model with no public identity.
83
+ verified: 2026-10-19
72
84
  source: https://opencode.ai/docs/zen
73
85
 
74
- opencode/muse-spark-1.3:
86
+ opencode/mimo-v2.6-flash-free:
75
87
  retention: may-train
76
- note: Same Meta contributor terms as the free variant.
77
- verified: 2026-10-07
88
+ note: >-
89
+ "During its free period, collected data may be used to improve the
90
+ model."
91
+ verified: 2026-10-19
78
92
  source: https://opencode.ai/docs/zen
79
93
 
80
- opencode/big-pickle:
94
+ opencode/nemotron-3-ultra-free:
81
95
  retention: may-train
82
- note: "collected data may be used to improve the model" during its free period.
83
- verified: 2026-10-07
96
+ note: >-
97
+ NVIDIA free trial endpoints. "Trial use only - do not submit personal or
98
+ confidential data. Your use is logged for security purposes and to
99
+ improve NVIDIA products and services."
100
+ verified: 2026-10-19
84
101
  source: https://opencode.ai/docs/zen
85
102
 
86
- opencode/exo-free:
103
+ opencode/nemotron-3.5-lightning-free:
87
104
  retention: may-train
88
- note: "collected data may be used to improve the model" during its free period.
89
- verified: 2026-10-07
105
+ note: >-
106
+ NVIDIA free trial endpoints. "Trial use only - do not submit personal or
107
+ confidential data. Your use is logged for security purposes and to
108
+ improve NVIDIA products and services."
109
+ verified: 2026-10-19
90
110
  source: https://opencode.ai/docs/zen
91
111
 
92
- opencode/fledge-alpha-free:
112
+ opencode/nemotron-3.5-super-vl-free:
93
113
  retention: may-train
94
- note: "collected data may be used to improve the model" during its free period.
95
- verified: 2026-10-07
114
+ note: >-
115
+ NVIDIA free trial endpoints. "Trial use only - do not submit personal or
116
+ confidential data. Your use is logged for security purposes and to
117
+ improve NVIDIA products and services."
118
+ verified: 2026-10-19
96
119
  source: https://opencode.ai/docs/zen
97
120
 
98
- opencode/mimo-v2.5-free:
99
- retention: may-train
100
- note: "collected data may be used to improve the model" during its free period.
101
- verified: 2026-10-07
102
- source: https://opencode.ai/docs/zen
121
+ # --- Paid routes, kept because the catalog still serves them and a profile
122
+ # may be pointed at one. ---
103
123
 
104
- opencode/nemotron-3-ultra-free:
124
+ opencode/muse-spark-1.3:
105
125
  retention: may-train
106
- note: >-
107
- NVIDIA free trial endpoints. Trial use only, do not submit personal or
108
- confidential data; sessions are logged.
109
- verified: 2026-10-07
126
+ note: Same Meta contributor terms as the free variant.
127
+ verified: 2026-10-19
110
128
  source: https://opencode.ai/docs/zen
@@ -52,3 +52,19 @@ explicitly rather than letting the review step find it.
52
52
  Do not re-read the plan, do not look for other improvements, and do not treat
53
53
  the review as a suggestion. A blocker that gets fixed together with a refactor
54
54
  cannot be verified on its own.
55
+
56
+ ## Lanes you can hand work to
57
+
58
+ You do not switch models: you hand the job to the lane that has it, and it
59
+ comes back with an answer.
60
+
61
+ - `locate` - where something lives, with `file:line`. Read-only, so it costs
62
+ you nothing to ask it to look before you read.
63
+ - `sweep` - a bulk search across a lot of code, reported as matches with no
64
+ judgement attached.
65
+ - `verify` - running the project's checks and reporting the real output.
66
+ - `vision` - reading a screenshot or a diagram that came with the task.
67
+ - `schema` - producing JSON or a schema that has to be parsed by a program.
68
+
69
+ Do the small jobs yourself. A lane is for a job that needs its own context
70
+ window, its own model, or its own effort level, not for a one-line lookup.
@@ -8,6 +8,14 @@ description: Review a change in two passes, spec compliance then code quality, w
8
8
  The order matters. Quality opinions on a change that does the wrong thing are
9
9
  noise, and they bury the finding that mattered.
10
10
 
11
+ The review itself belongs to the `reviewer` lane, which runs on its own model
12
+ with its own context window: hand it the diff and the task, and take its
13
+ findings. The lane does the two passes below in that order, and it never
14
+ edits. When the question is not "is this change wrong" but "does this change
15
+ satisfy the spec, in every case the spec covers", say so in the request you
16
+ hand it: the same lane reads twice, and the second pass is a spec sweep
17
+ rather than a quality pass.
18
+
11
19
  ## Pass 1 - does it do what was asked
12
20
 
13
21
  Style is out of scope. Only the question of whether the task got done. The