@r1z4x/tezgah 1.0.0 → 1.1.0
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 +71 -1
- package/MANIFEST +8 -0
- package/bin/tezgah-agents +10 -1
- package/bin/tezgah-docs +1 -1
- package/bin/tezgah-doctor +11 -0
- package/bin/tezgah-research +31 -14
- package/bin/tezgah-setup +154 -29
- package/bin/tezgah-skill +59 -0
- package/bin/tezgah-skill.py +59 -0
- package/bin/tezgah-status +62 -1
- package/bin/tezgah-triage +5 -3
- package/docs/README.md +1 -0
- package/docs/architecture.md +5 -2
- package/docs/citations-baseline.json +1 -1
- package/docs/clarity-baseline.json +9 -9
- package/docs/contract.md +68 -26
- package/docs/environment.md +6 -3
- package/docs/evidence.md +7 -0
- package/docs/gate.md +13 -7
- package/docs/glossary.md +1 -1
- package/docs/hosts.md +48 -1
- package/docs/index.json +29 -1
- package/docs/judge.md +61 -55
- package/docs/models.md +14 -8
- package/docs/operations.md +10 -5
- package/docs/orca.md +126 -0
- package/docs/research.md +38 -3
- package/docs/skills.md +74 -0
- package/docs/status-line.md +3 -1
- package/docs/testing.md +33 -21
- package/docs/vision.md +12 -8
- package/hooks/projects-pretooluse.py +17 -5
- package/hooks/tezgah_agents.py +135 -13
- package/hooks/tezgah_components.py +3 -0
- package/hooks/tezgah_context.py +65 -22
- package/hooks/tezgah_gate.py +133 -17
- package/hooks/tezgah_integrity.py +60 -13
- package/hooks/tezgah_judge.py +239 -56
- package/hooks/tezgah_models.py +41 -5
- package/hooks/tezgah_orca.py +144 -0
- package/hooks/tezgah_paths.py +40 -6
- package/hooks/tezgah_policy.py +109 -35
- package/hooks/tezgah_research.py +104 -8
- package/hooks/tezgah_skill_pick.py +459 -8
- package/hooks/tezgah_stack.py +382 -0
- package/hooks/tezgah_stopspec.py +2 -2
- package/hosts/codex/hook.py +7 -1
- package/hosts/cursor/hook.py +7 -4
- package/hosts/omp/hook.py +12 -6
- package/hosts/omp/tezgah-hook.ts.in +20 -7
- package/hosts/opencode/plugins/tezgah.js +18 -9
- package/output-styles/tezgah.md +34 -19
- package/package.json +1 -1
- package/skills/i-have-adhd/SKILL.md +2 -2
- package/skills/research/SKILL.md +60 -17
- package/skills/tezgah-contract/SKILL.md +55 -13
package/output-styles/tezgah.md
CHANGED
|
@@ -25,27 +25,40 @@ it - no apology theater, no self-justifying phrasing.
|
|
|
25
25
|
**Ponytail (minimal code).** Laziest solution that works: YAGNI -> reuse an
|
|
26
26
|
existing helper -> stdlib -> native platform feature -> installed dependency ->
|
|
27
27
|
one line -> minimum code. No unrequested abstractions, no scaffolding "for
|
|
28
|
-
later", shortest working diff. Trace the
|
|
29
|
-
simplify away validation, error handling,
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
28
|
+
later", deletion over addition, fewest files, shortest working diff. Trace the
|
|
29
|
+
problem fully before climbing; never simplify away validation, error handling,
|
|
30
|
+
security, accessibility or anything requested, and build the full version
|
|
31
|
+
without re-arguing when the user insists. Bug fix = root cause where all
|
|
32
|
+
callers route through. A deliberate corner cut gets a `ponytail:` comment
|
|
33
|
+
naming the ceiling. Non-trivial logic leaves ONE runnable check (an assert
|
|
34
|
+
self-check or one small test); a one-liner needs none. A complex ask ships the
|
|
35
|
+
lazy version and names the fuller one in the same reply instead of stalling.
|
|
36
|
+
Reply: code first, then at most three lines - what was skipped, when to add it.
|
|
37
|
+
In force from the first turn; levels lite|full|ultra are set with `tezgah-pony`
|
|
38
|
+
and ride the per-turn reminder when not `full`; read the full `ponytail` skill
|
|
39
|
+
from the router for the level table and examples. Off: "stop ponytail".
|
|
35
40
|
|
|
36
41
|
**Output shape: ADHD-friendly.** The answer or the next action is on the first
|
|
37
|
-
line
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
42
|
+
line - a command, path, snippet or the decision itself, never context or the
|
|
43
|
+
question restated - prose after it. Multi-step work is a numbered list, one
|
|
44
|
+
bounded action per step, and while it is in flight its position is restated in
|
|
45
|
+
one line - the todo list is that source, never re-narrate the plan. End with one
|
|
46
|
+
concrete next step. Finish the issue in hand before raising a second one; an
|
|
47
|
+
error states location, cause and fix with no drama, naming a cause only when the
|
|
48
|
+
evidence identifies it (else what is known and what would confirm it); after a
|
|
49
|
+
change say what now works. A list shows at most five items, ranked, the rest
|
|
50
|
+
kept in reserve rather than dropped - presentation only, never the analysis. An
|
|
43
51
|
estimate is in concrete units and marked as an estimate, never presented as a
|
|
44
52
|
measurement. No preamble, no recap, no closer, and a question the reader raises
|
|
45
|
-
mid-work is answered rather than deferred as the second issue.
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
the
|
|
53
|
+
mid-work is answered rather than deferred as the second issue. Break the shape
|
|
54
|
+
only where it would delete the answer: an explanation runs as long as it needs,
|
|
55
|
+
with headers; an options question gets two to four ranked options,
|
|
56
|
+
recommendation first; after three "still broken" turns, name the suspect
|
|
57
|
+
assumption and ask one diagnostic question. Before sending, delete an opening
|
|
58
|
+
sentence that announces, a closing one that recaps or asks "anything else?", any
|
|
59
|
+
by-the-way sidebar and any hedge that carries no real uncertainty. In force from
|
|
60
|
+
the first answer; read the full `i-have-adhd` skill from the router for the
|
|
61
|
+
examples. Off: `tezgah-adhd off`, or the repo's `.no-adhd`.
|
|
49
62
|
|
|
50
63
|
**Deliver the whole ask; never the shortcut.** The request defines the
|
|
51
64
|
deliverable: every named item is in scope until the user says otherwise, and the
|
|
@@ -118,7 +131,9 @@ Never install, upgrade, restart or kill anything for tezgah, and never open an
|
|
|
118
131
|
issue for one of its tools mid-session. Name a missing capability in one line,
|
|
119
132
|
use the documented fallback (grep/find, or the second opinion skipped), and carry
|
|
120
133
|
on with the task in hand. Tezgah maintenance is in scope when the user asks for
|
|
121
|
-
it, or when the repo IS the tezgah checkout.
|
|
134
|
+
it, or when the repo IS the tezgah checkout. Before working a topic an
|
|
135
|
+
installed skill covers, run `tezgah-skill <words>` and read only the range it
|
|
136
|
+
returns.
|
|
122
137
|
|
|
123
138
|
**Workspace: `.tezgah/` only.** Every per-project tezgah artifact - plans,
|
|
124
139
|
research lines, analysis, lessons - lives under `<repo>/.tezgah/`, which the
|
|
@@ -139,4 +154,4 @@ rule), `workspace-off` (the root plans/research/analysis refusal),
|
|
|
139
154
|
per-repo `.no-ponytail`, `.no-adhd`, `.no-graph`, `.no-lessons`.
|
|
140
155
|
The ponytail intensity level is not a switch: `tezgah-pony lite|full|ultra`.
|
|
141
156
|
|
|
142
|
-
**On-demand rules (armed when the task class matches; full text in the `tezgah-contract` skill).** Spec-first for an underspecified or quality-only ask. A second opinion before a call that is hard to reverse or that one model would answer with unearned confidence. OpenResearch routing for research. Product analysis is a five-axis evidence task - value, usability (the running app, not the source), feasibility (a cited `path:line`), competition, and keep/fix/cut/bet triage - with one named evidence class per finding. The code graph for "who calls X" and "what breaks if Z changes". The design floor a UI turn is judged against is `.tezgah/design-contract.md`: `tezgah-design derive` writes it from the repository's own tokens, `tezgah-design check` measures a change against it, and the `design-contract` skill owns its shape.
|
|
157
|
+
**On-demand rules (armed when the task class matches; full text in the `tezgah-contract` skill).** Spec-first for an underspecified or quality-only ask. A second opinion before a call that is hard to reverse or that one model would answer with unearned confidence. OpenResearch routing for research. Product analysis is a five-axis evidence task - value, usability (the running app, not the source), feasibility (a cited `path:line`), competition, and keep/fix/cut/bet triage - with one named evidence class per finding. The code graph for "who calls X" and "what breaks if Z changes". Two or more independent items fan out to parallel subagents in one message, one git worktree per writing slice. The design floor a UI turn is judged against is `.tezgah/design-contract.md`: `tezgah-design derive` writes it from the repository's own tokens, `tezgah-design check` measures a change against it, and the `design-contract` skill owns its shape.
|
package/package.json
CHANGED
|
@@ -34,8 +34,8 @@ whether they still apply, they do.
|
|
|
34
34
|
|
|
35
35
|
Off: the `adhd-off` kill switch (`~/.config/tezgah/adhd-off`), a repo's
|
|
36
36
|
`.no-adhd` mark, or the user saying "stop adhd mode" / "normal mode". The
|
|
37
|
-
always-on text carries
|
|
38
|
-
|
|
37
|
+
always-on text carries every rule below in compressed form from the first turn
|
|
38
|
+
of a session; this file adds the reasoning and the worked examples.
|
|
39
39
|
|
|
40
40
|
## What changes about reading
|
|
41
41
|
|
package/skills/research/SKILL.md
CHANGED
|
@@ -22,11 +22,44 @@ evidence survives the session that produced it: the state on disk, the protocol
|
|
|
22
22
|
committed before the run, the claims with their falsification criteria, and the
|
|
23
23
|
review that decided what the evidence actually supports.
|
|
24
24
|
|
|
25
|
+
## Scope and method: answer the question asked
|
|
26
|
+
|
|
27
|
+
Three ways a line goes wrong before any rule below can catch it: it turns a
|
|
28
|
+
question into metrics, it grows past what was asked, and it wanders into a topic
|
|
29
|
+
nobody asked about. So before anything else:
|
|
30
|
+
|
|
31
|
+
1. **Restate the question verbatim** (`--ask "<the user's words>"`) and write
|
|
32
|
+
what is in scope and what is out (`--in "<covered>"` per item, `--out "<left
|
|
33
|
+
alone>"` per item; state.json `scope`). The in-scope items are `S1`, `S2`, ...
|
|
34
|
+
in order. Nothing is added to the list the user did not ask for.
|
|
35
|
+
2. **Pick the method from the question.** A qualitative, conceptual or reference
|
|
36
|
+
question - "what does X say", "how does Y work", "which sources support Z" - is
|
|
37
|
+
`--method qualitative`: a source review, no metric, no experiment, no orx
|
|
38
|
+
experiment tree. A question whose answer is a number or a comparison of
|
|
39
|
+
numbers is `--method measured`, and only then does the evaluation lock, the
|
|
40
|
+
protocol and the experiment tree below apply. `check` refuses a qualitative
|
|
41
|
+
line that records results, and a rules-5 line past `bootstrap` with no scope or
|
|
42
|
+
method.
|
|
43
|
+
3. **A plain factual or reference question gets no line** (`--tier quick` is
|
|
44
|
+
refused): answer it in the reply from the primary source, cited, with its
|
|
45
|
+
confidence.
|
|
46
|
+
4. **Every finding traces to an in-scope item.** A claim's `trace` names its
|
|
47
|
+
`S<n>` (or the item's text); `claim` and `check` refuse one that names none. A
|
|
48
|
+
finding that answers nothing asked is dropped; a tangent worth having is one
|
|
49
|
+
line under `## Open questions` for the user to pick, never a section of the
|
|
50
|
+
report.
|
|
51
|
+
5. **Depth is the primary source, not breadth.** Read the spec, the paper, the
|
|
52
|
+
code or the vendor's own documentation itself, cite it in the finding, and
|
|
53
|
+
state a confidence (high, medium or low, and the reason). A summary of other
|
|
54
|
+
summaries, or a finding with no source, is not an answer.
|
|
55
|
+
|
|
25
56
|
## The engine: OpenResearch
|
|
26
57
|
|
|
27
58
|
Execution goes through the `orx` CLI when it is installed, never ad-hoc
|
|
28
|
-
scripting
|
|
29
|
-
|
|
59
|
+
scripting. A qualitative line uses its literature commands (`orx discover`,
|
|
60
|
+
`orx paper`, the `orx skill lit-review` module). A measured line also uses its
|
|
61
|
+
experiment tree, and there its cardinal rules are not style preferences -
|
|
62
|
+
breaking one silently invalidates the run:
|
|
30
63
|
|
|
31
64
|
- never edit a node once a run has answered it; branch a child instead,
|
|
32
65
|
- the run command and environment are a fixed contract identical on every node,
|
|
@@ -34,7 +67,8 @@ silently invalidates the run:
|
|
|
34
67
|
- grow the experiment tree downward, not sideways.
|
|
35
68
|
|
|
36
69
|
Load its manual before driving it: `orx skill`, then the module for the step
|
|
37
|
-
(`orx skill
|
|
70
|
+
(`orx skill lit-review` for sources; `orx skill experiment-tree` and
|
|
71
|
+
`orx skill evidence` for a measured line).
|
|
38
72
|
Local runs need no login; managed compute does - ask the user to run `orx login`.
|
|
39
73
|
If `orx` is absent, say the research tooling is unavailable and do not improvise
|
|
40
74
|
its protocol; the workspace below still applies to whatever you run instead.
|
|
@@ -48,10 +82,10 @@ One directory per research line, `<repo>/.tezgah/research/<slug>/`:
|
|
|
48
82
|
|
|
49
83
|
| Path | What it holds |
|
|
50
84
|
|---|---|
|
|
51
|
-
| `state.json` | the question, phase, direction, the locked evaluation (`metric`, `baseline`, `locked_at`, optional `environment`, and the optional two-gate pair `capability_tolerance` + `counter_metric`), the hypothesis list, `rules` (the rule set the line was opened under), `deliverable` (`kind`: design, plan, analysis, code or finding; `path`; `ask`, the ask's items one per entry; `min_variants`), and `supersedes` when it is a new version of an older line |
|
|
85
|
+
| `state.json` | the question, phase, direction, `method` (`qualitative` or `measured`) and `scope` (`in` and `out`, each a list; the in-scope items are `S1`, `S2`, ...), the locked evaluation of a measured line (`metric`, `baseline`, `locked_at`, optional `environment`, and the optional two-gate pair `capability_tolerance` + `counter_metric`), the hypothesis list, `rules` (the rule set the line was opened under), `deliverable` (`kind`: design, plan, analysis, code or finding; `path`; `ask`, the ask's items one per entry; `min_variants`), and `supersedes` when it is a new version of an older line |
|
|
52
86
|
| `log.md` | the decision timeline: one line per decision, experiment, dead end or pivot, with the evidence that drove it |
|
|
53
87
|
| `findings.md` | `## What we know`, `## Patterns`, `## Lessons`, `## Open questions` |
|
|
54
|
-
| `claims.jsonl` | one claim per line: `statement`, `status`, `provenance`, `kind`, `falsification`, `proof`, `dependencies`, `scope` (what the claim's numbers were measured on, and it may not be wider than the rows it rests on), and `supersedes` when the claim replaces an earlier one - recorded with `tezgah-research claim <slug>`, never by editing the file |
|
|
88
|
+
| `claims.jsonl` | one claim per line: `statement`, `status`, `provenance`, `kind`, `falsification`, `proof`, `dependencies`, `trace` (the in-scope item it answers, `S<n>`, required from rules 5), `scope` (what the claim's numbers were measured on, and it may not be wider than the rows it rests on), and `supersedes` when the claim replaces an earlier one - recorded with `tezgah-research claim <slug>`, never by editing the file |
|
|
55
89
|
| `experiments/<hypothesis>/` | `protocol.md`, `results.jsonl` (one JSON object per row, each carrying its `source`, its `scope` - what the numbers were measured on - and, when that scope is `fixture`, the `fixture` description of the input that was generated), `analysis.md`, and `raw/<runId>.log` for a run read back from the engine |
|
|
56
90
|
| `literature/` | one file per source, saved when you read it, not later, and each named by its row in `literature/INDEX.jsonl` - every file under it, at any depth and of any extension, is a source the index names |
|
|
57
91
|
| `decisions/<id>/` | one comparison of the deliverable's variants: `criteria.json`, `variants.jsonl`, `comparison.jsonl` and `decision.md` - see "Variants" below |
|
|
@@ -79,7 +113,8 @@ Scaffold and check it with the CLI (`~/.config/tezgah/bin/tezgah-research`, or
|
|
|
79
113
|
`bin/tezgah-research` in the checkout):
|
|
80
114
|
|
|
81
115
|
```sh
|
|
82
|
-
~/.config/tezgah/bin/tezgah-research init my-line --ask "<the user's words>" --question "does X hold under Y?"
|
|
116
|
+
~/.config/tezgah/bin/tezgah-research init my-line --ask "<the user's words>" --question "does X hold under Y?" \
|
|
117
|
+
--method measured --in "X under Y" --out "X under Z"
|
|
83
118
|
~/.config/tezgah/bin/tezgah-research commit my-line "<message>" # commit in .tezgah's repo
|
|
84
119
|
~/.config/tezgah/bin/tezgah-research check # open lines + done/ seals; 0 clean, 1 broken rule, 2 misuse
|
|
85
120
|
~/.config/tezgah/bin/tezgah-research check --all-lines # every line in full, done/ included
|
|
@@ -220,9 +255,11 @@ rules the domain library enforces on a compiled artifact apply here:
|
|
|
220
255
|
|
|
221
256
|
**Bootstrap.** Search the literature with more than one source - `orx discover
|
|
222
257
|
keyword|embedding|openalex "<query>"` first, `orx paper <id>` to read one (the
|
|
223
|
-
`orx skill lit-review` module is the procedure) -
|
|
224
|
-
to `literature/` as you go
|
|
225
|
-
|
|
258
|
+
`orx skill lit-review` module is the procedure) - for the in-scope items only,
|
|
259
|
+
and save every source to `literature/` as you go. A qualitative line stops here
|
|
260
|
+
and answers from those sources. A measured line identifies the gap, forms
|
|
261
|
+
testable hypotheses about the in-scope items (see Ideation below), and locks the
|
|
262
|
+
evaluation before running anything: the metric, the
|
|
226
263
|
baseline, the threshold. Write it into `state.json` and commit it before the first
|
|
227
264
|
results row - a criterion chosen after seeing results is not a criterion, and
|
|
228
265
|
`check` refuses a line whose first commit holding a metric and a baseline does not
|
|
@@ -377,7 +414,9 @@ Pick the move that matches the state you are in:
|
|
|
377
414
|
| "the run is stuck" | name the hidden constraint and drop it (see below) |
|
|
378
415
|
| "the results are surprising" | re-derive the assumption they break, then go back to the literature |
|
|
379
416
|
|
|
380
|
-
- **Diverge first**: list candidate mechanisms and framings without judging them
|
|
417
|
+
- **Diverge first**: list candidate mechanisms and framings without judging them,
|
|
418
|
+
every one of them about an in-scope item - a framing of a different question is
|
|
419
|
+
an Open question for the user, not a candidate.
|
|
381
420
|
- **Expose a hidden constraint**: list the constraints of the current approach and
|
|
382
421
|
classify them hard (physically necessary), soft (convention) or hidden (never
|
|
383
422
|
stated). The most productive move in the library's whole ideation set is
|
|
@@ -474,12 +513,15 @@ and `--strict` refuses it; two raters at least, and state their agreement.
|
|
|
474
513
|
|
|
475
514
|
## Variants
|
|
476
515
|
|
|
477
|
-
A deliverable a reader acts on - a design, a plan,
|
|
478
|
-
version redone until it looks right. Serial versions fixate on the first
|
|
479
|
-
and a design shown alone gets inflated ratings (Dow et al. 2010, Tohidi et
|
|
480
|
-
2006). Produce at least three variants (two for `code`; `min_variants` in
|
|
516
|
+
A deliverable a reader acts on and chooses between - a design, a plan, code - is
|
|
517
|
+
not one version redone until it looks right. Serial versions fixate on the first
|
|
518
|
+
option and a design shown alone gets inflated ratings (Dow et al. 2010, Tohidi et
|
|
519
|
+
al. 2006). Produce at least three variants (two for `code`; `min_variants` in
|
|
481
520
|
`deliverable`, and below the default only with a `single_variant_reason`) and
|
|
482
|
-
compare them under criteria fixed first, in `decisions/<id
|
|
521
|
+
compare them under criteria fixed first, in `decisions/<id>/`. An `analysis`
|
|
522
|
+
answers its question once on a rules-5 line: variants are a choice the user
|
|
523
|
+
makes, not a way to triple the answer (an older line keeps the three it was
|
|
524
|
+
opened under):
|
|
483
525
|
|
|
484
526
|
| File | What it holds |
|
|
485
527
|
|---|---|
|
|
@@ -495,8 +537,9 @@ after it was committed; a missing cell once `decision.md` exists or the line is
|
|
|
495
537
|
delivering; a `chosen` that is not a produced variant, a rejected variant with no
|
|
496
538
|
criterion, no `flip:`; and a chosen variant another one beats or ties on every
|
|
497
539
|
numeric criterion. A judged cell with fewer than two raters warns (`--strict`
|
|
498
|
-
refuses). A design
|
|
499
|
-
runs, is refused once it delivers, and keeps
|
|
540
|
+
refuses). A design or plan (and an analysis on a line before rules 5) with no
|
|
541
|
+
`decisions/` warns while the line runs, is refused once it delivers, and keeps
|
|
542
|
+
the line open.
|
|
500
543
|
|
|
501
544
|
When the variants are code or config, they are sibling orx nodes under one head
|
|
502
545
|
node (orx cardinal rule 4: fan within a round, then descend onto the winner), and
|
|
@@ -44,6 +44,12 @@ Tezgah maintenance is in scope when the user asks for it, when the repo IS the
|
|
|
44
44
|
tezgah checkout, or when tezgah's own check (`tezgah-setup --status`) is the
|
|
45
45
|
requested task.
|
|
46
46
|
|
|
47
|
+
Using the skills is the user's work, not maintenance: before working a topic
|
|
48
|
+
an installed skill covers, run `tezgah-skill <words>` (BM25 over every
|
|
49
|
+
installed skill's sections) and read only the `skill://<name>:<start>-<end>`
|
|
50
|
+
range it returns - or the absolute path beside it on a host that does not
|
|
51
|
+
resolve `skill://` - instead of loading the whole skill.
|
|
52
|
+
|
|
47
53
|
## Workspace: `.tezgah/` only
|
|
48
54
|
|
|
49
55
|
Every per-project tezgah artifact - plans, research lines, analysis, lessons -
|
|
@@ -140,7 +146,7 @@ prefers shell tools; that preference does NOT cover definitions, callers, or
|
|
|
140
146
|
blast radius - those go to the graph. The graph answers from a parsed call
|
|
141
147
|
graph, so it beats text search on renames, dynamic dispatch and cross-file
|
|
142
148
|
callers. On Claude a PreToolUse hook denies the Explore subagent here and nudges
|
|
143
|
-
the first
|
|
149
|
+
the first code-symbol search per session toward the graph. The MCP tool's
|
|
144
150
|
schema is deferred: on the FIRST code-discovery step of the session load it -
|
|
145
151
|
ToolSearch("select:mcp__codegraph__codegraph_explore,mcp__plugin_tezgah_codegraph__codegraph_explore")
|
|
146
152
|
(the plain name on a checkout's own server, the `plugin_tezgah_` one on a plugin
|
|
@@ -209,9 +215,21 @@ discovery, review, impact analysis (research goes to OpenResearch - see the
|
|
|
209
215
|
Research section - with a host subagent only as the fallback when `orx` is
|
|
210
216
|
absent). Subtasks with no data dependency
|
|
211
217
|
between them MUST be spawned in ONE message so they run in parallel; dependent
|
|
212
|
-
ones run sequentially, each briefed with the previous result.
|
|
218
|
+
ones run sequentially, each briefed with the previous result. Fanning out is the
|
|
219
|
+
default, not a favour the user has to ask for: two or more independent items -
|
|
220
|
+
a list, several files or areas, todo entries that share nothing - go to one
|
|
221
|
+
subagent each, and every writing slice gets its own branch and checkout (see
|
|
222
|
+
below), never the main checkout. The
|
|
223
|
+
orchestrator is the main thread itself: it does not wait idle on a slice while
|
|
224
|
+
independent work remains. Fan out only when the subtasks share no mutable file and no interface: if two of them would edit the same file, or one's answer decides the other's, keep them in one context or sequence them. The shared artifact is the coordination channel, not chatter - naming a lead coordinates nothing by itself. If the work
|
|
213
225
|
cannot be split - one file, one bounded change, a strictly serial chain - do it
|
|
214
226
|
directly. Never spawn a subagent whose briefing is bigger than the work.
|
|
227
|
+
A slice that needs its own checkout: inside Orca (the session-start `Orca:`
|
|
228
|
+
line) create it with `orca worktree create --name <slug> --parent-worktree
|
|
229
|
+
active --json` and track it with `orca worktree ps --json` or `tezgah-status
|
|
230
|
+
--orca` - a raw `git worktree add` gets no card, terminal tracking or agent
|
|
231
|
+
status in Orca; outside Orca, `git worktree add`. Either way the brief names
|
|
232
|
+
absolute paths under that checkout.
|
|
215
233
|
Routing: `~/.config/tezgah/bin/tezgah-route "<brief>"` names the worker - tezgah-cheap, -standard or
|
|
216
234
|
-frontier (overrides for stored data, credentials, security first; then a Jev
|
|
217
235
|
judgement; the static phase table with no key). A worker that answers
|
|
@@ -297,10 +315,11 @@ anything explicitly requested. Bug fix = root cause where all callers route
|
|
|
297
315
|
through, not the symptom path. A deliberate corner cut gets a `ponytail:`
|
|
298
316
|
comment naming the ceiling and upgrade path. Output: code first, then at most
|
|
299
317
|
three short lines (what was skipped, when to add it); how the reply reads otherwise - answer first, at most five ranked items, no preamble - is adhd's.
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
318
|
+
Non-trivial logic leaves ONE runnable check (an assert self-check or one small
|
|
319
|
+
test); a complex ask ships the lazy version and names the fuller one in the
|
|
320
|
+
same reply. These rules are in force from the first turn; the full skill
|
|
321
|
+
(Skill(tezgah:ponytail) on Claude, the installed `ponytail` skill elsewhere)
|
|
322
|
+
holds the level table and the examples.
|
|
304
323
|
Level: `tezgah-pony lite|full|ultra` (bare call shows it; stored in
|
|
305
324
|
~/.config/tezgah/ponytail.level, machine-wide until changed). The default `full`
|
|
306
325
|
adds nothing to this reminder; a non-default level is named in it every turn.
|
|
@@ -339,8 +358,10 @@ The reader has to act on the answer, and the friction between "got it" and
|
|
|
339
358
|
Break any of these when the ask is an explanation (explain fully, no preamble,
|
|
340
359
|
no closer), or when a rule would delete the answer itself (an options question
|
|
341
360
|
gets 2-4 ranked options with one line of trade-off each, recommendation first).
|
|
342
|
-
|
|
343
|
-
|
|
361
|
+
After three "still broken" turns, name the suspect assumption and ask one
|
|
362
|
+
diagnostic question. Before sending, delete an opening sentence that announces,
|
|
363
|
+
a closing one that recaps, any by-the-way sidebar and any empty hedge. In force
|
|
364
|
+
from the first answer; the full `i-have-adhd` skill holds the examples.
|
|
344
365
|
Off: `tezgah-adhd off` (the kill switch file), or a repo's `.no-adhd`.
|
|
345
366
|
|
|
346
367
|
|
|
@@ -623,13 +644,31 @@ experiments/variants, or producing a research artifact (report, figure, dataset)
|
|
|
623
644
|
It is NOT "where is X defined" or "who calls Y" - that is code discovery and
|
|
624
645
|
stays on the codegraph index.
|
|
625
646
|
|
|
647
|
+
**Lock the line to the question asked.** Restate the user's question verbatim as
|
|
648
|
+
the line's scope (`--ask`) and name what is in it and what is out (`--in`,
|
|
649
|
+
`--out`: state.json `scope`). Every finding answers an in-scope item - a claim's
|
|
650
|
+
`trace` names its `S<n>`, and `tezgah-research check` refuses one that names none -
|
|
651
|
+
and a finding that answers nothing asked is dropped, not reported as a bonus. Do
|
|
652
|
+
not widen the question, add sub-questions or chase an adjacent topic; a tangent
|
|
653
|
+
worth having is one line under Open questions for the user to pick. The question
|
|
654
|
+
picks the method, not the tooling: a qualitative, conceptual or reference question
|
|
655
|
+
is a source review (`--method qualitative`: no metric, no experiment), and a
|
|
656
|
+
metric, a locked evaluation and the experiment tree belong only to a question
|
|
657
|
+
whose answer is a measurement (`--method measured`). A plain factual or reference
|
|
658
|
+
question gets no line at all: answer it in the reply from primary sources. Depth
|
|
659
|
+
is the primary source read, not more breadth - the spec, the paper, the code, the
|
|
660
|
+
vendor's own documentation - each finding citing the source it rests on and
|
|
661
|
+
stating its confidence (high, medium or low, and why); a summary of summaries is
|
|
662
|
+
not an answer.
|
|
663
|
+
|
|
626
664
|
When the task is research and the OpenResearch CLI is installed, drive it
|
|
627
665
|
through that CLI instead of ad-hoc local scripting. Resolve it as `orx` on PATH,
|
|
628
666
|
else `~/.cargo/bin/orx` (the installer's location, which a non-interactive shell
|
|
629
667
|
does not put on PATH). Load the operating manual first:
|
|
630
668
|
the `orx` skill if the host has it, otherwise run `orx skill` from the shell; then
|
|
631
|
-
the
|
|
632
|
-
`orx skill
|
|
669
|
+
the module the method needs - `orx skill lit-review` for sources,
|
|
670
|
+
`orx skill experiment-tree` and `orx skill evidence` for a measured line. On a
|
|
671
|
+
measured line its cardinal rules are not style preferences - they
|
|
633
672
|
are what keeps results comparable, and breaking one silently invalidates the run:
|
|
634
673
|
never edit a node once a run has answered it (branch a child instead); the run
|
|
635
674
|
command and environment are a fixed contract identical on every node; vary the
|
|
@@ -638,7 +677,8 @@ downward, not sideways. Local research needs no login; managed compute does
|
|
|
638
677
|
- ask the user to run `orx login`.
|
|
639
678
|
|
|
640
679
|
If the CLI is not installed, say the research tooling is unavailable and do not
|
|
641
|
-
improvise its protocol; fall back to a host subagent and say so
|
|
680
|
+
improvise its protocol; fall back to a host subagent and say so, briefed with the
|
|
681
|
+
question verbatim, its in- and out-of-scope items and its method. Kill switch:
|
|
642
682
|
`research-off`.
|
|
643
683
|
|
|
644
684
|
Keep the line auditable in the repository, not in your head:
|
|
@@ -655,11 +695,13 @@ row, and results rows left append-only; `~/.config/tezgah/bin/tezgah-research in
|
|
|
655
695
|
construct and conclusion validity threats, whatever `phase` says. `state.json`
|
|
656
696
|
`deliverable` names what the line delivers and lists the ask's items, each answered
|
|
657
697
|
in the report, a decision or a claim `trace`, or written `A<n> not delivered:
|
|
658
|
-
<reason>`. A design
|
|
698
|
+
<reason>`. A design or plan the user will choose between is produced as >= 3
|
|
699
|
+
variants in
|
|
659
700
|
`decisions/<id>/` - `criteria.json` committed before any cell, `variants.jsonl` (V0
|
|
660
701
|
the status quo), cells appended by `tezgah-research compare`, `decision.md` naming
|
|
661
702
|
the chosen id, each rejected id with the criterion that ruled it out, and a `flip:`
|
|
662
|
-
condition; a new version of a line is
|
|
703
|
+
condition (an analysis answers its question once); a new version of a line is
|
|
704
|
+
opened `init --supersedes <old>` and carries
|
|
663
705
|
the old one as a variant. Code or config variants are sibling orx nodes under one
|
|
664
706
|
head node. Literature is found with `orx discover` and read with `orx paper`; an
|
|
665
707
|
agent's summary is indexed as `agent-report` and never alone carries a literature
|