@owlmeans/create-app 0.1.13 → 0.1.15
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/README.md +10 -0
- package/build/run.d.ts.map +1 -1
- package/build/run.js +26 -24
- package/build/run.js.map +1 -1
- package/build/template.d.ts.map +1 -1
- package/build/template.js +3 -0
- package/build/template.js.map +1 -1
- package/package.json +5 -5
- package/template/CLAUDE.md +60 -20
- package/template/README.md +13 -4
- package/template/_agents/memory/MEMORY.md +17 -0
- package/template/_claude/skills/agent-memory/SKILL.md +142 -0
- package/template/_claude/skills/getting-started/SKILL.md +104 -0
- package/template/_claude/skills/git/SKILL.md +53 -0
- package/template/_claude/skills/memory-promotion/SKILL.md +111 -0
- package/template/_claude/skills/memory-recompact/SKILL.md +72 -0
- package/template/_claude/skills/reuse-code/SKILL.md +63 -0
- package/template/_claude/skills/self-education/SKILL.md +83 -0
- package/template/_claude/skills/skill-authoring/SKILL.md +84 -0
- package/template/_github/copilot-instructions.md +66 -21
- package/template/_github/instructions/agent-memory.instructions.md +143 -0
- package/template/_github/instructions/getting-started.instructions.md +62 -0
- package/template/_github/instructions/git.instructions.md +52 -0
- package/template/_github/instructions/memory-promotion.instructions.md +111 -0
- package/template/_github/instructions/memory-recompact.instructions.md +73 -0
- package/template/_github/instructions/reuse-code.instructions.md +50 -0
- package/template/_github/instructions/self-education.instructions.md +85 -0
- package/template/_github/instructions/skill-authoring.instructions.md +66 -0
- package/template/_claude/memory/MEMORY.md +0 -11
- package/template/_github/memory/MEMORY.md +0 -11
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: memory-promotion
|
|
3
|
+
description: Transform procedure-shaped or repeatedly-used memory into skills and instructions — the procedure-shape test, the mandatory distillation rewrite, promote? repeated-touch flags, over-cap trigger, update-vs-create decision, and the post-promotion pointer state. Use when memory content reads as "how to", when a promote? flag is encountered again, when writing memory-derived content into a skill, or during recompaction.
|
|
4
|
+
user-invocable: true
|
|
5
|
+
scope: general
|
|
6
|
+
---
|
|
7
|
+
<!-- AUTO-GENERATED — do not edit. Regenerate via sync-agent-meta. -->
|
|
8
|
+
|
|
9
|
+
# Memory promotion
|
|
10
|
+
|
|
11
|
+
Memory holds **facts**; **procedures** belong in skills/instructions, where they auto-invoke and
|
|
12
|
+
stop consuming memory-read cycles. Promotion is how the store stays compact and the harness
|
|
13
|
+
teaches itself.
|
|
14
|
+
|
|
15
|
+
Promotion is a **rewrite, never a move**. Memory text pasted into a skill is the single most
|
|
16
|
+
common way this harness degrades — see Distillation below.
|
|
17
|
+
|
|
18
|
+
## Triggers
|
|
19
|
+
|
|
20
|
+
- **Procedure shape**: the content answers *how to do X* — ordered steps, imperative verbs,
|
|
21
|
+
command lines, if-this-do-that tables. Promote it.
|
|
22
|
+
- **Repeated touch**: an existing ` → promote?` flag on content you are touching again means
|
|
23
|
+
promote now; if mid-task, promotion becomes the first row of the completion report.
|
|
24
|
+
- **Over-cap**: a node past the 120-line hard cap with roughly a third or more procedure-shaped
|
|
25
|
+
content → promote the procedures instead of splitting the node.
|
|
26
|
+
- Corroborating only (weak — agents don't commit, so only user commits appear):
|
|
27
|
+
`git log --oneline -- .agents/memory/<node>.md` showing ≥ 3 commits within ~a month marks a
|
|
28
|
+
hot node worth evaluating.
|
|
29
|
+
|
|
30
|
+
## Procedure-shape test
|
|
31
|
+
|
|
32
|
+
Procedure-shaped answers *how to do X*: ordered steps, imperative verbs, commands, action tables.
|
|
33
|
+
Fact-shaped answers *what is true*: declarative structure, invariants, symptom→cause pairs.
|
|
34
|
+
Mixed entries split — the fact stays in the node, the "then do" is distilled into a rule in the
|
|
35
|
+
skill.
|
|
36
|
+
|
|
37
|
+
## Distillation (mandatory)
|
|
38
|
+
|
|
39
|
+
**Never paste memory text into a skill.** A promoted line leaves the node as prose about a past
|
|
40
|
+
occurrence and enters the skill as **one general rule**: *when this applies → do this → or this
|
|
41
|
+
breaks*, stated so it holds next time rather than describing last time.
|
|
42
|
+
|
|
43
|
+
| Strip | Keep |
|
|
44
|
+
|---|---|
|
|
45
|
+
| dates, phase/status markers, "COMPLETE", "landed" | the condition that makes the rule apply |
|
|
46
|
+
| versions, image tags, SHAs — unless the rule turns on the version | the step to take |
|
|
47
|
+
| "was X, now Y", "the former X was removed" | the failure it prevents |
|
|
48
|
+
| who did it, attempt sequences, incident narrative | the recognition fingerprint (symptom) |
|
|
49
|
+
| point-in-time inventories, counts, snapshots | |
|
|
50
|
+
|
|
51
|
+
Before (memory): "2026-07-05 — the control-board git card was removed; the dialog now owns all
|
|
52
|
+
git actions."
|
|
53
|
+
After (rule): "Git actions live in the git dialog; the control board holds none."
|
|
54
|
+
|
|
55
|
+
Before (memory): "Phase 3 (COMPLETE, 2026-06-13): added the init-container build, publisher
|
|
56
|
+
`src/build.ts`, kephemeral v0.1.5."
|
|
57
|
+
After (rule): "Production images build in an init container driven by `publisher/src/build.ts`."
|
|
58
|
+
|
|
59
|
+
**If the rule cannot be stated without saying when it happened, it is not promotable** — it stays
|
|
60
|
+
a memory fact, or it is dropped.
|
|
61
|
+
|
|
62
|
+
### Budget
|
|
63
|
+
|
|
64
|
+
A promotion normally adds **1–5 lines** to an existing skill, and a single rule is ≤ 3 lines. A
|
|
65
|
+
whole new section, or more text added than the node lost, means the content was moved rather than
|
|
66
|
+
distilled — redo it.
|
|
67
|
+
|
|
68
|
+
A skill may legitimately run long when it maps a large subsystem, so length alone is not the test:
|
|
69
|
+
**every line must be a rule, a contract, or a pointer.** A section that reads as the story of how
|
|
70
|
+
the code got there is pollution at any length. "Record the rule, not the story" (`agent-memory`)
|
|
71
|
+
binds skill bodies at least as tightly as it binds nodes.
|
|
72
|
+
|
|
73
|
+
## Flagging (how content earns promotion)
|
|
74
|
+
|
|
75
|
+
When you **merge** procedure-shaped content into a node, or you **use** (not merely check) a
|
|
76
|
+
node's content to perform a task, append ` → promote?` to that line or section heading.
|
|
77
|
+
Evaluable by reading the file alone — no tooling required.
|
|
78
|
+
|
|
79
|
+
## Update vs create
|
|
80
|
+
|
|
81
|
+
**Default is update** — extend the existing skill/instruction whose scope covers the activity,
|
|
82
|
+
even partially; keep both twins in sync. Create a NEW pair only when:
|
|
83
|
+
|
|
84
|
+
- (a) a new subsystem or technology entered the repo;
|
|
85
|
+
- (b) an activity with no covering skill needed memory read/write more than once (a
|
|
86
|
+
re-encountered ` → promote?` flag);
|
|
87
|
+
- (c) an external technology required internet docs and has no governing skill.
|
|
88
|
+
|
|
89
|
+
New skills multiply lookup cost — compactness applies to the skill population *and* to each
|
|
90
|
+
skill's body.
|
|
91
|
+
|
|
92
|
+
## Procedure
|
|
93
|
+
|
|
94
|
+
1. Collect the flagged / procedure-shaped memory lines.
|
|
95
|
+
2. **Distill** each into a general rule (section above). Not optional — skipping it is the
|
|
96
|
+
failure mode this skill exists to prevent.
|
|
97
|
+
3. Author or extend the SKILL.md and its `.github/instructions/<name>.instructions.md` twin,
|
|
98
|
+
following the repo's `skill-authoring` or `create-skill` conventions. Where an existing rule
|
|
99
|
+
already covers the ground, **rewrite that rule in place**; append only when nothing covers it.
|
|
100
|
+
4. Shrink the node: delete the source lines; leave one pointer line (format below).
|
|
101
|
+
5. Remove the ` → promote?` flags.
|
|
102
|
+
6. Update the node's index hook if its main value moved; bump `updated:`.
|
|
103
|
+
7. Report per the Reporting rule.
|
|
104
|
+
|
|
105
|
+
## Post-promotion state
|
|
106
|
+
|
|
107
|
+
The node keeps exactly one line under `## Pointers`:
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
- <activity> → skill `<name>` (procedure lives in .claude/skills/<name>/ + .github/instructions/<name>.instructions.md)
|
|
111
|
+
```
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: memory-recompact
|
|
3
|
+
description: Recompact or migrate a whole .agents/memory/ store — rebuild the node map from project structure, merge event-shaped records into subsystem nodes, deduplicate, enforce caps, regenerate the MEMORY.md index, and fold in legacy .claude/memory and .github/memory stores. Use when a store degrades into event logs, indexes bloat or conflict, or for one-time migration.
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
scope: general
|
|
6
|
+
---
|
|
7
|
+
<!-- AUTO-GENERATED — do not edit. Regenerate via sync-agent-meta. -->
|
|
8
|
+
|
|
9
|
+
# Memory recompaction
|
|
10
|
+
|
|
11
|
+
Whole-store maintenance for `.agents/memory/` (protocol: `agent-memory`). Also the migration
|
|
12
|
+
procedure for legacy `.claude/memory/` + `.github/memory/` stores. Store-wide rewrite — propose
|
|
13
|
+
it when triggers appear; the operator invokes it.
|
|
14
|
+
|
|
15
|
+
## When
|
|
16
|
+
|
|
17
|
+
- An index entry runs longer than one line, or the index exceeds 50 lines.
|
|
18
|
+
- Nodes keyed by event/date/phase/task, or bodies reading as session narratives.
|
|
19
|
+
- The same fact stated in two or more nodes.
|
|
20
|
+
- More than ~20% of a node is stale `Status` content.
|
|
21
|
+
- A node's `updated:` is months behind commits touching its scope.
|
|
22
|
+
- Legacy `.claude/memory/` or `.github/memory/` dirs exist → run the migration below.
|
|
23
|
+
|
|
24
|
+
## Build the target node map first
|
|
25
|
+
|
|
26
|
+
Before reading any record bodies, derive the node set from **project structure**: workspaces
|
|
27
|
+
array / top-level dirs → subsystem nodes; then the cross-cutting concerns and external
|
|
28
|
+
integrations actually present. Write the map down (old file/section → target node). Every
|
|
29
|
+
existing record must land in exactly one node — or split into atoms landing in several. Only
|
|
30
|
+
then process records.
|
|
31
|
+
|
|
32
|
+
## Per-record pass
|
|
33
|
+
|
|
34
|
+
For each old file or section:
|
|
35
|
+
|
|
36
|
+
1. Apply the `agent-memory` extraction rule — keep invariants, cause→effect, counter-moves,
|
|
37
|
+
symptom fingerprints; drop narratives, dates, attempt logs, anything code/git already states.
|
|
38
|
+
2. Route each surviving atom to its node's section (Facts / Invariants / Gotchas / Pointers;
|
|
39
|
+
genuinely in-flight state → `Status`, dated).
|
|
40
|
+
3. On conflict between records, the version consistent with **current code** wins — check the
|
|
41
|
+
code, don't average.
|
|
42
|
+
4. Procedure-shaped survivors do not enter nodes — route them to `memory-promotion`. Routing
|
|
43
|
+
means distilling them into general rules, never handing the text over verbatim.
|
|
44
|
+
|
|
45
|
+
## Legacy-store merge (migration)
|
|
46
|
+
|
|
47
|
+
1. Union `.claude/memory/` and `.github/memory/`. Same-named files are two drifted sources of
|
|
48
|
+
ONE node — merge both; the code-consistent version wins.
|
|
49
|
+
2. Index-only entries with no backing file: extract the fact into its node, or drop if stale.
|
|
50
|
+
3. Old `## Skills` / "Key Files" index sections are dropped — skills self-describe; harness
|
|
51
|
+
layout belongs to `CLAUDE.md` / `.github/copilot-instructions.md`. Move genuinely non-obvious
|
|
52
|
+
dispatch hints there.
|
|
53
|
+
4. When the new store verifies (below), delete both legacy dirs entirely.
|
|
54
|
+
|
|
55
|
+
## Regenerate the index
|
|
56
|
+
|
|
57
|
+
Rebuild `MEMORY.md` from the resulting nodes per the `agent-memory` format — never edit the old
|
|
58
|
+
index incrementally.
|
|
59
|
+
|
|
60
|
+
## Verify
|
|
61
|
+
|
|
62
|
+
- Every node file is listed in the index; every listed node exists; every wiki-link resolves.
|
|
63
|
+
- All caps met (index ≤ 50 lines; nodes ≤ 120; entries ≤ 3 lines; Status ≤ 5 dated lines).
|
|
64
|
+
- No dates outside `Status` and `updated:`; no event-keyed filenames.
|
|
65
|
+
- Both root instruction files' Memory sections point at `.agents/memory/`.
|
|
66
|
+
- Legacy dirs gone; `grep -rn '\.claude/memory\|\.github/memory'` over the repo's harness files
|
|
67
|
+
returns nothing but allowlisted historical mentions.
|
|
68
|
+
|
|
69
|
+
## Report
|
|
70
|
+
|
|
71
|
+
One table: **Node** | **Sources merged** | **Lines before → after**. Follow the Reporting rule
|
|
72
|
+
(what, not why).
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: reuse-code
|
|
3
|
+
description: Discovery-first, reuse-first workflow for OwlMeans projects. Use BEFORE planning or building any feature, before proposing a third-party library or a custom solution, and after writing code. Find an existing @owlmeans/* package or existing code first; extend before writing new; simplify what you write.
|
|
4
|
+
user-invocable: true
|
|
5
|
+
scope: general
|
|
6
|
+
---
|
|
7
|
+
<!-- AUTO-GENERATED — do not edit. Regenerate via sync-agent-meta. -->
|
|
8
|
+
|
|
9
|
+
# Reuse before you build
|
|
10
|
+
|
|
11
|
+
OwlMeans ships a large framework of `@owlmeans/*` packages. Before you propose a third-party library,
|
|
12
|
+
design a custom solution, or finish a feature, exhaust what already exists. Apply these four steps in
|
|
13
|
+
order — during planning **and** during implementation.
|
|
14
|
+
|
|
15
|
+
## 1. Find an `@owlmeans/*` package first
|
|
16
|
+
|
|
17
|
+
Before suggesting any external library or writing custom code, look for an `@owlmeans/*` package that
|
|
18
|
+
already solves the problem.
|
|
19
|
+
|
|
20
|
+
- **Consult the deployed skills.** Each installed `@owlmeans/*` package ships a skill at
|
|
21
|
+
`.claude/skills/<pkg>/SKILL.md` (and `.github/instructions/<pkg>.instructions.md`) describing what it
|
|
22
|
+
does. Read those first — they are your local catalogue of installed capabilities.
|
|
23
|
+
- **Scan installed packages.** Look in `node_modules/@owlmeans/*` **and**, in a workspace monorepo,
|
|
24
|
+
the nested `sources/*/node_modules/@owlmeans/*` (bun nests workspace deps).
|
|
25
|
+
- **Discover packages that aren't installed yet** by researching the **owlmeans/common** repository —
|
|
26
|
+
its dependency map (`tree.md`) and the per-package READMEs name every package and its purpose.
|
|
27
|
+
|
|
28
|
+
### Local vs. web research (the symlink rule)
|
|
29
|
+
|
|
30
|
+
How you research the repo depends on whether `@owlmeans/*` is linked locally:
|
|
31
|
+
|
|
32
|
+
- Run `ls -la node_modules/@owlmeans/<pkg>` (try a package you know is installed). If it is a **symlink
|
|
33
|
+
whose target escapes `node_modules`** — or if the project's *own* workspace publishes `@owlmeans/*`
|
|
34
|
+
packages (i.e. **this is the common repo**) — you have the source locally. **Research locally:** read
|
|
35
|
+
`tree.md`, browse the framework's package sources, and read the canonical `.claude/skills/`. **Do
|
|
36
|
+
not** use the internet.
|
|
37
|
+
- Otherwise (a clean install from npm), **research the web**: fetch/search
|
|
38
|
+
**https://github.com/owlmeans/common** — `tree.md` and package READMEs — to find the right package.
|
|
39
|
+
|
|
40
|
+
This is the same dev-linked detection `@owlmeans/agent-skills` uses (see its `detectLinked`). After
|
|
41
|
+
adding an `@owlmeans/*` dependency, run `npx @owlmeans/agent-skills` to deploy its skill. Prefer an
|
|
42
|
+
`@owlmeans/*` package over a third-party library or bespoke code whenever one fits.
|
|
43
|
+
|
|
44
|
+
## 2. Reuse or extend before writing custom
|
|
45
|
+
|
|
46
|
+
If an installed package nearly fits, **configure or extend it** rather than writing something new — use
|
|
47
|
+
its resources, services, modules, and helpers. A small extension of a framework package beats a new
|
|
48
|
+
parallel implementation.
|
|
49
|
+
|
|
50
|
+
## 3. No package? Reuse code and extract an abstraction
|
|
51
|
+
|
|
52
|
+
When no package solves it, search the codebase for code that already solves a **similar** problem.
|
|
53
|
+
Prefer factoring out a shared helper, base, or generic function — extract an abstraction — over
|
|
54
|
+
duplicating logic or writing from scratch. Only write genuinely new code when nothing reusable exists.
|
|
55
|
+
|
|
56
|
+
## 4. Simplify after writing
|
|
57
|
+
|
|
58
|
+
Once code is written, review it: can it be **shorter, clearer, or expressed with fewer moving parts**?
|
|
59
|
+
Lean on framework utilities, remove dead branches, collapse needless indirection. Less code that reuses
|
|
60
|
+
the framework is better than more bespoke code.
|
|
61
|
+
|
|
62
|
+
See `[[dependency-tree]]` for the package map, `[[scaffolding]]` for how a project is assembled, and
|
|
63
|
+
`[[bun]]` for adding dependencies.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: self-education
|
|
3
|
+
description: Mandatory post-development guidance updating — after functionality is added or changed, rewrite the project skills/instructions the work touched as current rules (never as change notes), record external-doc findings (URL + gist) in the governing skill, or add skills/instructions for new subsystems and technologies. Required before the completion report whenever development started from a plan agreed with the agent.
|
|
4
|
+
user-invocable: true
|
|
5
|
+
scope: general
|
|
6
|
+
---
|
|
7
|
+
<!-- AUTO-GENERATED — do not edit. Regenerate via sync-agent-meta. -->
|
|
8
|
+
|
|
9
|
+
# Self-education
|
|
10
|
+
|
|
11
|
+
After functionality is added or changed, the guidance that describes it must catch up — the agent
|
|
12
|
+
teaches itself for next time. This pass runs after implementation and verification, **before**
|
|
13
|
+
the completion report.
|
|
14
|
+
|
|
15
|
+
## When (mandatory)
|
|
16
|
+
|
|
17
|
+
Development "started from planning" when the session produced a plan the operator approved before
|
|
18
|
+
implementation — a plan-mode approval, an agreed written plan/spec, or an explicit "go ahead" on
|
|
19
|
+
a proposed approach. **Approval of a plan is simultaneously approval of its implicit final step:
|
|
20
|
+
this self-education pass.** A planned task is not finishable without it. If guidance files cannot
|
|
21
|
+
be edited (read-only run), list the required updates in the report instead.
|
|
22
|
+
|
|
23
|
+
Also recommended after any unplanned change that made an existing skill/instruction inaccurate.
|
|
24
|
+
|
|
25
|
+
## Review checklist
|
|
26
|
+
|
|
27
|
+
For each area the work touched:
|
|
28
|
+
|
|
29
|
+
1. Which existing skill/instruction covers it? (Check `.claude/skills/` +
|
|
30
|
+
`.github/instructions/`.)
|
|
31
|
+
2. Do its commands, paths, APIs, and behavior claims still hold after the change?
|
|
32
|
+
3. Fix in place — rewrite the affected lines so they describe current behavior; never append a
|
|
33
|
+
note about what this change did. Keep the skill and its instruction twin in sync.
|
|
34
|
+
|
|
35
|
+
## Shape of an update
|
|
36
|
+
|
|
37
|
+
Skills and instructions state **current rules, not what changed**. Every edit is a rewrite in
|
|
38
|
+
place of the affected lines.
|
|
39
|
+
|
|
40
|
+
Never write into a skill or instruction: dated bulletins ("2026-07-05 — …"), phase or migration
|
|
41
|
+
status ("Phase 3 complete", "migration done", "landed"), "formerly X, now Y", incident
|
|
42
|
+
narratives, fixed-bug logs, or point-in-time inventories. If a line only makes sense to someone
|
|
43
|
+
who watched the change happen, it does not belong in guidance — the rule it taught does, stated
|
|
44
|
+
timelessly. Facts too specific to generalize go to `.agents/memory/` (`agent-memory`); the
|
|
45
|
+
rewrite recipe is `memory-promotion` → Distillation.
|
|
46
|
+
|
|
47
|
+
Test: a finished skill reads as though the feature was always this way.
|
|
48
|
+
|
|
49
|
+
## Non-project skills
|
|
50
|
+
|
|
51
|
+
If a general or imported skill gained an important usage pattern during the work, add the pattern
|
|
52
|
+
to the **deployed copy** in this repo and note it in the report as an upstream candidate —
|
|
53
|
+
canonical archive copies change only on explicit operator request.
|
|
54
|
+
|
|
55
|
+
## External docs
|
|
56
|
+
|
|
57
|
+
If the work required reading internet documentation for an external API, library, or service,
|
|
58
|
+
the governing skill must record it under an `## External docs` heading:
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
- <URL> — <one-line gist of what it settled> (<version/date if load-bearing>)
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Governing skill = the project skill covering the touched area; else the skill covering that
|
|
65
|
+
library; if none exists and the technology will recur, create one (update-vs-create rule in
|
|
66
|
+
`memory-promotion`). Never leave doc findings only in memory or the conversation.
|
|
67
|
+
|
|
68
|
+
## New subsystems / technologies
|
|
69
|
+
|
|
70
|
+
When new technology or a new subsystem entered the repo: create the skill/instruction pair for
|
|
71
|
+
its procedures, and/or the `.agents/memory/` node for its facts — split along the
|
|
72
|
+
memory-vs-skill boundary (`agent-memory` / `memory-promotion`).
|
|
73
|
+
|
|
74
|
+
## Completion gate
|
|
75
|
+
|
|
76
|
+
The completion report must contain a Self-education table:
|
|
77
|
+
|
|
78
|
+
| Item | Action | Path |
|
|
79
|
+
|---|---|---|
|
|
80
|
+
| <area/skill> | updated / created / none-needed | <path> |
|
|
81
|
+
|
|
82
|
+
"none-needed" requires a one-phrase reason. A post-plan completion report without this table is
|
|
83
|
+
a protocol violation.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: skill-authoring
|
|
3
|
+
description: How to add agent guidance to an OwlMeans project — author a Claude Code skill (.claude/skills/<name>/SKILL.md) and its matching GitHub Copilot instruction (.github/instructions/<name>.instructions.md), keep the two in sync, choose frontmatter, and decide skill vs memory. Use when asked to capture knowledge as a skill, add a slash command, or document a repeatable procedure.
|
|
4
|
+
user-invocable: true
|
|
5
|
+
scope: general
|
|
6
|
+
---
|
|
7
|
+
<!-- AUTO-GENERATED — do not edit. Regenerate via sync-agent-meta. -->
|
|
8
|
+
|
|
9
|
+
# Authoring agent guidance (skills + instructions)
|
|
10
|
+
|
|
11
|
+
OwlMeans projects carry agent guidance in two parallel places so both Claude Code and GitHub
|
|
12
|
+
Copilot can use it:
|
|
13
|
+
|
|
14
|
+
| Tool | Location | Shape |
|
|
15
|
+
|---|---|---|
|
|
16
|
+
| Claude Code | `.claude/skills/<name>/SKILL.md` | one directory per skill, `SKILL.md` is the entrypoint |
|
|
17
|
+
| GitHub Copilot | `.github/instructions/<name>.instructions.md` | one file per topic |
|
|
18
|
+
|
|
19
|
+
Author **both** for any guidance you want available to either tool. Keep the same `<name>` on both
|
|
20
|
+
sides so they read as one topic.
|
|
21
|
+
|
|
22
|
+
## SKILL.md (Claude Code)
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
.claude/skills/<name>/
|
|
26
|
+
├── SKILL.md # required — frontmatter + body
|
|
27
|
+
├── reference.md # optional — deeper detail loaded on demand
|
|
28
|
+
└── scripts/ # optional — shell scripts the skill runs
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Frontmatter:
|
|
32
|
+
|
|
33
|
+
```yaml
|
|
34
|
+
---
|
|
35
|
+
name: my-skill # the /slash-command (lowercase, hyphens)
|
|
36
|
+
description: What it does and WHEN to use it. # primary auto-invocation signal
|
|
37
|
+
user-invocable: true # false = background knowledge only, hidden from the / menu
|
|
38
|
+
allowed-tools: Bash(bun *) Read # optional — tools usable without per-call approval
|
|
39
|
+
---
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
The `description` is the most important field: Claude uses it to decide when to auto-invoke the
|
|
43
|
+
skill, so describe both the topic and the trigger ("Use when …").
|
|
44
|
+
|
|
45
|
+
## <name>.instructions.md (Copilot)
|
|
46
|
+
|
|
47
|
+
```yaml
|
|
48
|
+
---
|
|
49
|
+
description: "Short summary — apply when …"
|
|
50
|
+
applyTo: "**/*.ts, **/relevant/**" # globs that auto-attach this instruction
|
|
51
|
+
---
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
`applyTo` controls when Copilot pulls the instruction in. Use the file patterns the guidance is
|
|
55
|
+
actually about; fall back to `**/*.ts, **/*.tsx` if it is broadly relevant.
|
|
56
|
+
|
|
57
|
+
## Keep the pair in sync
|
|
58
|
+
|
|
59
|
+
When you change one side, change the other. They do not have to be identical prose, but they must
|
|
60
|
+
not contradict each other. Cross-reference related guidance by name (e.g. "see the `getting-started`
|
|
61
|
+
skill").
|
|
62
|
+
|
|
63
|
+
## Skill vs memory
|
|
64
|
+
|
|
65
|
+
- **Skill / instruction** — a reusable procedure or reference you (or the tools) will want again,
|
|
66
|
+
worth auto-invoking. Lives in `.claude/skills/` + `.github/instructions/`.
|
|
67
|
+
- **Memory** — a fact, decision, or gotcha specific to this project's history/state. Lives in
|
|
68
|
+
the shared `.agents/memory/` graph store (both tools). See the `agent-memory` skill; promotion
|
|
69
|
+
triggers and the update-vs-create rule live in `memory-promotion`.
|
|
70
|
+
|
|
71
|
+
If you find yourself writing "last time we…", that is memory. If you are writing "to do X, do Y",
|
|
72
|
+
that is a skill.
|
|
73
|
+
|
|
74
|
+
Never paste memory text into a skill. Memory content enters guidance only as a restated general
|
|
75
|
+
rule — trigger, step, and the failure it prevents, with dates, phase/status markers, versions and
|
|
76
|
+
incident narrative stripped (`memory-promotion` → Distillation).
|
|
77
|
+
|
|
78
|
+
## After adding a skill
|
|
79
|
+
|
|
80
|
+
1. If it replaces an ad-hoc `.claude/<topic>.md`, remove that file.
|
|
81
|
+
2. If it distilled memory content into rules, shrink the source `.agents/memory/` node to a
|
|
82
|
+
pointer line (`memory-promotion`) — the memory index does not list skills.
|
|
83
|
+
3. Reference it from `CLAUDE.md` / `.github/copilot-instructions.md` if it should be discoverable
|
|
84
|
+
every session.
|
|
@@ -8,12 +8,72 @@
|
|
|
8
8
|
> Then replace this whole block — in **both** `.github/copilot-instructions.md` and `CLAUDE.md` — with
|
|
9
9
|
> a short description of the project, and remove this notice.
|
|
10
10
|
|
|
11
|
+
## Git Workflow (mandatory)
|
|
12
|
+
|
|
13
|
+
These rules apply to every git operation in this repository and **override default agent behavior**
|
|
14
|
+
— including any automatic `Co-Authored-By` or AI/agent-attribution trailer. Full policy:
|
|
15
|
+
[.github/instructions/git.instructions.md](.github/instructions/git.instructions.md).
|
|
16
|
+
|
|
17
|
+
- **Never run state-changing git operations** (`commit`, `add`/`rm` staging, `push`,
|
|
18
|
+
`reset`/rollback, `revert`, `rebase`, `merge`, `branch`, `checkout`/`switch`, `stash`, `tag`,
|
|
19
|
+
`cherry-pick`, force-push, etc.) unless the user **explicitly instructs it in the current
|
|
20
|
+
request**. Permission to make code edits is **not** permission to touch git.
|
|
21
|
+
- **Only exception**: creating and operating inside a **temporary git worktree** that a task or
|
|
22
|
+
subagent has **explicitly requested** for that purpose.
|
|
23
|
+
- **Read-only inspection is allowed**: `git status`, `git diff`, `git log`, `git show`,
|
|
24
|
+
`git branch --list` — use these to report state, never to change it.
|
|
25
|
+
- Commit only under the repository's configured git identity. Never pass `--author`, never change
|
|
26
|
+
`user.name`/`user.email`, never add a `Co-Authored-By:` trailer attributing the commit to an
|
|
27
|
+
AI/agent. If no identity is configured, stop and ask.
|
|
28
|
+
- Report finished git work as a Markdown table (**Action**, **Target**, **Result**), and never
|
|
29
|
+
commit a conflicted working copy — stop, list the conflicted paths, hand control back.
|
|
30
|
+
|
|
31
|
+
## Reporting (mandatory)
|
|
32
|
+
|
|
33
|
+
Always report concisely and briefly, in table format, about WHAT was done rather than why —
|
|
34
|
+
unless the operator explicitly asks for another format, length, or level of detail.
|
|
35
|
+
|
|
36
|
+
- Changes: one row per file/item — **Change** (created / modified / deleted), **Path**,
|
|
37
|
+
**Why** (one short phrase).
|
|
38
|
+
- Findings / status / verification: a short table plus at most a few lines of prose.
|
|
39
|
+
- No preamble, no narration of the process; expand on WHY only when asked.
|
|
40
|
+
|
|
41
|
+
## Memory
|
|
42
|
+
|
|
43
|
+
Single shared agent memory store: `.agents/memory/` — a graph of subsystem nodes with index
|
|
44
|
+
`.agents/memory/MEMORY.md`. Protocol:
|
|
45
|
+
[.github/instructions/agent-memory.instructions.md](.github/instructions/agent-memory.instructions.md).
|
|
46
|
+
|
|
47
|
+
- Session start: read `.agents/memory/MEMORY.md`. Before non-trivial work: open the nodes whose
|
|
48
|
+
scope matches the task.
|
|
49
|
+
- Every write merges into the matching subsystem node and compacts — record reusable knowledge,
|
|
50
|
+
never session events.
|
|
51
|
+
- Procedure-shaped or repeatedly-touched memory must be **distilled into** an instruction/skill
|
|
52
|
+
as short general rules — never pasted in as memory text — follow
|
|
53
|
+
`.github/instructions/memory-promotion.instructions.md`.
|
|
54
|
+
- If the store degrades (event logs, oversized nodes, bloated index) — follow
|
|
55
|
+
`.github/instructions/memory-recompact.instructions.md`.
|
|
56
|
+
- Never write memory to `.claude/memory/`, `.github/memory/`, `~/.copilot/`, or anywhere outside
|
|
57
|
+
this repository.
|
|
58
|
+
- Context that must load every session belongs in this file; on-demand context goes in
|
|
59
|
+
`.github/instructions/<topic>.instructions.md`.
|
|
60
|
+
|
|
61
|
+
## Self-Education (mandatory)
|
|
62
|
+
|
|
63
|
+
Whenever development started from a plan agreed with the agent, the work is not complete until
|
|
64
|
+
[.github/instructions/self-education.instructions.md](.github/instructions/self-education.instructions.md)
|
|
65
|
+
has been applied: rewrite the project instructions/skills the change touched so they state
|
|
66
|
+
current rules (never a note about what changed), record external-doc findings (URL + gist)
|
|
67
|
+
in the governing instruction, or add an instruction/skill for a new subsystem or technology.
|
|
68
|
+
The completion report must include the self-education outcome — or state why none was needed.
|
|
69
|
+
|
|
11
70
|
## What this is
|
|
12
71
|
|
|
13
72
|
`__APP_NAME__` is a fullstack [OwlMeans Common](https://github.com/owlmeans/common) app: a bun-workspace
|
|
14
73
|
monorepo with three packages under `sources/` — `common` (shared route entrypoints, schemas, config),
|
|
15
|
-
`api` (`@owlmeans/server-app` backend), and `web` (`@owlmeans/web-panel` + shadcn UI). See
|
|
16
|
-
`getting-started.instructions.md` for how the pieces fit together.
|
|
74
|
+
`api` (`@owlmeans/server-app` backend), and `web` (`@owlmeans/web-panel` + shadcn UI). See
|
|
75
|
+
`getting-started.instructions.md` for how the pieces fit together, and `scaffolding.instructions.md`
|
|
76
|
+
for how it was generated.
|
|
17
77
|
|
|
18
78
|
## Reuse before you build (mandatory)
|
|
19
79
|
|
|
@@ -22,24 +82,6 @@ Before planning or writing any feature, follow `reuse-code.instructions.md`: sea
|
|
|
22
82
|
code that already solves the problem **before** proposing a third-party library or a custom solution,
|
|
23
83
|
and simplify whatever you do write. This is required for every planning and development task.
|
|
24
84
|
|
|
25
|
-
## Memory & Meta-file Rules
|
|
26
|
-
|
|
27
|
-
All project memory and meta-information lives **inside this project**, never in `~/.copilot/`:
|
|
28
|
-
|
|
29
|
-
- **Always** write new memory files to `.github/memory/` in this project root.
|
|
30
|
-
- **Always** update `.github/memory/MEMORY.md` when adding a memory file.
|
|
31
|
-
- **Never** write project memory outside the repository.
|
|
32
|
-
- Context that should load every session goes in `.github/copilot-instructions.md`; on-demand context
|
|
33
|
-
goes in `.github/instructions/<topic>.instructions.md`.
|
|
34
|
-
- When asked to remember something about this project, save it to `.github/memory/<topic>.md` and
|
|
35
|
-
update the index. See `agent-memory.instructions.md`.
|
|
36
|
-
|
|
37
|
-
### When to read memory
|
|
38
|
-
|
|
39
|
-
- **At the start of every session**: read `.github/memory/MEMORY.md`, then any relevant file.
|
|
40
|
-
- **Before a non-trivial task**: read the relevant memory or instruction first.
|
|
41
|
-
- **After completing a task** that produced new knowledge: save it to memory.
|
|
42
|
-
|
|
43
85
|
## Instructions
|
|
44
86
|
|
|
45
87
|
Reusable guidance lives in `.github/instructions/<name>.instructions.md`, deployed by
|
|
@@ -47,7 +89,10 @@ Reusable guidance lives in `.github/instructions/<name>.instructions.md`, deploy
|
|
|
47
89
|
|
|
48
90
|
- After adding or updating any `@owlmeans/*` dependency, run `npx @owlmeans/agent-skills` to refresh
|
|
49
91
|
the deployed skills and instructions.
|
|
50
|
-
-
|
|
92
|
+
- Deployed files carry an `AUTO-GENERATED` banner and are refreshed in place — never hand-edit them.
|
|
93
|
+
- To capture your own guidance, see `skill-authoring.instructions.md`; to turn repeatedly-used memory
|
|
94
|
+
into an instruction, `memory-promotion.instructions.md`. Keep it inside this repository — never in
|
|
95
|
+
`~/.copilot/`.
|
|
51
96
|
|
|
52
97
|
## Develop
|
|
53
98
|
|