@g3nomaly/g3n-skills 0.1.6 → 0.1.7
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/.claude-plugin/marketplace.json +11 -2
- package/README.md +43 -41
- package/package.json +2 -2
- package/skills/coding/.claude-plugin/plugin.json +7 -3
- package/skills/coding/code/SKILL.md +6 -6
- package/skills/coding/code/references/cpp.md +12 -12
- package/skills/coding/code/references/python.md +12 -12
- package/skills/coding/code/references/rust.md +11 -11
- package/skills/coding/code/references/typescript.md +12 -12
- package/skills/coding/document/SKILL.md +1 -1
- package/skills/coding/document/references/cpp.md +4 -0
- package/skills/coding/document/references/python.md +3 -0
- package/skills/coding/document/references/rust.md +10 -5
- package/skills/coding/document/references/typescript.md +14 -3
- package/skills/g3n/.claude-plugin/plugin.json +11 -0
- package/skills/g3n/analyze/references/api.md +32 -0
- package/skills/g3n/analyze/references/commands.md +54 -0
- package/skills/g3n/analyze/references/repository.md +13 -0
- package/skills/g3n/g3n-mods/SKILL.md +32 -0
- package/skills/g3n/g3n-mods/agents/openai.yaml +5 -0
- package/skills/g3n/g3n-skills/SKILL.md +32 -0
- package/skills/g3n/g3n-skills/agents/openai.yaml +5 -0
- package/skills/grilling/.claude-plugin/plugin.json +7 -2
- package/skills/grilling/domain-modeling/ADR-FORMAT.md +1 -1
- package/skills/grilling/domain-modeling/SKILL.md +1 -1
- package/skills/grilling/grilling/SKILL.md +1 -1
- package/skills/speech/.claude-plugin/plugin.json +7 -2
- package/skills/speech/emphasise/SKILL.md +12 -12
- package/skills/task-manager/.claude-plugin/plugin.json +1 -1
- package/skills/task-manager/decisions/SKILL.md +5 -5
- package/skills/task-manager/task-manager/SKILL.md +8 -8
- package/skills/task-manager/task-manager/references/hooks.md +10 -10
- package/skills/task-manager/task-manager/references/task-file.md +12 -12
- package/skills/teach/.claude-plugin/plugin.json +10 -2
- package/skills/teach/guided-debugging/references/debugging-loop.md +10 -10
- package/skills/teach/teaching/references/learning-model.md +6 -6
- package/skills/using-hooks/.claude-plugin/plugin.json +7 -2
- package/skills/using-hooks/hook-post-tool-use/SKILL.md +15 -3
- package/skills/using-hooks/hook-pre-tool-use/SKILL.md +10 -2
- package/skills/workflow/.claude-plugin/plugin.json +7 -3
- package/skills/workflow/orchestrator/SKILL.md +6 -6
- package/skills/workflow/plan/SKILL.md +2 -1
- package/skills/workflow/review/SKILL.md +2 -1
- package/skills/workflow/run/SKILL.md +8 -8
- package/skills/workflow/run/references/sub-agents.md +6 -6
- package/skills/workflow/sync/SKILL.md +2 -1
- package/skills/workflow/worktree/SKILL.md +5 -5
- package/skills/writing/.claude-plugin/plugin.json +6 -2
- package/skills/writing/writing-great-hooks/references/lifecycle-hook.md +17 -11
- package/skills/writing/writing-great-hooks/references/skill-hook.md +17 -2
- package/skills/writing/writing-great-tasks/SKILL.md +14 -14
- package/skills/coding/analyze/references/api.md +0 -27
- package/skills/coding/analyze/references/commands.md +0 -54
- package/skills/coding/analyze/references/repository.md +0 -13
- /package/skills/{coding → g3n}/analyze/SKILL.md +0 -0
- /package/skills/{coding → g3n}/analyze/agents/openai.yaml +0 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Commands
|
|
2
|
+
|
|
3
|
+
| Command | Does |
|
|
4
|
+
| ---------------- | ------------------------------------------------------ |
|
|
5
|
+
| `create_docs` | Writes `analyze_out/index.html`, one offline HTML file |
|
|
6
|
+
| `search <query>` | Finds nodes by words and by meaning |
|
|
7
|
+
| `show <node>` | Prints one node in full |
|
|
8
|
+
| `refs <node>` | Lists its edges, both ways |
|
|
9
|
+
| `list` | Lists nodes in display order |
|
|
10
|
+
|
|
11
|
+
## Flags
|
|
12
|
+
|
|
13
|
+
| Flag | Commands | Does |
|
|
14
|
+
| -------------------------------- | ---------------- | -------------------------------------------------------- |
|
|
15
|
+
| `--repo <dir>` | all | Repository to read. Default: the working directory |
|
|
16
|
+
| `--skills <dir>`, `--docs <dir>` | all | Read skills or docs from this directory only. Repeatable |
|
|
17
|
+
| `--exclude <glob>` | all | Skip matching paths. Repeatable |
|
|
18
|
+
| `--no-embeddings` | all | No search by meaning |
|
|
19
|
+
| `--title <text>` | `create_docs` | Site title |
|
|
20
|
+
| `--from <file>` | queries | Query a built `index.html` instead of scanning |
|
|
21
|
+
| `--no-cache` | queries | Scan again even when nothing changed |
|
|
22
|
+
| `--json` | queries | JSON instead of text |
|
|
23
|
+
| `--kind <kind>` | queries | Only this kind. Repeatable |
|
|
24
|
+
| `--section <name>` | queries | `skills`, `docs`, `code`, `database` or `tasks` |
|
|
25
|
+
| `-n, --limit <n>` | `search`, `list` | Most results |
|
|
26
|
+
| `--by <way>` | `search` | `name`, `meaning` or `both` |
|
|
27
|
+
| `--incoming`, `--outgoing` | `refs` | One direction only |
|
|
28
|
+
| `--edge <kind>` | `refs` | Only this edge kind. Repeatable |
|
|
29
|
+
|
|
30
|
+
Each flag has an `ANALYZE_*` variable, such as `ANALYZE_REPO`. A flag wins over its variable.
|
|
31
|
+
|
|
32
|
+
## Kinds
|
|
33
|
+
|
|
34
|
+
- **Structure**: `folder`, `package`, `file`
|
|
35
|
+
- **Code**: `namespace`, `class`, `interface`, `struct`, `enum`, `trait`, `type`, `function` (methods included)
|
|
36
|
+
- **Docs and data**: `term`, `decision`, `table`, `query`
|
|
37
|
+
- **Tasks**: `plan`, `phase`, `task`
|
|
38
|
+
- **Members**, returned as their owner: `operation`, `definition`, `parameter`, `field`
|
|
39
|
+
|
|
40
|
+
The JSON of a node has its `kind` and its `type`, the finer sort, such as `method` or `api`.
|
|
41
|
+
|
|
42
|
+
## Edge kinds
|
|
43
|
+
|
|
44
|
+
| Edge | From → to |
|
|
45
|
+
| ------------------- | ------------------------------------------------------ |
|
|
46
|
+
| `type` | parameter or field → its type |
|
|
47
|
+
| `returns`, `throws` | function → type it returns or throws |
|
|
48
|
+
| `extends` | type → type it extends or implements |
|
|
49
|
+
| `mentions` | page or description → node it links to |
|
|
50
|
+
| `uses` | text → glossary term |
|
|
51
|
+
| `affects` | decision → node it is about |
|
|
52
|
+
| `references` | table → table of its foreign key |
|
|
53
|
+
| `reads`, `writes` | query → table |
|
|
54
|
+
| `names`, `depends` | plan, phase or task → node it names, task it waits for |
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# What analyze reads
|
|
2
|
+
|
|
3
|
+
| Shows as | Write |
|
|
4
|
+
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
5
|
+
| **Skill** | A `SKILL.md` inside an AI directory: `.claude`, `.codex`, `.cursor`, `.gemini`, `.agents`, `.windsurf`, `.opencode`. Elsewhere it is a doc |
|
|
6
|
+
| **Package** | A directory with a manifest: `package.json`, `pyproject.toml`, `Cargo.toml`, `go.mod`, `pom.xml`, `build.gradle`, `composer.json`, `.csproj`, `.gemspec`, `Gemfile`. A declared executable makes it an app |
|
|
7
|
+
| **Glossary** | A `glossary.md`. Each term is a node, and its first use in any text links to it |
|
|
8
|
+
| **Decisions** | A `decisions.md`. Each decision is a node; a link or inline code in it that names a node becomes an `affects` edge |
|
|
9
|
+
| **Code docs** | Doc comments. `@param`, `@returns`, `@throws` and `@property` attach to the parameter, return value, error and field |
|
|
10
|
+
| **Database** | `.sql` files. One with `CREATE TABLE` is a schema, any other a query |
|
|
11
|
+
| **Tasks** | The task-manager tree in `docs/task-manager`, or the directory `.g3n.config.json` names |
|
|
12
|
+
|
|
13
|
+
Inline code that names a type or function, such as `` `choose_route` ``, links to it from any text.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: g3n-mods
|
|
3
|
+
description: Use when installing, updating or removing a Claude Code mod, registering a repository or folder of mods as a source, setting up the mods viewer, or when an installed mod looks missing or outdated.
|
|
4
|
+
disable-model-invocation: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Mods are installed with `@g3nomaly/mods`, never by copying mod folders by hand. In the g3n monorepo, run `bun packages/mods/dist/cli/index.js` in place of `bunx @g3nomaly/mods`, so the local build is used.
|
|
8
|
+
|
|
9
|
+
## Steps
|
|
10
|
+
|
|
11
|
+
1. **Pick the scope**: with `--user`, mods go to `~/.claude/` for every project; without it, to the project's `.claude/`, run from its git root. Check which `mods.json` lists the mod and pass `--user` to every command when it is the one in `~/.claude/`. Done when you know the scope.
|
|
12
|
+
2. **Set up**, once per scope: `init` creates `mods.json`, and once per machine sets up the relay and the VS Code viewer. If another tool already set a process wrapper, `init --replace-wrapper` takes it over, and only when the user agrees. Done when `mods.json` exists. Sessions started before `init` need a restart to show in the viewer.
|
|
13
|
+
3. **Look**: `ls` lists what the sources offer, `ls --installed` what is installed. Done when you know the mod's name.
|
|
14
|
+
4. **Install**: `add <mod>`, `add <source>` for every mod of a source, or `add --all` for every mod of every source. When two sources offer a name, write `<mod>@<source>`. Done when the command reports each mod installed.
|
|
15
|
+
5. **Update**: `update --dry-run`, then `update` for all or `update <mod>` for one. `add --all` also installs mods a source added since. Done when the dry run shows nothing left to change.
|
|
16
|
+
6. **Resolve conflicts**: a conflict is an installed file that differs from what `mods.json` recorded. Pass `-f` only when the installed copy holds no change of the user's; otherwise stop and ask whether to restore, fork or skip. Done when no conflict is left.
|
|
17
|
+
7. **Remove**: `remove <mod>`. Done when its folder and `mods.json` entry are gone.
|
|
18
|
+
|
|
19
|
+
`add`, `update` and `remove` reload the mods in every running session. After the viewer itself was updated, the user runs **Developer: Reload Window**. A project-scope mod loads only once the workspace is trusted: run `claude` once in a terminal there, accept, then `/reload-plugins`.
|
|
20
|
+
|
|
21
|
+
## Register a source
|
|
22
|
+
|
|
23
|
+
The built-in source `g3n-mods` needs no registering and cannot be removed. Register any other source with `source add`:
|
|
24
|
+
|
|
25
|
+
| Source | Command |
|
|
26
|
+
| -------------------- | ----------------------------------------------------------- |
|
|
27
|
+
| GitHub repository | `source add owner/repo` |
|
|
28
|
+
| Other git repository | `source add <URL>`, with `--ref <branch or tag>` to pin one |
|
|
29
|
+
| npm package | `source add npm:<package>` |
|
|
30
|
+
| Local folder | `source add ./my-mods --name mine` |
|
|
31
|
+
|
|
32
|
+
`source ls` lists the sources and `source remove <name>` drops one. `source add -f` points a registered name somewhere else, and its installed mods then update from there. A source lists its mods in `.claude-plugin/marketplace.json`; without one, it is read as one mod or as a folder of mods under `mods/`. A mod is a plugin folder with `.claude-plugin/plugin.json` and `hooks/hooks.json`, named like its plugin. Mods are TypeScript only: a mod with any `.js`, `.mjs`, `.cjs` or `.jsx` file is refused.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: g3n-skills
|
|
3
|
+
description: Use when installing, updating or removing a skill, registering a repository or folder of skills as a source, or when an installed skill looks missing or outdated.
|
|
4
|
+
disable-model-invocation: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Skills are installed with `@g3nomaly/skills`, never by copying or editing skill folders by hand. Run every command from the project's git root. In the g3n monorepo, run `bun packages/skills/dist/cli/index.js` in place of `bunx @g3nomaly/skills`, so the local build is used.
|
|
8
|
+
|
|
9
|
+
## Steps
|
|
10
|
+
|
|
11
|
+
1. **Set up**, once per project: `bunx @g3nomaly/skills init` picks Claude Code, Codex or both; `--targets claude,codex` skips the prompt. Without it, skills go to Claude Code only. Done when `.g3n.config.json` exists, or the project only needs Claude Code.
|
|
12
|
+
2. **Look**: `ls` lists what the sources offer, `ls --installed` what is installed, `ls --source <name>` one source. Done when you know each name and whether it is a skill or a group.
|
|
13
|
+
3. **Install**: `add <name>` installs a skill or a whole group, with every skill it depends on. When two sources offer a name, write `<name>@<source>`. Done when the command reports each skill installed.
|
|
14
|
+
4. **Update**: `update --dry-run`, then `update` for all or `update <skill>` for one. A skill that gained a dependency is reported; install it with `add`. Done when the dry run shows nothing left to change.
|
|
15
|
+
5. **Resolve conflicts**: a conflict is an installed file that differs from what `skills.json` recorded. Diff it against the source. Pass `-f` only when the installed copy holds no change of the user's; otherwise stop and ask whether to restore, fork or skip. Done when no conflict is left.
|
|
16
|
+
6. **Remove**: `remove <skill>`. It offers to remove the skills that depend on it. Done when the folder and its `skills.json` entry are gone.
|
|
17
|
+
7. **Stage** the skill folders and `skills.json`. Done when `git status` shows them staged.
|
|
18
|
+
|
|
19
|
+
`-t claude` or `-t codex` limits `add`, `update`, `remove` and `source` to one target.
|
|
20
|
+
|
|
21
|
+
## Register a source
|
|
22
|
+
|
|
23
|
+
The built-in source `g3n-skills` needs no registering and cannot be removed. Register any other source with `source add`:
|
|
24
|
+
|
|
25
|
+
| Source | Command |
|
|
26
|
+
| -------------------- | ----------------------------------------------------------------------------------------- |
|
|
27
|
+
| GitHub repository | `source add owner/repo` |
|
|
28
|
+
| Other git repository | `source add <https, ssh, git, file or git@ URL>`, with `--ref <branch or tag>` to pin one |
|
|
29
|
+
| npm package | `source add npm:<package>[@range]` or `source add @scope/package` |
|
|
30
|
+
| Local folder | `source add ./my-skills --name mine`; a path starting with `.`, `/`, `~` or `local:` |
|
|
31
|
+
|
|
32
|
+
`source ls` lists the sources and `source remove <name>` drops one. A source is accepted only when it offers at least one skill. It needs a `.claude-plugin/marketplace.json` that lists its plugins, or a root `.claude-plugin/plugin.json` that makes it one plugin. A plugin's skills are the folders its `plugin.json` lists in `skills`, or every folder with a `SKILL.md` under its `skills/` folder. A skill names the skills it needs in `registryDependencies` in its frontmatter, as `<skill>` or `<skill>@<source>`.
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "grilling",
|
|
3
3
|
"description": "Relentless interviews that stress-test a plan, plus the domain model they feed.",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.7",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
|
-
"skills": [
|
|
6
|
+
"skills": [
|
|
7
|
+
"./grilling",
|
|
8
|
+
"./grill-me",
|
|
9
|
+
"./grill-with-docs",
|
|
10
|
+
"./domain-modeling"
|
|
11
|
+
]
|
|
7
12
|
}
|
|
@@ -12,7 +12,7 @@ Create the `docs/adr/` directory lazily — only when the first ADR is needed.
|
|
|
12
12
|
{1-3 sentences: what's the context, what did we decide, and why.}
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
That's it. An ADR can be a single paragraph. The value is in recording
|
|
15
|
+
That's it. An ADR can be a single paragraph. The value is in recording _that_ a decision was made and _why_ — not in filling out sections.
|
|
16
16
|
|
|
17
17
|
## Optional sections
|
|
18
18
|
|
|
@@ -6,7 +6,7 @@ disable-model-invocation: false
|
|
|
6
6
|
|
|
7
7
|
# Domain Modeling
|
|
8
8
|
|
|
9
|
-
Actively build and sharpen the project's domain model as you design. This is the
|
|
9
|
+
Actively build and sharpen the project's domain model as you design. This is the _active_ discipline — challenging terms, inventing edge-case scenarios, and writing the glossary and decisions down the moment they crystallise. (Merely _reading_ `CONTEXT.md` for vocabulary is not this skill — that's a one-line habit any skill can do. This skill is for when you're changing the model, not just consuming it.)
|
|
10
10
|
|
|
11
11
|
## File structure
|
|
12
12
|
|
|
@@ -8,6 +8,6 @@ Interview me relentlessly about every aspect of this until we reach a shared und
|
|
|
8
8
|
|
|
9
9
|
Ask the questions one at a time, waiting for feedback on each question before continuing. Asking multiple questions at once is bewildering.
|
|
10
10
|
|
|
11
|
-
If a
|
|
11
|
+
If a _fact_ can be found by exploring the environment (filesystem, tools, etc.), look it up rather than asking me. The _decisions_, though, are mine — put each one to me and wait for my answer.
|
|
12
12
|
|
|
13
13
|
Do not act on it until I confirm we have reached a shared understanding.
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "speech",
|
|
3
3
|
"description": "Conventions for how an agent writes — emphasis markup, cutting AI tells, and plain language.",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.7",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"hooks": "./hooks.json",
|
|
7
|
-
"skills": [
|
|
7
|
+
"skills": [
|
|
8
|
+
"./emphasise",
|
|
9
|
+
"./unslop",
|
|
10
|
+
"./plain-language",
|
|
11
|
+
"./no-questions"
|
|
12
|
+
]
|
|
8
13
|
}
|
|
@@ -12,14 +12,14 @@ Three markers, three jobs: `_italics_` highlights _core concepts and themes_, **
|
|
|
12
12
|
|
|
13
13
|
This is your primary tool for helping a reader (human or AI) skim a paragraph and instantly grasp its subject without reading every word. It does not mean the word is a strict variable; it means the word is the thematic core of the sentence.
|
|
14
14
|
|
|
15
|
-
1. _Concept / Keyword_ — highlights architectural ideas, patterns, or focal points (e.g., _minimum viable product_, _god classes_, _domain segregation_). This draws the eye to the "what are we talking about" of the sentence.
|
|
15
|
+
1. _Concept / Keyword_ — highlights architectural ideas, patterns, or focal points (e.g., _minimum viable product_, _god classes_, _domain segregation_). This draws the eye to the "what are we talking about" of the sentence.
|
|
16
16
|
2. _Stress_ — the pivot the meaning turns on: "the same _way_ on every run, not the same output".
|
|
17
17
|
3. _Mention_ — a word or phrase named rather than used: a coined term (_tight_), or prompt text quoted as an example (_be thorough_).
|
|
18
18
|
4. _Label_ — a short tag classifying the block it opens: `_Failure mode._` Mark the tag text and nothing else.
|
|
19
19
|
|
|
20
20
|
## `**bold**` — the structural pointer
|
|
21
21
|
|
|
22
|
-
Bold carries heavy weight. It is reserved for strict, defined entities, specific UI/document locations, and operative actions.
|
|
22
|
+
Bold carries heavy weight. It is reserved for strict, defined entities, specific UI/document locations, and operative actions.
|
|
23
23
|
|
|
24
24
|
1. **Entity / Location** — a defined concept with an authoritative definition, or a specific destination like a file, document, or section (e.g., an extension gets reported in **Findings**).
|
|
25
25
|
2. **Action / Point** — the operative clause of a bullet or step, front-loaded so the list can be skimmed by its first few words. **One trigger per branch.** Bold the instruction; leave the explanation after it plain.
|
|
@@ -30,20 +30,20 @@ Backticks are not emphasis. They mean "reproduce this exactly": paths, filenames
|
|
|
30
30
|
|
|
31
31
|
## Choosing
|
|
32
32
|
|
|
33
|
-
| Test
|
|
34
|
-
|
|
33
|
+
| Test | Marker |
|
|
34
|
+
| ------------------------------------------------------------------------------- | --------------------- |
|
|
35
35
|
| Is it a key concept, pattern, or keyword I want the eye to catch when skimming? | `_italics_` (concept) |
|
|
36
|
-
| Is it a defined strict entity, document name, or UI element?
|
|
37
|
-
| Is it the operative point of a bullet?
|
|
38
|
-
| Would the sentence be misread without it?
|
|
39
|
-
| Is it a word or quoted phrase being named rather than used?
|
|
40
|
-
| Would you type it verbatim into a terminal or a file?
|
|
41
|
-
| None of the above
|
|
36
|
+
| Is it a defined strict entity, document name, or UI element? | `**bold**` (entity) |
|
|
37
|
+
| Is it the operative point of a bullet? | `**bold**` (action) |
|
|
38
|
+
| Would the sentence be misread without it? | `_italics_` (stress) |
|
|
39
|
+
| Is it a word or quoted phrase being named rather than used? | `_italics_` (mention) |
|
|
40
|
+
| Would you type it verbatim into a terminal or a file? | `` `backticks` `` |
|
|
41
|
+
| None of the above | plain text |
|
|
42
42
|
|
|
43
43
|
## Failure modes
|
|
44
44
|
|
|
45
45
|
- _Emphasis inflation._ So much is marked that nothing reads as marked. The fix is subtraction: cut until what remains is exactly enough to allow a reader to skim and understand the paragraph.
|
|
46
46
|
- _Marker collision._ The same word bolded in one passage and italicised in another. Decide whether the word is a hard entity (**bold**) or a thematic concept (_italics_) and stick to it.
|
|
47
47
|
- _Double marking._ `**_both at once_**` spends two signals on one job and looks messy. Pick one.
|
|
48
|
-
- _Runaway italics._ Italics past a few words — a whole paragraph or a long quotation. Concepts are punchy; if you italicise a whole sentence, you destroy the scannability.
|
|
49
|
-
- _Bold as outline._ Bolded lead-ins carrying a hierarchy across paragraphs, where a heading (`##`) or list is the real answer.
|
|
48
|
+
- _Runaway italics._ Italics past a few words — a whole paragraph or a long quotation. Concepts are punchy; if you italicise a whole sentence, you destroy the scannability.
|
|
49
|
+
- _Bold as outline._ Bolded lead-ins carrying a hierarchy across paragraphs, where a heading (`##`) or list is the real answer.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "task-manager",
|
|
3
3
|
"description": "Query and drive a tree of plans, phases and tasks through hooks, with the plan's decisions kept beside them.",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.7",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"hooks": "./hooks.json",
|
|
7
7
|
"skills": [
|
|
@@ -11,11 +11,11 @@ Its hooks are scripts in its own `hooks/` folder, run as `bun <decisions-dir>/ho
|
|
|
11
11
|
|
|
12
12
|
**Reach decisions through the hooks only.** They sit inside the tree, in `<plan>/decisions/<id>.md`, so `guard-tree` denies a direct read.
|
|
13
13
|
|
|
14
|
-
| Hook
|
|
15
|
-
|
|
16
|
-
| `list-decisions` | Returns a plan's decisions in numbered order, metadata only
|
|
17
|
-
| `get-decision`
|
|
18
|
-
| `add-decision`
|
|
14
|
+
| Hook | Does | Use it when |
|
|
15
|
+
| ---------------- | ---------------------------------------------------------------- | ------------------------------------------------------------------ |
|
|
16
|
+
| `list-decisions` | Returns a plan's decisions in numbered order, metadata only | starting a phase, or checking whether a question is already closed |
|
|
17
|
+
| `get-decision` | Returns one decision in full | the title is not enough |
|
|
18
|
+
| `add-decision` | Numbers, dates and writes a new decision from stdin. **Writes.** | a choice passed the three tests below |
|
|
19
19
|
|
|
20
20
|
Copy each invocation from [`references/usage.md`](references/usage.md). `add-decision` takes the decision text on stdin, as shown there.
|
|
21
21
|
|
|
@@ -17,14 +17,14 @@ The task-manager keeps plans, phases and tasks as Markdown files in a tree, reac
|
|
|
17
17
|
|
|
18
18
|
## Hooks
|
|
19
19
|
|
|
20
|
-
| Hook
|
|
21
|
-
|
|
22
|
-
| `next-entry [--in <name>] [--include-blocked]`
|
|
23
|
-
| `get-entry --id <name> [--meta-only]`
|
|
24
|
-
| `list-entries [--in <name>] [--status <status>]` | A folder's entries in order, metadata only
|
|
25
|
-
| `set-state --id <name> --to <status>`
|
|
26
|
-
| `cleanup [--blocked] [--dry-run]`
|
|
27
|
-
| `sync-tree`
|
|
20
|
+
| Hook | Does |
|
|
21
|
+
| ------------------------------------------------ | --------------------------------------------------------------------------------------------- |
|
|
22
|
+
| `next-entry [--in <name>] [--include-blocked]` | The first entry not `completed` (nor `blocked`, unless included), in full |
|
|
23
|
+
| `get-entry --id <name> [--meta-only]` | One plan, phase or task, in full, or only its metadata |
|
|
24
|
+
| `list-entries [--in <name>] [--status <status>]` | A folder's entries in order, metadata only |
|
|
25
|
+
| `set-state --id <name> --to <status>` | Changes the status and rebuilds the index |
|
|
26
|
+
| `cleanup [--blocked] [--dry-run]` | Deletes `completed` entries, and `blocked` ones with `--blocked`. Confirm with the user first |
|
|
27
|
+
| `sync-tree` | Creates what is missing and rebuilds every index |
|
|
28
28
|
|
|
29
29
|
Flags, outputs and errors: [`references/hooks.md`](references/hooks.md).
|
|
30
30
|
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
## Shared flags
|
|
4
4
|
|
|
5
|
-
| Flag
|
|
6
|
-
|
|
7
|
-
| `--project <dir>` | Folder holding `.g3n.config.json`; default the working directory
|
|
8
|
-
| `--root <dir>`
|
|
9
|
-
| `--id <name>`
|
|
10
|
-
| `--in <name>`
|
|
11
|
-
| `--pretty`
|
|
5
|
+
| Flag | Meaning |
|
|
6
|
+
| ----------------- | ------------------------------------------------------------------ |
|
|
7
|
+
| `--project <dir>` | Folder holding `.g3n.config.json`; default the working directory |
|
|
8
|
+
| `--root <dir>` | The tree folder itself, skipping the config |
|
|
9
|
+
| `--id <name>` | A plan or phase name, or a task id. Searched across the whole tree |
|
|
10
|
+
| `--in <name>` | Whose entries; omit for the plans at the root |
|
|
11
|
+
| `--pretty` | Indented JSON |
|
|
12
12
|
|
|
13
13
|
## Output
|
|
14
14
|
|
|
@@ -21,9 +21,9 @@ JSON on stdout, messages on stderr.
|
|
|
21
21
|
|
|
22
22
|
## Fired by the plugin
|
|
23
23
|
|
|
24
|
-
| Hook
|
|
25
|
-
|
|
26
|
-
| `sync-tree`
|
|
24
|
+
| Hook | Event | Does |
|
|
25
|
+
| ------------ | ---------------------------------- | ----------------------------- |
|
|
26
|
+
| `sync-tree` | `SessionStart` | Rebuilds every index |
|
|
27
27
|
| `guard-tree` | `PreToolUse` on `Read\|Grep\|Glob` | Denies a path inside the tree |
|
|
28
28
|
|
|
29
29
|
## Errors
|
|
@@ -8,18 +8,18 @@
|
|
|
8
8
|
|
|
9
9
|
The hooks check it against `TaskSchema` and reject any other key.
|
|
10
10
|
|
|
11
|
-
| Key
|
|
12
|
-
|
|
13
|
-
| `id`
|
|
14
|
-
| `title`
|
|
15
|
-
| `package`
|
|
16
|
-
| `priority`
|
|
17
|
-
| `depends_on`
|
|
18
|
-
| `summary`
|
|
19
|
-
| `complexity`
|
|
20
|
-
| `worktree`
|
|
21
|
-
| `worktree_type` | `feature`, `fix`, `refactor`, `chore`, `docs`, `snapshot`, `demo` or `experiment`. Becomes the branch prefix
|
|
22
|
-
| `status`
|
|
11
|
+
| Key | Rule |
|
|
12
|
+
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
13
|
+
| `id` | A prefix, a hyphen, then digits, e.g. `TASK-012`. Unique across the tree: continue from the highest in use, shown per phase by `bun <task-manager-dir>/hooks/list-entries.ts --in <phase>` |
|
|
14
|
+
| `title` | A few words naming the deliverable |
|
|
15
|
+
| `package` | The package the work lands in |
|
|
16
|
+
| `priority` | `critical`, `high`, `medium` or `low` |
|
|
17
|
+
| `depends_on` | Ids of tasks that must be handed over first; `[]` when none |
|
|
18
|
+
| `summary` | One sentence: what is different once the task is done |
|
|
19
|
+
| `complexity` | `1` to `5`. Optional |
|
|
20
|
+
| `worktree` | Always `true` |
|
|
21
|
+
| `worktree_type` | `feature`, `fix`, `refactor`, `chore`, `docs`, `snapshot`, `demo` or `experiment`. Becomes the branch prefix |
|
|
22
|
+
| `status` | `open` at creation |
|
|
23
23
|
|
|
24
24
|
## Status
|
|
25
25
|
|
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "teach",
|
|
3
3
|
"description": "Teach through real work: build, explain, dive deep, decide architecture, debug and review while the user learns the reasoning.",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.7",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
|
-
"skills": [
|
|
6
|
+
"skills": [
|
|
7
|
+
"./teaching",
|
|
8
|
+
"./learn-by-building",
|
|
9
|
+
"./explain",
|
|
10
|
+
"./deep-dive",
|
|
11
|
+
"./architecture",
|
|
12
|
+
"./guided-debugging",
|
|
13
|
+
"./guided-review"
|
|
14
|
+
]
|
|
7
15
|
}
|
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
Keep this record when an investigation has several plausible hypotheses or spans several experiments.
|
|
4
4
|
|
|
5
|
-
| Field
|
|
6
|
-
|
|
|
7
|
-
| Exact symptom
|
|
8
|
-
| Producer and stage | Component that produced the evidence, and where it failed
|
|
9
|
-
| Relevant state
|
|
10
|
-
| Hypothesis
|
|
11
|
-
| Prediction
|
|
12
|
-
| Experiment
|
|
13
|
-
| Observation
|
|
14
|
-
| Interpretation
|
|
5
|
+
| Field | Record |
|
|
6
|
+
| ------------------ | ------------------------------------------------------------- |
|
|
7
|
+
| Exact symptom | Error, wrong result, timing and reproduction boundary |
|
|
8
|
+
| Producer and stage | Component that produced the evidence, and where it failed |
|
|
9
|
+
| Relevant state | Configuration, inputs, dependencies and environment |
|
|
10
|
+
| Hypothesis | A testable causal explanation |
|
|
11
|
+
| Prediction | The result expected if the hypothesis is right |
|
|
12
|
+
| Experiment | A small, safe action that tells the likely explanations apart |
|
|
13
|
+
| Observation | The result of the experiment, uninterpreted |
|
|
14
|
+
| Interpretation | Hypotheses strengthened, weakened or eliminated |
|
|
15
15
|
|
|
16
16
|
Update the hypothesis set after each experiment instead of piling up unrelated fixes.
|
|
17
17
|
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
Track understanding per concept, never as one level for the whole person. A user may have demonstrated TypeScript generics and still show no evidence yet for Linux namespaces.
|
|
4
4
|
|
|
5
|
-
| State
|
|
6
|
-
|
|
|
7
|
-
| Unknown
|
|
8
|
-
| Partial
|
|
9
|
-
| Understood
|
|
10
|
-
| Demonstrated | Applies it alone in real work and reads the result correctly | Step back; step in only for risk, new constraints or contradicting evidence
|
|
5
|
+
| State | Evidence | Guidance |
|
|
6
|
+
| ------------ | ------------------------------------------------------------ | ---------------------------------------------------------------------------------- |
|
|
7
|
+
| Unknown | None yet. Unobserved, not incapable | Explain directly, and demonstrate before expecting independent use |
|
|
8
|
+
| Partial | Part of the model, with a gap or misconception | Keep what is right and repair only the missing connection |
|
|
9
|
+
| Understood | Explains or reasons correctly with some support | Stop re-explaining; let the user reason through the next decision worth practicing |
|
|
10
|
+
| Demonstrated | Applies it alone in real work and reads the result correctly | Step back; step in only for risk, new constraints or contradicting evidence |
|
|
11
11
|
|
|
12
12
|
## Evidence
|
|
13
13
|
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "using-hooks",
|
|
3
3
|
"description": "How to write each Claude Code lifecycle hook.",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.7",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
|
-
"skills": [
|
|
6
|
+
"skills": [
|
|
7
|
+
"./hook-pre-tool-use",
|
|
8
|
+
"./hook-post-tool-use",
|
|
9
|
+
"./hook-stop",
|
|
10
|
+
"./hook-user-prompt-submit"
|
|
11
|
+
]
|
|
7
12
|
}
|
|
@@ -20,8 +20,15 @@ The four common fields, the call, and what came back:
|
|
|
20
20
|
"cwd": "/home/you/project",
|
|
21
21
|
"hook_event_name": "PostToolUse",
|
|
22
22
|
"tool_name": "Edit",
|
|
23
|
-
"tool_input": {
|
|
24
|
-
|
|
23
|
+
"tool_input": {
|
|
24
|
+
"file_path": "/home/you/project/src/index.ts",
|
|
25
|
+
"old_string": "…",
|
|
26
|
+
"new_string": "…"
|
|
27
|
+
},
|
|
28
|
+
"tool_response": {
|
|
29
|
+
"filePath": "/home/you/project/src/index.ts",
|
|
30
|
+
"success": true
|
|
31
|
+
}
|
|
25
32
|
}
|
|
26
33
|
```
|
|
27
34
|
|
|
@@ -34,7 +41,12 @@ Same tool-name regex as [`hook-pre-tool-use`](../hook-pre-tool-use/SKILL.md), an
|
|
|
34
41
|
```json
|
|
35
42
|
{
|
|
36
43
|
"matcher": "Edit|MultiEdit|Write",
|
|
37
|
-
"hooks": [
|
|
44
|
+
"hooks": [
|
|
45
|
+
{
|
|
46
|
+
"type": "command",
|
|
47
|
+
"command": "$CLAUDE_PROJECT_DIR/.claude/hooks/format-edited-file.ts"
|
|
48
|
+
}
|
|
49
|
+
]
|
|
38
50
|
}
|
|
39
51
|
```
|
|
40
52
|
|
|
@@ -20,7 +20,10 @@ The four common fields, plus the call about to be made:
|
|
|
20
20
|
"cwd": "/home/you/project",
|
|
21
21
|
"hook_event_name": "PreToolUse",
|
|
22
22
|
"tool_name": "Write",
|
|
23
|
-
"tool_input": {
|
|
23
|
+
"tool_input": {
|
|
24
|
+
"file_path": "/home/you/project/src/index.ts",
|
|
25
|
+
"content": "…"
|
|
26
|
+
}
|
|
24
27
|
}
|
|
25
28
|
```
|
|
26
29
|
|
|
@@ -33,7 +36,12 @@ This event selects by tool name, as a regex:
|
|
|
33
36
|
```json
|
|
34
37
|
{
|
|
35
38
|
"matcher": "Edit|MultiEdit|Write",
|
|
36
|
-
"hooks": [
|
|
39
|
+
"hooks": [
|
|
40
|
+
{
|
|
41
|
+
"type": "command",
|
|
42
|
+
"command": "$CLAUDE_PROJECT_DIR/.claude/hooks/guard-protected-paths.ts"
|
|
43
|
+
}
|
|
44
|
+
]
|
|
37
45
|
}
|
|
38
46
|
```
|
|
39
47
|
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "workflow",
|
|
3
3
|
"description": "Work a phase of a plan through plan, execute, review and sync, one agent per step, with hooks deciding when a step is finished.",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.7",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
|
-
"dependencies": [
|
|
7
|
-
|
|
6
|
+
"dependencies": [
|
|
7
|
+
"task-manager@g3n"
|
|
8
|
+
],
|
|
9
|
+
"agents": [
|
|
10
|
+
"./review/agents/reviewer.md"
|
|
11
|
+
],
|
|
8
12
|
"skills": [
|
|
9
13
|
"./run",
|
|
10
14
|
"./plan",
|
|
@@ -11,12 +11,12 @@ Hooks are scripts in a skill's `hooks/` folder, run with `bun`. `<task-manager-d
|
|
|
11
11
|
|
|
12
12
|
`bun <orchestrator-dir>/hooks/ready-phases.ts --plan <plan>` sorts the plan's phases by gate:
|
|
13
13
|
|
|
14
|
-
| Field
|
|
15
|
-
|
|
16
|
-
| `ready`
|
|
17
|
-
| `waiting`
|
|
18
|
-
| `blocked`
|
|
19
|
-
| `completed` | finished phases
|
|
14
|
+
| Field | Holds |
|
|
15
|
+
| ----------- | ------------------------------------------------------------------ |
|
|
16
|
+
| `ready` | phases whose gate is open, in queue order, each in full |
|
|
17
|
+
| `waiting` | phases behind a closed gate, with the phases they are `waiting_on` |
|
|
18
|
+
| `blocked` | phases set to `blocked` |
|
|
19
|
+
| `completed` | finished phases |
|
|
20
20
|
|
|
21
21
|
1. **Claim the plan** with `bun <task-manager-dir>/hooks/set-state.ts --id <plan> --to in-progress`, unless it already is.
|
|
22
22
|
2. **Read the gates** with `ready-phases`.
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: plan
|
|
3
3
|
description: Use as the plan step of the workflow, when a phase has no tasks yet, or when the user wants a phase broken down.
|
|
4
|
-
registryDependencies:
|
|
4
|
+
registryDependencies:
|
|
5
|
+
[task-manager, writing-great-tasks, vocabulary, decisions, grilling, run]
|
|
5
6
|
disable-model-invocation: false
|
|
6
7
|
---
|
|
7
8
|
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: review
|
|
3
3
|
description: Use as the review step of the workflow, when every remaining task of a phase is in-review, or when the user wants a phase's work checked before it is merged.
|
|
4
|
-
registryDependencies:
|
|
4
|
+
registryDependencies:
|
|
5
|
+
[task-manager, writing-great-tasks, vocabulary, decisions, run]
|
|
5
6
|
disable-model-invocation: false
|
|
6
7
|
---
|
|
7
8
|
|