opencode-harness-kit 0.2.1 → 0.3.3
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.
- package/CHANGELOG.md +301 -0
- package/GLOBAL.md +50 -13
- package/MIGRATION.md +140 -0
- package/README.md +233 -116
- package/bin/oc-harness.mjs +474 -96
- package/dist/index.js +378 -155
- package/docs/KNOWN-LIMITS.md +189 -4
- package/docs/RESEARCH.md +80 -5
- package/docs/ROUTING.md +254 -0
- package/lanes.json +136 -0
- package/lanes.schema.json +55 -0
- package/package.json +12 -8
- package/profiles/beam-free.json +51 -0
- package/profiles/big-pickle.json +45 -0
- package/profiles/deepseek-v4.1-flash-free.json +49 -0
- package/profiles/fleet-all.json +139 -0
- package/profiles/fleet-safe.json +139 -0
- package/profiles/glm-5.3-flash-free.json +49 -0
- package/profiles/index.json +120 -37
- package/profiles/longcat-2.5-preview-free.json +14 -10
- package/profiles/mimo-v2.6-flash-free.json +44 -0
- package/profiles/minimax-m3.1-flash-free.json +51 -0
- package/profiles/nemotron-3-ultra-free.json +44 -0
- package/profiles/nemotron-3.5-lightning-free.json +44 -0
- package/profiles/nemotron-3.5-super-vl-free.json +52 -0
- package/profiles/schema.json +30 -11
- package/{agents → prompts}/build.md +2 -35
- package/prompts/doc.md +42 -0
- package/{agents → prompts}/locate.md +1 -16
- package/prompts/longform.md +34 -0
- package/{agents → prompts}/plan.md +2 -25
- package/{agents → prompts}/reviewer.md +2 -22
- package/prompts/schema.md +30 -0
- package/prompts/sweep.md +29 -0
- package/{agents → prompts}/verify.md +6 -29
- package/prompts/vision.md +33 -0
- package/retention.yml +75 -57
- package/skills/space-build/SKILL.md +16 -0
- package/skills/space-review/SKILL.md +8 -0
- package/src/config.js +94 -69
- package/src/effort.js +59 -22
- package/src/index.ts +15 -2
- package/src/lane-usage.js +142 -0
- package/src/profile.js +502 -212
- package/src/router.ts +148 -39
- package/src/telemetry.ts +98 -0
- package/examples/muse-spark-1.3-contributor-free.json +0 -41
- package/profiles/deepseek-v4-flash-free.json +0 -41
- package/profiles/muse-split-free.json +0 -64
- package/profiles/space-bunny-free.json +0 -42
- 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
|
|
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
|
|
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
|
|
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.
|
package/prompts/sweep.md
ADDED
|
@@ -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
|
|
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
|
-
#
|
|
14
|
-
#
|
|
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
|
-
|
|
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
|
|
25
|
-
|
|
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/
|
|
38
|
+
opencode/glm-5.3-flash-free:
|
|
30
39
|
retention: zero-retention
|
|
31
|
-
note:
|
|
32
|
-
|
|
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/
|
|
46
|
+
opencode/deepseek-v4.1-flash-free:
|
|
36
47
|
retention: zero-retention
|
|
37
|
-
note:
|
|
38
|
-
|
|
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
|
-
|
|
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
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
-
|
|
56
|
-
|
|
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
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
verified: 2026-10-
|
|
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
|
-
|
|
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
|
-
"
|
|
68
|
-
|
|
69
|
-
|
|
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/
|
|
86
|
+
opencode/mimo-v2.6-flash-free:
|
|
75
87
|
retention: may-train
|
|
76
|
-
note:
|
|
77
|
-
|
|
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/
|
|
94
|
+
opencode/nemotron-3-ultra-free:
|
|
81
95
|
retention: may-train
|
|
82
|
-
note:
|
|
83
|
-
|
|
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/
|
|
103
|
+
opencode/nemotron-3.5-lightning-free:
|
|
87
104
|
retention: may-train
|
|
88
|
-
note:
|
|
89
|
-
|
|
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/
|
|
112
|
+
opencode/nemotron-3.5-super-vl-free:
|
|
93
113
|
retention: may-train
|
|
94
|
-
note:
|
|
95
|
-
|
|
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
|
-
|
|
99
|
-
|
|
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/
|
|
124
|
+
opencode/muse-spark-1.3:
|
|
105
125
|
retention: may-train
|
|
106
|
-
note:
|
|
107
|
-
|
|
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
|