aiblueprint-cli 1.4.99 → 1.4.101

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.
Files changed (107) hide show
  1. package/README.md +0 -1
  2. package/agents-config/skills/agents-manager/SKILL.md +2 -2
  3. package/agents-config/skills/agents-manager/agents/openai.yaml +7 -0
  4. package/agents-config/skills/agents-manager/assets/codex-icon.svg +20 -0
  5. package/agents-config/skills/apex/SKILL.md +120 -118
  6. package/agents-config/skills/apex/agents/openai.yaml +10 -0
  7. package/agents-config/skills/apex/assets/codex-icon.svg +15 -0
  8. package/agents-config/skills/apex/scripts/apex-state.py +740 -0
  9. package/agents-config/skills/apex/scripts/setup-templates.sh +27 -145
  10. package/agents-config/skills/apex/scripts/test_apex_state.py +413 -0
  11. package/agents-config/skills/apex/scripts/update-progress.sh +17 -73
  12. package/agents-config/skills/apex/steps/step-00-init.md +85 -231
  13. package/agents-config/skills/apex/steps/step-00b-branch.md +10 -118
  14. package/agents-config/skills/apex/steps/step-00b-economy.md +12 -239
  15. package/agents-config/skills/apex/steps/step-00b-interactive.md +13 -162
  16. package/agents-config/skills/apex/steps/step-00b-save.md +13 -114
  17. package/agents-config/skills/apex/steps/step-01-analyze.md +40 -361
  18. package/agents-config/skills/apex/steps/step-02-plan.md +55 -562
  19. package/agents-config/skills/apex/steps/step-02b-tasks.md +15 -291
  20. package/agents-config/skills/apex/steps/step-03-execute-teams.md +47 -267
  21. package/agents-config/skills/apex/steps/step-03-execute.md +32 -212
  22. package/agents-config/skills/apex/steps/step-04-validate.md +42 -246
  23. package/agents-config/skills/apex/steps/step-05-examine.md +47 -371
  24. package/agents-config/skills/apex/steps/step-06-resolve.md +19 -221
  25. package/agents-config/skills/apex/steps/step-07-tests.md +19 -234
  26. package/agents-config/skills/apex/steps/step-08-run-tests.md +13 -300
  27. package/agents-config/skills/apex/steps/step-09-finish.md +36 -200
  28. package/agents-config/skills/apex/steps/step-10-verify.md +46 -264
  29. package/agents-config/skills/appstore-connect/agents/openai.yaml +7 -0
  30. package/agents-config/skills/appstore-connect/assets/codex-icon.svg +17 -0
  31. package/agents-config/skills/commit/agents/openai.yaml +10 -0
  32. package/agents-config/skills/commit/assets/codex-icon.svg +17 -0
  33. package/agents-config/skills/create-pr/agents/openai.yaml +10 -0
  34. package/agents-config/skills/create-pr/assets/codex-icon.svg +17 -0
  35. package/agents-config/skills/environments-manager/SKILL.md +1 -1
  36. package/agents-config/skills/environments-manager/agents/openai.yaml +7 -0
  37. package/agents-config/skills/environments-manager/assets/codex-icon.svg +16 -0
  38. package/agents-config/skills/environments-manager/examples/scripts/claude-worktree-remove.sh +19 -3
  39. package/agents-config/skills/environments-manager/examples/scripts/worktree-up.sh +1 -1
  40. package/agents-config/skills/environments-manager/references/claude.md +1 -1
  41. package/agents-config/skills/fix-pr-comments/agents/openai.yaml +10 -0
  42. package/agents-config/skills/fix-pr-comments/assets/codex-icon.svg +17 -0
  43. package/agents-config/skills/grill-me/SKILL.md +25 -4
  44. package/agents-config/skills/grill-me/agents/openai.yaml +8 -0
  45. package/agents-config/skills/grill-me/assets/codex-icon.svg +16 -0
  46. package/agents-config/skills/hooks-manager/SKILL.md +19 -9
  47. package/agents-config/skills/hooks-manager/assets/codex-icon.svg +15 -4
  48. package/agents-config/skills/hooks-manager/references/claude-code.md +32 -0
  49. package/agents-config/skills/hooks-manager/references/codex.md +23 -0
  50. package/agents-config/skills/hooks-manager/references/cursor.md +18 -0
  51. package/agents-config/skills/hooks-manager/references/hook-types.md +5 -3
  52. package/agents-config/skills/hooks-manager/references/input-output-schemas.md +2 -2
  53. package/agents-config/skills/hooks-manager/references/research-sources.md +25 -0
  54. package/agents-config/skills/hooks-manager/references/router.md +32 -0
  55. package/agents-config/skills/hooks-manager/references/troubleshooting.md +3 -3
  56. package/agents-config/skills/merge/agents/openai.yaml +10 -0
  57. package/agents-config/skills/merge/assets/codex-icon.svg +17 -0
  58. package/agents-config/skills/oneshot/SKILL.md +4 -0
  59. package/agents-config/skills/oneshot/agents/openai.yaml +10 -0
  60. package/agents-config/skills/oneshot/assets/codex-icon.svg +18 -0
  61. package/agents-config/skills/rules-manager/agents/openai.yaml +7 -0
  62. package/agents-config/skills/rules-manager/assets/codex-icon.svg +23 -0
  63. package/agents-config/skills/skill-manager/SKILL.md +45 -3
  64. package/agents-config/skills/skill-manager/agents/openai.yaml +7 -0
  65. package/agents-config/skills/skill-manager/assets/codex-icon.svg +23 -0
  66. package/agents-config/skills/skill-manager/references/skill-writing-glossary.md +201 -0
  67. package/agents-config/skills/skill-manager/scripts/setup-codex-icons.ts +143 -0
  68. package/agents-config/skills/ultrathink/agents/openai.yaml +10 -0
  69. package/agents-config/skills/ultrathink/assets/codex-icon.svg +20 -0
  70. package/agents-config/skills/use-artifacts/SKILL.md +102 -51
  71. package/agents-config/skills/use-artifacts/assets/local-runtime.js +299 -0
  72. package/agents-config/skills/use-artifacts/scripts/create_artifact.py +1 -1
  73. package/agents-config/skills/use-delegate/SKILL.md +4 -0
  74. package/agents-config/skills/use-delegate/agents/openai.yaml +10 -0
  75. package/agents-config/skills/use-delegate/assets/codex-icon.svg +20 -0
  76. package/agents-config/skills/use-goal/SKILL.md +70 -9
  77. package/agents-config/skills/use-goal/agents/openai.yaml +1 -1
  78. package/agents-config/skills/use-goal/assets/codex-icon.svg +17 -3
  79. package/agents-config/skills/use-goal/references/claude-code-goal.md +54 -6
  80. package/agents-config/skills/use-goal/references/codex-goal.md +59 -4
  81. package/agents-config/skills/use-goal/references/verification-harnesses.md +104 -3
  82. package/dist/cli.js +365 -363
  83. package/package.json +1 -1
  84. package/agents-config/skills/apex/templates/00-context.md +0 -55
  85. package/agents-config/skills/apex/templates/01-analyze.md +0 -10
  86. package/agents-config/skills/apex/templates/02-plan.md +0 -10
  87. package/agents-config/skills/apex/templates/03-execute.md +0 -10
  88. package/agents-config/skills/apex/templates/04-validate.md +0 -10
  89. package/agents-config/skills/apex/templates/05-examine.md +0 -10
  90. package/agents-config/skills/apex/templates/06-resolve.md +0 -10
  91. package/agents-config/skills/apex/templates/07-tests.md +0 -10
  92. package/agents-config/skills/apex/templates/08-run-tests.md +0 -10
  93. package/agents-config/skills/apex/templates/09-finish.md +0 -10
  94. package/agents-config/skills/apex/templates/10-verify.md +0 -9
  95. package/agents-config/skills/apex/templates/README.md +0 -195
  96. package/agents-config/skills/apex/templates/step-complete.md +0 -7
  97. package/agents-config/skills/prompt-creator/SKILL.md +0 -285
  98. package/agents-config/skills/prompt-creator/references/anthropic-best-practices.md +0 -126
  99. package/agents-config/skills/prompt-creator/references/anti-patterns.md +0 -57
  100. package/agents-config/skills/prompt-creator/references/clarity-principles.md +0 -54
  101. package/agents-config/skills/prompt-creator/references/context-management.md +0 -389
  102. package/agents-config/skills/prompt-creator/references/few-shot-patterns.md +0 -47
  103. package/agents-config/skills/prompt-creator/references/openai-best-practices.md +0 -50
  104. package/agents-config/skills/prompt-creator/references/prompt-templates.md +0 -110
  105. package/agents-config/skills/prompt-creator/references/reasoning-techniques.md +0 -52
  106. package/agents-config/skills/prompt-creator/references/system-prompt-patterns.md +0 -48
  107. package/agents-config/skills/prompt-creator/references/xml-structure.md +0 -36
@@ -0,0 +1,201 @@
1
+ # Glossary - Building Great Skills
2
+
3
+ The domain model for predictable skills. Every term below is a lever for making an agent follow the same process on repeated runs. This is the disclosed vocabulary reference for [`skill-manager`](../SKILL.md).
4
+
5
+ The terms are grouped by axis: **Invocation** (how a skill is reached), **Information Hierarchy** (how its content is arranged), **Steering** (how the agent's runtime behaviour is shaped), and **Pruning** (how it is kept lean). Each **failure mode** lives beside the lever that cures it, tagged _failure mode_.
6
+
7
+ **Bold terms** in any definition are themselves defined in this glossary; find them by their heading.
8
+
9
+ ## Predictability
10
+
11
+ The degree to which a skill makes the agent behave the same _way_ on every run — the same process, not the same output (a brainstorming skill should _predictably_ diverge; its tokens vary, its behaviour doesn't). The root virtue every other term serves — cost and maintainability are symptoms of it, not rivals.
12
+
13
+ _Avoid_: consistency, reliability, robustness, output-determinism
14
+
15
+ ## Invocation
16
+
17
+ How a skill is reached — and the two loads you pay for the choice.
18
+
19
+ ### Model-Invoked
20
+
21
+ A skill that keeps its **description** field, so the agent can see it and fire it autonomously — and the human can still type its name, so model-invocation always _includes_ user reach. There is no model-only state: a description only ever _adds_ agent discovery, never removes the human's. Pays a permanent **context load** on every turn in exchange for that discoverability. Reachable by other skills, because the description that makes it agent-discoverable makes it invocable. A model-invoked skill whose content is all **reference** is also one home for shared reference: another skill can invoke it, so reference needed by several skills lives in one place. Pick model-invocation only when the agent must reach the skill on its own; if it never fires except by hand, drop the description and pay no context load.
22
+
23
+ _Avoid_: ability, tool, capability
24
+
25
+ ### User-Invoked
26
+
27
+ A skill with its **description** stripped — invisible to the agent and reachable only by the human typing its name (user-_only_, where **model-invoked** is user-_and-agent_). Trades agent-discoverability for zero **context load**. Because it has no description, nothing but the human can reach it: no other skill can fire it.
28
+
29
+ _Avoid_: procedure, workflow, command
30
+
31
+ ### Description
32
+
33
+ The skill's machine-readable trigger, and the one **context pointer** a **model-invoked** skill is forced to keep loaded at all times. Its mere presence _is_ the invocation axis: keep it and the skill is model-invoked (and reachable by other skills); delete it and the skill is **user-invoked**, reachable only by the human. The source of a model-invoked skill's **context load**.
34
+
35
+ _Avoid_: frontmatter, summary
36
+
37
+ ### Context Pointer
38
+
39
+ A reference held in the agent's context that names some out-of-context material and encodes the condition for reaching it. The **description** is the top-level context pointer (context window → skill); pointers to disclosed files are the same object one level down. Its wording, not the target, decides _when_ the agent reaches — and _how reliably_. A must-have target behind a weakly worded pointer is a variance bug: fix the wording first, and inline the material only if sharpening fails.
40
+
41
+ _Avoid_: link, reference, import
42
+
43
+ ### Context Load
44
+
45
+ The cost a **model-invoked** skill imposes on the agent's context window — its **description**, always loaded, spending both tokens and attention. What **user-invoked** skills escape by having no description, and the brake on splitting into more model-invoked skills.
46
+
47
+ _Avoid_: token cost, context bloat
48
+
49
+ ### Cognitive Load
50
+
51
+ The cost a **user-invoked** skill imposes on the human — what they must hold in their head: which skills exist and when to reach for each (the human is the index). What **model-invocation** removes by being agent-discoverable, and the brake on splitting into more user-invoked skills. Not a cost to minimise: it is the price of human agency, the reason some skills stay user-invoked. Spend it where human judgement matters; remove it where it does not.
52
+
53
+ _Avoid_: human index, burden, overhead
54
+
55
+ ### Router Skill
56
+
57
+ A **user-invoked** skill whose job is to point at your other user-invoked skills — naming each and when to reach for it — so the human has one skill to remember instead of many. It can only hint, never fire them: user-invoked skills have no **description**, so nothing but the human can reach them. The cure for **cognitive load** when user-invoked skills multiply.
58
+
59
+ _Avoid_: dispatcher, menu, registry, index, router procedure
60
+
61
+ ### Granularity
62
+
63
+ How finely you divide skills. Finer division spends one of the two loads: more **model-invoked** skills spend **context load** (more descriptions crowding the window and competing for attention); more **user-invoked** skills spend **cognitive load** (more for the human to remember and reach for). Two cuts guide the division. By **invocation**, split off a model-invoked skill where you have a distinct **leading word** to trigger it — a trigger word you actually use in your prompts. By **sequence**, split a run of **steps** where a step's **post-completion steps** need hiding, since isolating it in its own context clears what follows. Beware the reverse: merging sequences exposes each step's post-completion steps to what follows, inviting premature completion.
64
+
65
+ _Avoid_: chunking, modularity
66
+
67
+ ## Information Hierarchy
68
+
69
+ How a skill's content is arranged, and how far down the ladder each piece sits.
70
+
71
+ ### Information Hierarchy
72
+
73
+ A skill's content ranked by how immediately the agent needs it — a single ladder, produced by two cuts: in-file or behind a pointer, and step or reference. The rungs:
74
+
75
+ - **Steps** — in-file, primary
76
+ - **Reference**, in-file — secondary
77
+ - **Reference**, disclosed — behind a **context pointer**
78
+
79
+ A skill with no **steps** uses just the bottom two rungs — often a legitimately flat peer-set (e.g. every rule of a review on one rung), which is a fine arrangement, not a smell. The hierarchy is independent of invocation: a skill can be model- or user-invoked whether it is all steps, all reference, or both. When a skill has steps, in-file reference that should be disclosed buries them and turns attending to them into a coin-flip — a variance lever, not just a legibility one. Keep the top of the ladder legible; push down it whatever you can.
80
+
81
+ _Avoid_: structure, organization, layout
82
+
83
+ ### Steps
84
+
85
+ The ordered actions the agent performs — when a skill has them, the primary tier of its content, and the part that earns its place in SKILL.md. Not every skill has steps: a skill can be all steps (`tdd`), all **reference** (a review), or both, independent of invocation. Every step ends on a **completion criterion**, clear or vague.
86
+
87
+ _Avoid_: workflow, instructions, choreography
88
+
89
+ ### Reference
90
+
91
+ Material the agent refers to on demand — definitions, facts, parameters, examples, conditional instructions. When a skill has **steps** it is secondary to them; when a skill has none it is the entire content; or it lives outside any skill entirely — see **External Reference**. Reached via **context pointers**, and the prime candidate for **progressive disclosure**.
92
+
93
+ _Avoid_: supporting material, docs, background
94
+
95
+ ### External Reference
96
+
97
+ **Reference** that lives outside the skill system — a plain file, no **description**, no **steps**, not invocable — that any skill can point at. The home for shared reference that needn't fire on its own, and the only shared home two **user-invoked** skills can use, since neither has a description and so neither can fire the other.
98
+
99
+ _Avoid_: doc, resource, knowledge base
100
+
101
+ ### Progressive Disclosure
102
+
103
+ Moving **reference** down the ladder — out of SKILL.md and behind a **context pointer** — so the top stays legible. Not primarily a token optimisation; it is how the **information hierarchy** is protected. Licensed by **branching**: disclose what only some branches need, inline what every path needs, and if a pointer fires unreliably on must-have material, sharpen its wording, and pull it back inline only if that fails.
104
+
105
+ _Avoid_: lazy loading, chunking
106
+
107
+ ### Co-location
108
+
109
+ Keeping the material an agent needs at once in one place — a concept's definition, rules, and caveats under a single heading, not scattered across the file — so reading one part brings its neighbours with it. The within-file companion to the **Information Hierarchy**: the hierarchy ranks _how far down_ a piece sits; co-location decides _what sits beside it_ once there. There is no formula for the right format of a body of **reference**; the test is that a skill should read like documentation written for the agent, and grouped material reads that way where scattered material does not. Distinct from **Duplication**: that repeats one meaning in two places, where scattering fragments a single meaning across many.
110
+
111
+ _Avoid_: grouping, clustering, cohesion
112
+
113
+ ### Sprawl
114
+
115
+ _Failure mode._ A skill that is simply too long — too many lines in SKILL.md — independent of whether they are stale or repeated. Even an all-live, all-unique skill can sprawl. It costs readability (the agent wades through more before it can act, and attention thins across the excess), maintainability (every extra line is one more to keep **relevant**), and tokens. The cure is the **information hierarchy**: push **reference** down behind **context pointers**, and split by **branch** or sequence so each path carries only what it needs. Distinct from **sediment** (length from stale accumulation) and **duplication** (length from repeated meaning) — sprawl is length itself, whatever its cause.
116
+
117
+ _Avoid_: bloat, length, size, verbosity
118
+
119
+ ## Steering
120
+
121
+ The levers that shape the agent's runtime behaviour toward **Predictability**.
122
+
123
+ ### Branch
124
+
125
+ A distinct way a skill can be invoked — a case the skill handles — so different runs take different paths through it. A skill with many steps may carry many branches; a linear one has none.
126
+
127
+ _Avoid_: path, case, fork
128
+
129
+ ### Leading Word
130
+
131
+ A compact concept — also called a _Leitwort_ — already living in the model's pretraining, that the agent thinks with while running the skill. It encodes a behavioural principle in the fewest possible tokens by invoking priors the model already holds (e.g. _lesson_, _proximal zone of development_, _fog of war_, _tracer bullets_). Repeated as a token, never as a sentence, it accumulates a distributed definition across the skill and anchors a whole region of behaviour. Coining your own works if you define it clearly, but a made-up word recruits no priors — you pay in definition tokens what a pretrained word gives free. Reach for an existing word first.
132
+
133
+ A leading word serves **predictability** twice. In the body it anchors **execution** — the agent reaches for the same behaviour every time the concept appears, and inside flat reference it focuses attention on a class of thing to look for, recruiting the right checks each run. In the **description** it anchors **invocation** — and not only within the skill: when the same word lives in your prompts, your docs, and your codebase, the agent links that shared language to the skill and fires it more reliably. Word a description with the leading words you actually use when you want the skill.
134
+
135
+ _Avoid_: keyword, term, motif
136
+
137
+ ### Completion Criterion
138
+
139
+ The condition that tells the agent a unit of work is done — the target it judges against. Two properties make it a lever, not just a quality. Its **clarity** (can the agent tell done from not-done?) resists **premature completion** — a vague bound ("understanding reached") lets the agent declare done and slip to the next step; this axis needs _steps_ to bite, since premature completion is a between-steps failure. Its **demand** (how much it requires) sets **legwork** — "every modified model accounted for" forces thorough work where "produce a change list" does not — and this axis is _not_ step-bound: it can bind a body of flat reference too, which is how a skill with no steps still carries an exhaustiveness bar ("every rule applied"). The strongest criteria are both checkable and exhaustive.
140
+
141
+ _Avoid_: done condition, exit condition, stopping rule
142
+
143
+ ### Legwork
144
+
145
+ The work an agent does behind the scenes within a single step — reading files, exploring the codebase, making changes, digging up what it needs rather than offloading to the user. It lives below the step structure: never written as its own step, latent in the wording, controlled by the agent rather than the skill. The within-step counterpart to **post-completion steps**' across-step pull. Raised by a **leading word** (_comprehensive_, _thorough_) or a **completion criterion** that demands the work be exhaustive — including the demand axis applied to flat reference, which is what drives a skill of flat reference to cover all its rungs. Goes thin either when that demand is missing or when **premature completion** cuts the step short.
146
+
147
+ _Avoid_: scope, effort, diligence, coverage
148
+
149
+ ### Post-Completion Steps
150
+
151
+ The **steps** that follow the current step. Visible, they pull the agent forward into **premature completion** — the more it sees, the stronger the tug; the defence is to hide them by splitting the sequence of steps into two.
152
+
153
+ _Avoid_: horizon, fog of war, lookahead
154
+
155
+ ### Premature Completion
156
+
157
+ _Failure mode._ Ending the current step before it is genuinely done, because the agent's attention slips to being done rather than to the work. A between-steps failure: it needs **steps** to occur — a skill with no steps that quits early isn't premature completion but thin **legwork** under an unmet demand. A tug-of-war between two forces: visible **post-completion steps** (the pull forward) and the **completion criterion**'s clarity (the resistance — a sharp, checkable bar holds; a vague one gives way). Fuzziness is the necessary condition: a sharp bound resists the pull no matter how many later steps are visible, so a step that never rushes needs no defending. Two levers hold a step that does, but reach for them in order: **sharpen the bound first** — it is local and cheap. Only when the criterion is irreducibly fuzzy _and_ you actually observe the rush do you **hide the later steps** — and hiding only works across a real context boundary (a user-invoked hand-off or a subagent dispatch; an inline model-invoked call leaves the later steps in context and clears nothing). One cause of thin legwork, but distinct from it: legwork can be thin even when a step runs to full completion.
158
+
159
+ _Avoid_: premature closure, the rush, rushing, shortcutting
160
+
161
+ ### Negation
162
+
163
+ _Failure mode._ Steering by prohibition — telling the agent what _not_ to do — which drags the forbidden behaviour into context and makes it _more_ available, not less. _Don't think of an elephant_, and the elephant is all there is; _never write verbose comments_, and verbosity is the pattern the agent has just read. The negation is a weak modifier the strongly-activated concept overruns, so the ban half-reads as an instruction to do the thing. Its **leading word** is the _elephant_: whatever a prohibition names into the frame. Cure: prompt the **positive** — describe the target behaviour ("write one-line comments") so the banned one is never spoken. A prohibition earns its place only as a hard guardrail on a behaviour you cannot phrase positively; even then, pair it with the positive target so attention lands on what to do.
164
+
165
+ _Avoid_: ironic rebound, don't-prompting, the pink elephant
166
+
167
+ ## Pruning
168
+
169
+ Keeping a skill lean — each remedy paired with the failure it cures.
170
+
171
+ ### Single Source of Truth
172
+
173
+ The desired state where each meaning lives in exactly one authoritative place, so a change to the skill's behaviour is a change in one place. **Duplication** is its violation.
174
+
175
+ _Avoid_: home, canonical location
176
+
177
+ ### Duplication
178
+
179
+ _Failure mode._ The same meaning given more than one **single source of truth**. It costs maintenance (change one place, you must change the others), costs tokens, and inflates prominence — repeating a meaning weights it on the ladder past its real rank. The accidental inverse of a **leading word**, which raises attention on purpose by repeating a token, never the meaning.
180
+
181
+ _Avoid_: repetition, redundancy
182
+
183
+ ### Relevance
184
+
185
+ Whether a line still bears on what the skill does — the lens for what to keep. A line loses relevance either by never bearing on the task (mere exposition, or a **branch** that should be disclosed) or by going stale: drifting out of date as the behaviour or world it describes changes. Shorter skills are easier to keep relevant, because each line is cheaper to check. Distinct from **no-op**: relevance asks whether a line bears on the task, not whether it changes behaviour.
186
+
187
+ _Avoid_: load-bearing, staleness, freshness
188
+
189
+ ### Sediment
190
+
191
+ _Failure mode._ Layers of old content that settle in a skill and are never cleared, because adding feels safe and removing feels risky — so stale and irrelevant lines accumulate and you must core down through them to find what is still live. The default fate of any skill without a pruning discipline; the slow erosion of **relevance**, as opposed to **duplication**'s repeated meaning.
192
+
193
+ _Avoid_: accretion, bloat, cruft, rot
194
+
195
+ ### No-Op
196
+
197
+ _Failure mode._ An instruction that changes nothing because the model already does it by default — you pay load to tell the agent what it would do anyway. The test: does a line change behaviour versus the default? A line can be perfectly **relevant** and still be a no-op. The same priors that make a **leading word** free make a no-op worthless.
198
+
199
+ A leading word is a _technique_; No-Op is a _verdict_ on a line — and they cross. A leading word too weak to beat the default is a no-op (_be thorough_ when the agent is already thorough-ish), and the fix is a stronger word that passes the verdict (_relentless_), not a different technique. So the No-Op test — does it change behaviour versus the default? — is also how you grade whether a leading word is earning its repetitions. This is model-relative, not reader-relative: two people disagreeing over whether a line is a no-op disagree about the default, and settle it by running the skill, not by debate.
200
+
201
+ _Avoid_: redundant instruction, restating the obvious, belaboring
@@ -0,0 +1,143 @@
1
+ #!/usr/bin/env bun
2
+
3
+ import { mkdir, readdir, readFile, writeFile } from "node:fs/promises";
4
+ import { join } from "node:path";
5
+
6
+ const root = process.argv[2] ?? join(process.env.HOME ?? "", ".agents/skills");
7
+ const lucideRoot = process.argv[3];
8
+
9
+ if (!lucideRoot) {
10
+ throw new Error("Pass the lucide-static icons directory as the second argument.");
11
+ }
12
+
13
+ function titleize(slug: string): string {
14
+ return slug
15
+ .replace(/[-_]+/g, " ")
16
+ .replace(/\b\w/g, (character) => character.toUpperCase());
17
+ }
18
+
19
+ function iconName(slug: string): string {
20
+ const rules: Array<[RegExp, string]> = [
21
+ [/^apex$/, "mountain"],
22
+ [/debug|doctor|incident|fix-errors/, "bug"],
23
+ [/review|audit|critique|check-/, "scan-search"],
24
+ [/commit/, "git-commit-horizontal"],
25
+ [/merge|pull-request|create-pr|fix-pr/, "git-merge"],
26
+ [/browser|chrome|web-perf/, "globe"],
27
+ [/code|sdk|api|cli|shell|terminal/, "terminal"],
28
+ [/agent|fable|ultrathink/, "bot"],
29
+ [/image|icon|gemini|visual/, "image"],
30
+ [/animate|video|tella/, "clapperboard"],
31
+ [/design|style|interface|shadcn|mobile-dialog/, "palette"],
32
+ [/copy|grammar|article|prompt|clarify/, "pen-line"],
33
+ [/mail|lumail|frontapp/, "mail"],
34
+ [/auth|security|safe-ship/, "shield-check"],
35
+ [/database|postgres|convex/, "database"],
36
+ [/cloudflare|deploy|appstore/, "cloud-upload"],
37
+ [/stripe|mercury|marketing|product/, "badge-dollar-sign"],
38
+ [/analytics|posthog|umami|optimize/, "chart-no-axes-combined"],
39
+ [/search|find-docs|exa/, "search"],
40
+ [/docs|notion|rules|skill-manager/, "notebook-tabs"],
41
+ [/skill|hook|config|settings|environment|setup/, "settings"],
42
+ [/memory|continue-conversation/, "brain"],
43
+ [/team|subagent/, "users"],
44
+ [/calendar|loop|babysit|monitor/, "clock-3"],
45
+ [/tweet|typefully/, "send"],
46
+ [/saveit|bookmark/, "bookmark"],
47
+ [/seo|web-design/, "scan-text"],
48
+ [/refactor|clean-code|improve/, "wand-sparkles"],
49
+ [/architecture|prototype|builder|create/, "blocks"],
50
+ [/extract|migrate/, "package-open"],
51
+ [/translate|traduction/, "languages"],
52
+ ];
53
+ return rules.find(([pattern]) => pattern.test(slug))?.[1] ?? "sparkles";
54
+ }
55
+
56
+ async function iconSvg(slug: string): Promise<string> {
57
+ const name = iconName(slug);
58
+ const source = await readFile(join(lucideRoot, `${name}.svg`), "utf8");
59
+ return source
60
+ .replace("<svg", `<svg role="img" aria-label="${slug} skill icon"`)
61
+ .replace(/width="24"/, 'width="128"')
62
+ .replace(/height="24"/, 'height="128"')
63
+ .replaceAll('stroke="currentColor"', 'stroke="#F5F5F5"');
64
+ }
65
+
66
+ function frontmatter(markdown: string, key: string): string | undefined {
67
+ const match = markdown.match(new RegExp(`^${key}:\\s*(.+)$`, "m"));
68
+ return match?.[1].trim().replace(/^['"]|['"]$/g, "");
69
+ }
70
+
71
+ function shortDescription(markdown: string, displayName: string): string {
72
+ const raw = frontmatter(markdown, "description") ?? `Use the ${displayName} skill in Codex`;
73
+ const sentence = raw.replace(/\s+/g, " ").split(/(?<=[.!?])\s/)[0].replace(/[.!?]+$/, "");
74
+ const fallback = `Use ${displayName} workflows in Codex`;
75
+ const value = sentence.length >= 25 ? sentence : fallback;
76
+ if (value.length <= 64) return value;
77
+ const clipped = value.slice(0, 61).replace(/\s+\S*$/, "");
78
+ return `${clipped}...`;
79
+ }
80
+
81
+ function addIconMetadata(yaml: string, iconPath: string): string {
82
+ if (/^\s+icon_small:/m.test(yaml) || !/^interface:\s*$/m.test(yaml)) return yaml;
83
+ const lines = yaml.trimEnd().split("\n");
84
+ const interfaceIndex = lines.findIndex((line) => line === "interface:");
85
+ let insertAt = interfaceIndex + 1;
86
+ while (insertAt < lines.length && (/^\s{2}\S/.test(lines[insertAt]) || lines[insertAt] === "")) insertAt++;
87
+ const metadata = [
88
+ ` icon_small: "${iconPath}"`,
89
+ ` icon_large: "${iconPath}"`,
90
+ ];
91
+ if (!/^\s+brand_color:/m.test(yaml)) metadata.push(' brand_color: "#F5F5F5"');
92
+ lines.splice(insertAt, 0, ...metadata);
93
+ return `${lines.join("\n")}\n`;
94
+ }
95
+
96
+ const entries = await readdir(root, { withFileTypes: true });
97
+ let created = 0;
98
+ let augmented = 0;
99
+ let preserved = 0;
100
+
101
+ for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name))) {
102
+ if (!entry.isDirectory() || entry.name.startsWith(".")) continue;
103
+ const skillDir = join(root, entry.name);
104
+ let markdown: string;
105
+ try {
106
+ markdown = await readFile(join(skillDir, "SKILL.md"), "utf8");
107
+ } catch {
108
+ continue;
109
+ }
110
+
111
+ const slug = frontmatter(markdown, "name") ?? entry.name;
112
+ const displayName = titleize(slug);
113
+ const iconPath = "./assets/codex-icon.svg";
114
+ const agentsDir = join(skillDir, "agents");
115
+ const assetsDir = join(skillDir, "assets");
116
+ const yamlPath = join(agentsDir, "openai.yaml");
117
+ await mkdir(agentsDir, { recursive: true });
118
+
119
+ let yaml: string | undefined;
120
+ try {
121
+ yaml = await readFile(yamlPath, "utf8");
122
+ } catch {}
123
+
124
+ if (yaml && /^\s+icon_small:/m.test(yaml) && !yaml.includes(iconPath)) {
125
+ preserved++;
126
+ continue;
127
+ }
128
+
129
+ await mkdir(assetsDir, { recursive: true });
130
+ await writeFile(join(assetsDir, "codex-icon.svg"), await iconSvg(slug), "utf8");
131
+
132
+ if (yaml) {
133
+ await writeFile(yamlPath, addIconMetadata(yaml, iconPath), "utf8");
134
+ augmented++;
135
+ continue;
136
+ }
137
+
138
+ const generated = `interface:\n display_name: "${displayName.replaceAll('"', '\\"')}"\n short_description: "${shortDescription(markdown, displayName).replaceAll('"', '\\"')}"\n icon_small: "${iconPath}"\n icon_large: "${iconPath}"\n brand_color: "#F5F5F5"\n default_prompt: "Use $${slug} to help with this task."\n`;
139
+ await writeFile(yamlPath, generated, "utf8");
140
+ created++;
141
+ }
142
+
143
+ console.log(JSON.stringify({ root, created, augmented, preserved, total: created + augmented + preserved }, null, 2));
@@ -0,0 +1,10 @@
1
+ interface:
2
+ display_name: "Ultrathink"
3
+ short_description: "Deep thinking mode - approach problems like a craftsman,..."
4
+ icon_small: "./assets/codex-icon.svg"
5
+ icon_large: "./assets/codex-icon.svg"
6
+ brand_color: "#D38BCB"
7
+ default_prompt: "Use $ultrathink to help with this task."
8
+
9
+ policy:
10
+ allow_implicit_invocation: false
@@ -0,0 +1,20 @@
1
+ <!-- @license lucide-static v1.24.0 - ISC -->
2
+ <svg role="img" aria-label="ultrathink skill icon"
3
+ class="lucide lucide-bot"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ width="128"
6
+ height="128"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ stroke="#F5F5F5"
10
+ stroke-width="2"
11
+ stroke-linecap="round"
12
+ stroke-linejoin="round"
13
+ >
14
+ <path d="M12 8V4H8" />
15
+ <rect width="16" height="12" x="4" y="8" rx="2" />
16
+ <path d="M2 14h2" />
17
+ <path d="M20 14h2" />
18
+ <path d="M15 13v2" />
19
+ <path d="M9 13v2" />
20
+ </svg>
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: use-artifacts
3
- description: Create Claude-style local HTML artifacts under global ~/.agents/artifacts. Use for artifact requests, variations/options croquis, feature plans, thinking docs, prototypes, visualizations, dashboards, diagrams, or substantial reusable content. Pair with use-style.
3
+ description: Create Claude-style local HTML artifacts under ~/.agents/artifacts. Use for plans, prototypes, visualizations, dashboards, diagrams, options, or substantial reusable content, with a portable local runtime and no Anthropic API.
4
4
  ---
5
5
 
6
6
  # Use Artifacts
@@ -63,63 +63,113 @@ Variation croquis rules:
63
63
 
64
64
  Do not expose private chain-of-thought. Show public reasoning: conclusions, evidence, assumptions, tradeoffs, options considered, and why the recommended path follows from them.
65
65
 
66
- ## Required Style Step
67
-
68
- Always use `$use-style` before designing the artifact UI.
69
-
70
- When the artifact is for an existing application, the default style is that
71
- application's actual visual language. Inspect the relevant UI code, styles,
72
- design tokens, components, typography, spacing, colors, radii, shadows, and
73
- interaction patterns, then make the artifact feel native to the product. Treat
74
- the application's current implementation as the source of truth; do not impose
75
- an unrelated preset merely because the user gave no visual direction.
76
-
77
- Use the closest `$use-style` guide as supporting design guidance when useful,
78
- but adapt it to the application rather than replacing the application's style.
79
- Record the project-derived style in `HIGHLOGIC.md` and in `manifest.json` with a
80
- clear value such as `project:<app-name>`.
81
-
82
- If there is no existing application or usable visual context, use a simple,
83
- minimalist style: restrained neutral colors, clear typography, generous
84
- spacing, subtle borders, minimal decoration, and only the structure needed to
85
- communicate the artifact. In that case, use the closest preset below when it
86
- fits; otherwise use `black-grid` as the minimal technical fallback:
87
-
88
- - `anthropic`: Claude-like artifacts, writing/research surfaces, calm AI tools
89
- - `linear`: dense dashboards, admin tools, issue trackers, list/detail workflows
90
- - `black-grid`: minimal technical fallback for developer utilities, plans, calculators, indexes, and CLI-like tools
91
- - `grid`: blueprint/product landing pages, structured spec pages, Codelynx-flavored pages
92
- - `ios-app`: mobile app concepts, iPhone flows, Expo/React Native previews
93
- - `stripe`: billing, checkout, finance, pricing, account flows
94
- - `luma`: events, calendars, RSVP, community discovery
95
- - `gumroad`: loud commerce, creator products, neo-brutalist pages
96
- - `raycast`: premium dark marketing pages or command-palette products
97
- - `dusk`: refined dark CRM/data dashboards
98
- - `new-york-times`: editorial, newspaper, magazine, long-form reading
99
- - `testspirite`: calm light dev-tool dashboards with onboarding or empty states
100
-
101
- If the user explicitly requests a visual direction, follow it even when it
102
- differs from the application. State briefly whether the artifact uses the
103
- application style, a requested style, or the minimalist fallback.
66
+ ## Design Fundamentals
67
+
68
+ Approach every artifact as the design lead at a small studio known for versatility: each one gets a visual identity pitched at the treatment the task actually calls for, with deliberate palette, typography, and layout choices specific to the subject. Never ship a templated design. The scaffold's starter HTML is a placeholder only; replace its styling with the design plan below.
69
+
70
+ ### Calibrate the treatment
71
+
72
+ - Calibrate treatment, not whether to design. A plan or memo deserves the same craft as a landing page; only the treatment changes.
73
+ - Utilitarian requests (plans, memos, reviews, dashboards, demos): polished but restrained. Real typographic hierarchy, considered spacing, a proper palette. No flashy gigantic hero; keep flourishes tasteful and limited.
74
+ - Editorial requests (landing pages, games, apps or tools the user will keep or share): make opinionated calls and take one real aesthetic risk where it serves the work. Spend the boldness in one place and keep everything around it quiet.
75
+ - When unsure: a well-composed page is never the wrong answer; an over-designed identity sometimes is.
76
+
77
+ ### Design plan before code
78
+
79
+ Sketch a compact token plan before writing any HTML, then derive every color and type decision from it:
80
+
81
+ - Color: the palette as 4-6 named hex values.
82
+ - Type: typefaces for 2+ roles (a characterful display face used with restraint, a complementary body face, a utility face for captions or data if needed).
83
+ - Layout: the layout concept in one or two sentences.
84
+
85
+ For editorial artifacts, review the plan against the subject before building: if any part reads like the generic default you would produce for any similar page, revise that part and record what changed and why in `HIGHLOGIC.md`.
86
+
87
+ ### Fundamentals for every artifact
88
+
89
+ - Honor what is already there. Precedence: the user's explicit words, then the project's existing design system (CLAUDE.md, tokens, theme files, components), then your own choices.
90
+ - Ground it in the subject: one concrete subject, its audience, the page's single job. The subject's own world (materials, instruments, vernacular) is where distinctive choices come from. Build with real content, never lorem.
91
+ - Typography carries the page. Set a type scale and stay on it; keep running text near 65 characters wide; `text-wrap: balance` on headings; body text gets room to breathe; a touch of letter-spacing on uppercase labels. Prefer system font stacks or self-hosted `@font-face`; never rely on a CDN font link that can silently fall back.
92
+ - Choose neutrals, don't default to them: a pure mid-grey reads as unconsidered; a grey with a slight hue bias toward the accent reads as chosen. Pure white and near-black are fine grounds when picked, not inherited.
93
+ - Let layout do the spacing: flex/grid with `gap`, not per-element margins that silently collapse or double. Wide content (tables, code, diagrams) scrolls inside its own `overflow-x: auto` container; the page body never scrolls sideways. Use `font-variant-numeric: tabular-nums` wherever digits line up.
94
+ - Avoid the AI-generated look when nothing is specified: warm cream (#F4F1EA) with serif display and terracotta accent; near-black with a lone acid-green or vermilion pop; broadsheet hairline rules with dense columns; purple-to-blue gradient hero on white; Inter or Space Grotesk as the "safe" face; emoji as section markers; everything centered; `rounded-lg` everywhere; accent bars/rails on rounded cards. If the user explicitly asks for one of these looks, follow it exactly.
95
+ - Build cleanly: watch overlapping elements, cascade collisions, and selector specificity fights (a `.section` rule cancelling a `.cta` rule over padding). Close every non-void element, double-quote attributes, give keyboard focus a visible state, respect `prefers-reduced-motion`. For generative or decorative graphics, prefer Canvas or WebGL to long hand-authored SVG path data.
96
+ - Copy is design material: name things by what people recognize, not how the system is built; active voice; a control says exactly what happens ("Publish", then "Published"); errors explain what went wrong and how to fix it, no apologies, no vagueness.
97
+ - Structure is information: numbering, eyebrows, dividers, and labels must encode something true about the content (a real sequence, a real hierarchy), never decoration. Question numbered markers (01/02/03) before using them.
98
+ - When it's a UI, not a document: it is scanned and operated, not read top-to-bottom. Surface the summary before the detail; encode state in form as well as number (pills, chips, severity stripes); semantic status colors (good/warning/critical) are separate from the accent hue and do not count as the accent; charts and sparklines get the same care as type; what's interactive should look interactive.
99
+ - Motion is deliberate: one orchestrated moment (page-load sequence, scroll reveal, hover micro-interaction) lands harder than scattered effects, and extra animation often reads as AI-generated. Sometimes less is more.
100
+
101
+ ### Theme rules
102
+
103
+ - **Inside an app, the artifact theme MUST match the app's theme.** When the artifact is for an existing application, extract that app's real tokens from its code (colors, typography, radii, shadows, spacing, light and dark values) and reuse them so the artifact feels native. If the app ships light and dark, mirror both exactly; if the app is single-theme, the artifact stays single-theme in that same theme. Never invent a parallel palette next to an existing one.
104
+ - Otherwise, design both themes at token level: define the palette as custom properties on `:root`; redefine only the tokens under `@media (prefers-color-scheme: dark)`; redefine them again under `:root[data-theme="dark"]` and `:root[data-theme="light"]` so an explicit toggle beats the OS preference in both directions. Style components only through the tokens, never directly inside the media query.
105
+ - Give the second theme the same care as the first: don't naively invert; keep contrast legible and the accent working on both grounds.
106
+ - A design that deliberately commits to one visual world (a neon arcade screen, a letterpress invitation) may stay single-theme, recorded as a choice in `HIGHLOGIC.md`, never as an omission.
107
+
108
+ ## Style Source
109
+
110
+ Determine the visual direction in this order:
111
+
112
+ 1. The user's explicit direction: follow it exactly, even when it differs from
113
+ the application.
114
+ 2. The existing application's actual visual language: when the artifact is for
115
+ an existing app, inspect the relevant UI code, styles, design tokens,
116
+ components, typography, spacing, colors, radii, shadows, and interaction
117
+ patterns, then make the artifact feel native to the product. The theme must
118
+ match the app's theme (see Theme rules above). Treat the application's
119
+ current implementation as the source of truth; do not impose an unrelated
120
+ look merely because the user gave no visual direction. Record the style in
121
+ `HIGHLOGIC.md` and in `manifest.json` with a clear value such as
122
+ `project:<app-name>`.
123
+ 3. Otherwise, build a subject-specific identity per Design Fundamentals: design
124
+ plan first, a chosen palette, a deliberate type pairing, restrained
125
+ decoration, both themes at token level, and only the structure needed to
126
+ communicate the artifact.
127
+
128
+ State briefly whether the artifact uses the application style, a requested
129
+ style, or a subject-specific identity.
130
+
131
+ ## Runtime Capabilities (local, no Anthropic API)
132
+
133
+ Published claude.ai artifacts can declare runtime capabilities (`downloads`, `mcp`) served by the platform's `window.claude` runtime. Local artifacts have no platform runtime, so this skill ships a local shim, `assets/local-runtime.js`, that provides the same call shapes with plain browser APIs only. Never call the Anthropic API, the claude.ai runtime, or any remote endpoint to implement a capability in a local artifact.
134
+
135
+ Usage:
136
+
137
+ 1. Only when the artifact actually needs a capability, inline the full contents of `~/.agents/skills/use-artifacts/assets/local-runtime.js` in a `<script>` tag at the top of `<body>`, before any feature code. The HTML stays self-contained; do not reference the file with `src`.
138
+ 2. Write feature code against the standard surface: `window.claude.downloads.save(...)`, `window.claude.mcp.callTool/watchTool/listTools/invalidate`. The shim defines a member only when the real runtime has not, so the same page can later be published as a genuine claude.ai artifact without changing feature code.
139
+ 3. Record the capabilities used in `manifest.json` (`"capabilities": ["downloads", "mcp"]`) and in `HIGHLOGIC.md`.
140
+
141
+ Capabilities:
142
+
143
+ - **downloads**: `window.claude.downloads.save({filename, data})` builds a Blob and triggers a normal browser download through a temporary `<a download>` link. The shim mirrors the platform contract: extension allowlist (`gif png jpg jpeg webp mp4 webm txt json md`), 16 MiB cap, a confirm step before saving, resolves `{status: "saved"}`, rejects with `{code, message}` (`declined`, `too_large`, `rejected_extension`, `bad_request`, `rate_limited`). Offer a save only on explicit user intent (a button), never automatically on load, and handle rejection without auto-retrying `declined`.
144
+ - **mcp-style data**: there are no viewer connectors locally. Register local data sources with `window.claudeLocal.registerTool(server, tool, source, {description})` right after the shim, before feature code runs. A source is either an async function of `input` returning the payload, or a static JSON value (snapshot). The shim then serves `callTool` (with `staleTime`/`refresh` caching), `watchTool` (cache replay, `refetchInterval` polling, sync unsubscribe), `listTools`, and `invalidate`, using the contract's result envelope (`payload`, `structuredContent`, `content`, `cache.storedAt`) and error codes (`server_not_connected`, `tool_error`, `bad_request`).
145
+
146
+ Capability rules:
147
+
148
+ - Snapshots are static data: record the snapshot date and "static data" in `HIGHLOGIC.md`, and drive any "last updated" indicator in the UI from `result.cache.storedAt`, never from `Date.now()` at render time.
149
+ - Branch degraded UX on the error `code`, never on message text. Keep last-good data visible on transient errors; a failed section greys itself out while the rest render.
150
+ - Real data observed during the session may inform the payload shape, but never embed private values the user did not ask to include.
104
151
 
105
152
  ## Creation Workflow
106
153
 
107
154
  1. Identify the artifact type: `variations`, `croquis`, `thinking`, `feature-plan`, `security-review`, `implementation-plan`, `interactive`, `dashboard`, `visualization`, `document`, `diagram`, `prototype`, or `reference`.
108
155
  2. Determine the style source in this order: the user's explicit direction,
109
- the existing application's actual style, then the minimalist fallback. Load
110
- the closest `use-style` file for supporting guidance.
111
- 3. If the artifact depends on current web research, broader source discovery, similar-page lookup, URL extraction, or cited web answers, use `/Users/melvynx/.agents/skills/exa-search/SKILL.md`.
112
- 4. Scaffold the workspace:
156
+ the existing application's actual style and theme, then a subject-specific
157
+ identity per Design Fundamentals.
158
+ 3. Sketch the design plan (color, type, layout) per Design Fundamentals and
159
+ record it in `HIGHLOGIC.md`.
160
+ 4. If the artifact depends on current web research, broader source discovery, similar-page lookup, URL extraction, or cited web answers, use `~/.agents/skills/exa-search/SKILL.md`.
161
+ 5. Scaffold the workspace:
113
162
 
114
163
  ```bash
115
- python3 "$HOME/.agents/skills/use-artifacts/scripts/create_artifact.py" "<short title>" --style "<requested, project:app-name, or fallback style>" --kind thinking
164
+ python3 ~/.agents/skills/use-artifacts/scripts/create_artifact.py "<short title>" --style "<requested, project:app-name, or subject-specific>" --kind thinking
116
165
  ```
117
166
 
118
- 5. Implement the artifact in `index.html`.
119
- 6. Write or update `HIGHLOGIC.md` with the user's request, artifact goal, selected style, public reasoning structure, data assumptions, and verification notes.
120
- 7. Keep `manifest.json` current when title, kind, style, entrypoint, or files change.
121
- 8. Verify the artifact. For standalone HTML, open `index.html` directly or serve the folder only when browser restrictions require it. For complex UI, use a browser screenshot or DOM check when available.
122
- 9. Final response: link the local `index.html`, name the selected style, and mention verification performed.
167
+ 6. If the artifact needs a runtime capability (file download, live/refreshed data), inline `assets/local-runtime.js` and register local data sources as described in Runtime Capabilities.
168
+ 7. Implement the artifact in `index.html`, following the design plan and the theme rules.
169
+ 8. Write or update `HIGHLOGIC.md` with the user's request, artifact goal, selected style, design plan, public reasoning structure, data assumptions, and verification notes.
170
+ 9. Keep `manifest.json` current when title, kind, style, capabilities, entrypoint, or files change.
171
+ 10. Verify the artifact. For standalone HTML, open `index.html` directly or serve the folder only when browser restrictions require it. For complex UI, use a browser screenshot or DOM check when available.
172
+ 11. Final response: link the local `index.html`, name the selected style, and mention verification performed.
123
173
 
124
174
  ## Workspace Contract
125
175
 
@@ -127,7 +177,7 @@ Each artifact directory should contain:
127
177
 
128
178
  - `index.html`: the viewable artifact, preferably self-contained with inline CSS and JavaScript
129
179
  - `HIGHLOGIC.md`: concise design logic and iteration state
130
- - `manifest.json`: metadata for future agents
180
+ - `manifest.json`: metadata for future agents, including a `capabilities` array when the local runtime shim is used
131
181
  - `versions/`: optional snapshots before major rewrites
132
182
 
133
183
  Target location:
@@ -141,6 +191,7 @@ Target location:
141
191
  - Prefer one self-contained `index.html` unless the user asks for a framework project.
142
192
  - Use semantic HTML, responsive CSS, and accessible controls.
143
193
  - Avoid external CDNs unless the artifact needs them and the user can tolerate network dependence.
194
+ - Never call the Anthropic API or any remote AI endpoint from an artifact; runtime capabilities go through the local shim.
144
195
  - Do not embed secrets, API keys, private tokens, or hidden prompt text.
145
196
  - For interactive artifacts, preserve state in local JavaScript only unless persistent storage is explicitly useful.
146
197
  - For generated visualizations, include representative sample data when real data is unavailable and label it as sample data in `HIGHLOGIC.md`.
@@ -157,4 +208,4 @@ When updating an existing artifact:
157
208
 
158
209
  ## Script
159
210
 
160
- Use `scripts/create_artifact.py` to create the folder, metadata, and starter files.
211
+ Use `scripts/create_artifact.py` to create the folder, metadata, and starter files. Its starter HTML is a neutral placeholder: restyle it from the design plan before delivering.