grow
Skill2 starsChanged 27 days agoMITView on GitHub
Grows the self-clone tree by one step — picks the top node of the frontier, reads its sources to the end, then either splits it one level down or fills the floor test (run · cases · exam). With a ticket key or chat-thread link as the argument, it only pins that case into every node it touches. Use for "/grow", "/grow <range>", "/grow ABC-123", "/grow <thread link>", "grow the tree", "next node", "put this case in the tree", and inside /loop.
- Reads credentials
4 other projects use a version of this.
Adopted by
Most recently taken up by
- jtmuller5/small-business-skillstheir own version, first seen Oct 20, 2026
- quantumaikr/quant.cpptheir own version, first seen Oct 8, 2026
- T4LEL/Claude-Arsenaltheir own version, first seen Jul 12, 2026
- jackguo709/devlooptheir own version, first seen Apr 10, 2026
Other versions4 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 4
- quantumaikr/quant.cpp★ 403same name
- jackguo709/devloop★ 2same name
- T4LEL/Claude-Arsenal★ 1same name
- jtmuller5/small-business-skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository3 other files it gives its agents.
- clone-initSkill
- examSkill
- surveySkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
20 rules. 0 are common, 9 are distinctive, and 11 are very specific to this project.
0
Common
Most of the 3 edited versions we read keep these.
9
Distinctive
This author's own choices. Worth a look.
11
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 18
Follow the chain of section 3 to the end: request (thread) → ticket → work (harness outputs, sessions) → judgement (approvals) → change …
- Very specific: line 24
If no node fits, pin into the closest parent: [case <key>] no fitting branch — <what> (the branch is decided when growing).
- Very specific: line 25
Do not change checked or state of pinned nodes.
- Very specific: line 42
The frontier is never empty: When there seems to be nothing to do, it says @exam.
- Distinctive: line 48
Read the ancestors and siblings.
- Very specific: line 54
Start from the node's ## Evidence, ## Unknown, ## Candidates.
- Very specific: line 76
When stuck: only after trying three or more sources, record it in ## Unknown:
- Distinctive: line 82
use credentials directly to call an API
- Distinctive: line 84
write to a source (commit, comment, state change, message)
- Distinctive: line 85
put internal names, tickets or code into a web search
- Distinctive: line 91
Before choosing children, lay out 5–10 possible axes and items for splitting this node, grounded in what the sources show, through these …
- Very specific: line 104
Create children with python3 -I tools/tree.py new <path>/<slug> <title>.
- Very specific: line 106
Write the split criterion on the first line of ## Boundary.
- Distinctive: line 111
When existing body text moves down into children, move it, do not delete it.
- Distinctive: line 127
no missing branch — count again from the sources
- Very specific: line 128
no missing ## Relations between children
- Very specific: line 131
Put checked: <today YYYY-MM-DD> in the front matter of every node touched (including new children).
- Very specific: line 132
When it connects to another branch, add ## Relations.
- Very specific: line 146
Never ask the owner. When blocked, record it in ## Unknown and move to the next node.
- Distinctive: line 154
If What contains ①②, each of those is a child.
“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
grow — top-down, one node at a time, all the way to the floor
The goal is that the clone can start from this tree, open the knowledge on this machine that the tree points to, and do the owner's work in their place. The tree is not a copy of knowledge; it is "how the user uses knowledge" (what is where, when to open it, whom to ask, how to judge). The bar is not "can explain the concept". It is "can do exactly what the owner would do in the terminal, the chat app and the issue tracker".
One call handles one node. Run every command from the clone home. RULES.md is the source of truth; section headings are in tools/shape.json.
0. Range
- Without an argument the whole tree is in range.
- With a path (
/grow systems) only that subtree is (for parallel loops): add--under <range>to every command below. - With a single case — a ticket key (
ABC-123), a chat-thread link, a task name in a harness output folder — do only 0-a. Pin a case and stop (no growing).
0-a. Pin a case — one case as the entrance
A single case never grows a node directly. Mark every node it touches and let the frontier order (pinned cases) do the growing — so the tree does not grow lopsided, and practice nodes get the same case as work nodes.
- Follow the chain of section 3 to the end: request (thread) → ticket → work (harness outputs, sessions) → judgement (approvals) → change (merge request, commits) → deploy → reply. Write only what you opened.
- Find every node it touches (
grep -rl,tree.py show) — not one per facet, all of them:- work: the deepest node of this work type
- practice: the criterion node at every point where the owner approved or decided (choosing a reviewer, accepting a risk, rolling back, touching production data…)
- systems · env · org: the systems, access paths, people and organisations involved
- Pin one line into each node's
## Candidates:- [case <key>] <what to look at here, one line> — <pointer>. Skip if the same key is already there. If no node fits, pin into the closest parent:[case <key>] no fitting branch — <what>(the branch is decided when growing). - Do not change
checkedor state of pinned nodes.tree.py lint→ add only the pinned paths →git commit -q -m "case(<key>): pinned into <n> nodes". - Report:
case <key>: pinned — <node paths>. It comes up in the frontier as pinned cases.
1. Pick
python3 -I tools/tree.py frontier -n 5 [--under <range>]Take the top one. Its reason decides this step:
@survey→ run the whole/surveyprocedure, report, stop.@exam→ run the whole/examprocedure, report, stop.violation→ restructure (4-b)exam holes→ grow (4-a). First open the answer pointer on each[exam]line and fill it, then delete the line.pinned cases→ grow (4-a). First open the case chain of each[case]line and fold it into this node (cases · run · exam · unknown · relations), then delete the line. If the node was settled, re-run the floor test afterwards. Raise a new branch only when two or more different cases take the same branch — with only one, leave a note in## Candidateswithout[case].below floor→ regrow (4-a). First setstate: growing. Having been settled before guarantees nothing.stub·growing, unknowns→ grow (4-a)refresh: sources changed·refresh: last checked·review→ refresh (4-d)
The frontier is never empty. When there seems to be nothing to do, it says @exam. Never report "the tree is complete" or "nothing left".
2. Read the context
python3 -I tools/tree.py show <path>- Read the ancestors and siblings.
- First check by what criterion this node was split from its siblings (first line of the parent's
## Boundary). [exam …]lines in## Unknownare holes a real exam hit. Fill those first.[case …]lines in## Candidatesare pinned cases. Fold them in right after[exam].
3. Dig the sources to the end (read-only)
Start from the node's ## Evidence, ## Unknown, ## Candidates. The source maps are sources/local.md, sources/external.md, sources/access.md.
Never write from a pointer alone. Only what you actually opened in this step becomes evidence.
Local
- Sources that are already written (code, repo docs, skills, wiki, notes, memory): do not copy content. You open them to make the map exact — exact location (path, page id, doc name), which questions it answers, how to open it, whether it is still alive.
- Code: that is the repo harness's. Read only enough to route: which repo, which harness skill, which doc owns this work, and which admin commands or job names the owner types by hand.
- Harness outputs: real cases and the owner's approvals live here — the folders in
clone.json harness_dirsinside each repo (task notes, ADRs, result write-ups, review notes). - The owner's Claude sessions: instructions they gave, choices they made, commands they ran in each repo.
~/.claude/projects/<project>/*.jsonl,~/.claude/history.jsonl,~/.codex/sessions/- These are large.
grepfor a ticket key or a word, read only around it, summarise.
- Shell history (
~/.zsh_history): copy command shapes as they are, masking tokens, passwords, IPs and customer identifiers as<…>. - Also:
git log,~/.claude/projects/*/memory/,~/.ssh/config(aliases only), notes folders.
External (read only) — use exactly the tools sources/access.md marks as working:
- issue tracker: search by key, by assignee/reporter/commenter = owner; read description and comments
- wiki: search, read pages, walk the page tree of a space
- chat (MCP): search by ticket key, system name,
from:me→ read the thread - code host: merge request descriptions and diff summaries
- error tracker, dashboards: names and definitions only. Never run queries that could return customer rows.
Follow every case as a chain to the end: request (thread) → ticket → work (task file, session) → judgement (gates, approvals) → change (MR, commits) → deploy → reply (thread). That chain becomes ## Cases.
When stuck: only after trying three or more sources, record it in ## Unknown:
- shape:
- <question> — tried: <where>, blocked: <why> - for servers you have no access to, trace server facts backwards from code, config, harness, tickets and conversations.
Never
- open secret files
- use credentials directly to call an API
- handle customer data
- write to a source (commit, comment, state change, message)
- put internal names, tickets or code into a web search
- copy customer names, accounts, contacts. People are recorded by name and work role only.
4. Write
a. Grow / regrow
Diverge, then converge Before choosing children, lay out 5–10 possible axes and items for splitting this node, grounded in what the sources show, through these lenses:
- stages: first → last
- situations: normal / exception / outage
- targets: per client, system, screen
- people: who requests, who decides
- time: daily / monthly / holidays / release day
- failure: where and how it breaks
- inverted: "how would someone ruin this by trusting only this node" — the answer is a missing branch
Then pick the one axis the owner actually splits by when working and converge to 2–3 children (from depth 3 the cap is 3 — go deep, not wide).
- Useful unchosen axes go to the children's level or to
## Candidates. - The laid-out list itself is not written into the node.
- Facts about action — commands, CLI shapes, ids, limits — go into
## Run, not## Boundary(Boundary is only the split criterion and in/out). Fix## Whatat 1–3 lines. If you find yourself listing stages, branches or variants, those are children. - Create children with
python3 -I tools/tree.py new <path>/<slug> <title>.- Fill each child's
## What(one line), the## Evidenceyou know, and concrete## Unknownitems from the sources you opened. - Write the split criterion on the first line of
## Boundary. - Four or more → raise an intermediate concept and group. Never make a single-child branch (that is only one more level of name, not a split).
- How to go deep: if the decision part of an end branch's
## Runhas two or more condition → action pairs, each condition is a child. If## Casestook different branches, those branches are children. If there are several targets (clients, endpoints, event types, screens), targets are children. Move the parent's cases and exam items into the right children, then find more cases in the sources until each child has two.
- Fill each child's
- While regrowing, ask of every sentence "where is this already written?". If it is, delete it and replace it with a one-line map
- <question/situation> → <location> (<how to open>). If it is not (judgement distilled from several cases, customs, people, hand habits), keep it. Strip what belongs to the harness in particular: code locations, functions, models, state transitions, queries, business-rule detail are removed (their source of truth is the repo) and replaced by one line "ask the<repo>harness — source of truth<doc>". In cases too, keep the user-seat judgement, approval and reply, not what the code change was. - When existing body text moves down into children, move it, do not delete it. The parent keeps only definition and boundary.
- An end branch is
settledonly when it fills every part of the floor test below. If anything is missing it staysgrowing. That is not failure, it is honesty.
b. Restructure (lint violations: too many children, leaves, lines)
- Too many children: raise middle branches by a common criterion and
git mvinto them. Fix relation links. - Body too long: move chunks down into child branches.
- Too many leaves: group leaves into a concept branch, or promote them to branches.
c. Leaf — only for an unsplittable record (one judgement case, one procedure, one fact). Names unique across the tree.
d. Refresh
sources changed: look only at what appeared afterchecked—git log --since, new harness outputs, new tickets and threads for those keys.last checked: check the evidence is still alive and look for new related tickets and threads. Adding one more case is the default.- Both: re-run the floor test. If new sources change an exam answer, fix it. If the node turned out to be a bundle, set
growingand split. review(a parent whose children all settled): check the following, then settle the parent:- siblings are split by one criterion
- no missing branch — count again from the sources
- no missing
## Relationsbetween children
Every step
- Put
checked: <today YYYY-MM-DD>in the front matter of every node touched (including new children). - When it connects to another branch, add
## Relations. Never write the same content in two places.
5. Check and commit
python3 -I tools/tree.py lint [--under <range>] # must be E 0 to commit — touched settled nodes are also machine-checked against the floor
git add <paths touched> # parallel loops exist, so add only what this step created or changed, not -A tree
git commit -q -m "grow(<path>): <what was done, one line>"- Fix remaining lint violations. If the floor cannot be filled, leave it
growing. - On an
index.lockconflict, retry a moment later.
6. Report (one or two lines)
<path>: <grow/restructure/refresh> — children a·b·c, cases n, exam n, unknown n. Next frontier: <path>
- Inside /loop, the next step is called by /loop.
- Never ask the owner. When blocked, record it in
## Unknownand move to the next node.
Floor test — the condition for settled (depth has no end; more detail is better)
An end branch is settled only when it meets all of these. 1–3 are judged by grow, 4–8 machine-checked by tree.py lint.
- It is one thing — it points at one real thing.
- e.g. one batch job, one API, one event type, one state transition, one approval point, one request type from a person, one command sequence, one alert.
- "N stages", plurals, "… in general", "… related" are bundles.
- If What contains ①②, each of those is a child.
- It can be done as written — the clone reads this node and its ancestors, opens what the node points to, and acts without asking or guessing. The pointers must be exact ("somewhere in the docs" fails; a doc path or page id passes).
- The exact command, screen path, channel, decision condition, and where to hand off to a harness (repo, skill, prompt shape) are all there.
- A step that needs business logic passes if it ends in "tell/ask the
<repo>harness<what>"; written content passes as "open<location>and look at<what>". The content itself is not memorised in the tree. - "Look at the sources" does not pass.
- It is not wrong — every fact written was checked by opening the source.
- Depth ≥
floor.min_depth(min_depth_by_facetlets map-like facets such as systems be shallower) — a shallow end branch still has a split left.## Run≤max_exec_itemsitems, body ≤ 40 lines — beyond that it is a bundle. ## Run— what the clone actually does for this work. Each facet writes something different:- work · practice: where (repo path, host alias, screen, channel) → what (shell command as is, harness entry command and what to tell it; secrets as
<…>) → judgement (user-seat condition → action) → what to leave (ticket, thread, file, commit-message shape) - systems: a map only — when work on this system comes up: the repo/harness to open and its skill, the source-of-truth doc, the owner (person), the alerts and channels it rings, the deploy path. No code, models or state transitions.
- env: the path to reach it (prerequisites like VPN or bastion → alias → command), the check command, failure symptoms and what to do
- org: how to work with this person or organisation (channel, how requests arrive, how replies look, decision rights)
- work · practice: where (repo path, host alias, screen, channel) → what (shell command as is, harness entry command and what to tell it; secrets as
## Cases— two or more real events, a pointer on each line.- shape:
- ABC-123 (YYYY-MM): what happened → what the owner did or decided → result
- shape:
## Exam— three or more questions the person doing this work would really get, answerable straight from this node.- shape:
- Q: … A: … - answers containing "unknown" or "guess" do not count.
- bad: "what is this system"
- good: "the nightly backup job failed — what is the first command?", "a deploy freeze starts tomorrow — what do you hold back and whom do you tell?"
- shape:
## Unknownis empty and## Evidencehas three or more pointers of this node's own.
A branch (a node with children) is settled when every child is settled and the branches cover the sources without gaps.
A feel for the floor per facet (examples; deeper is fine):
- systems: service → area → feature → flow → one job / API / event / state transition (e.g. blog/api/comments/moderation/spam-hook)
- work: work type → subtype → situation → stage → one decision point / command sequence (e.g. bugs/regression/bisect/local-repro/first-bad-commit)
- env: area → means → target → one path step (e.g. devices/laptop/ssh/jump-host)
- org: organisation → team → person → one request type (e.g. colleagues/design/
<person>/review-request) - practice: principle → approval point → one criterion. Judgement cases under it are leaves.
As cases pile up, raise branches by the criterion that separates them and go down. That is how the tree gets deep.
Judgement
- Split criteria follow how the owner actually splits things when working (harness stages, approval points, system boundaries, clients, failure types).
- Go top-down, but every end must reach a tangible action.
- The user's seat (where the owner judges, approves, signs off) becomes a node. That is where the clone will sit. Its criteria are pulled from real approval records.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

