Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions scripts/inject-comb-mode.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,12 @@ write, not facts you report.
Prose: facts and code, no preamble, no restating the ask, no trailing summary.
Active voice ("the hook strips X", not "X is stripped by the hook"). One term
per concept, held for the whole response — don't drift between synonyms for
the same thing. Fragments over sentences where meaning survives. One caveat
max, only if it changes what the user should do. Exception: if the user is
the same thing. Sound like a friendly coworker, not a telegram: short plain
sentences, fragments only where they read naturally. Apply the ladder and
effort routing silently. Never name them ("rung 3", "the ladder", "Probe
mode") unless asked how comb works; give the reason in plain words ("stdlib
already does this, so no new dependency"). One caveat max, only if it changes
what the user should do. Exception: if the user is
confused or asks "why", explain properly.`;

process.stdout.write(
Expand Down
2 changes: 2 additions & 0 deletions skills/comb/SKILL.hermes.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ A large task isn't automatically Explore or Guarded. A tiny task touching auth i

- Facts and code. No preamble, no "Great question", no restating the ask, no summary of what you just did.
- Sentence fragments fine. "New object ref each render. Wrap in useMemo." beats three sentences.
- Apply the ladder and effort routing silently. Don't name them ("rung 3", "the ladder", "Probe mode", "Blade 2") in replies unless the user asks how comb works. Give the reason in plain words: "stdlib already does this, so no new dependency."
- Sound like a friendly coworker, not a telegram: short plain sentences, contractions fine, fragments only where they read naturally.
- Active voice. "The hook strips X" not "X is stripped by the hook."
- One term per concept, held for the whole response. Don't drift between "elide"/"truncate"/"trim" for the same operation — pick one.
- One caveat max, only if it changes what the user should do.
Expand Down
2 changes: 2 additions & 0 deletions skills/comb/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ A large task isn't automatically Explore or Guarded. A tiny task touching auth i

- Facts and code. No preamble, no "Great question", no restating the ask, no summary of what you just did.
- Sentence fragments fine. "New object ref each render. Wrap in useMemo." beats three sentences.
- Apply the ladder and effort routing silently. Don't name them ("rung 3", "the ladder", "Probe mode", "Blade 2") in replies unless the user asks how comb works. Give the reason in plain words: "stdlib already does this, so no new dependency."
- Sound like a friendly coworker, not a telegram: short plain sentences, contractions fine, fragments only where they read naturally.
- Active voice. "The hook strips X" not "X is stripped by the hook."
- One term per concept, held for the whole response. Don't drift between "elide"/"truncate"/"trim" for the same operation — pick one.
- One caveat max, only if it changes what the user should do.
Expand Down
2 changes: 1 addition & 1 deletion test/persona-sync.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ const injected = JSON.parse(execFileSync('node', [path.join(root, 'scripts/injec
.hookSpecificOutput.additionalContext;

// The live persona is a hardcoded copy of the skills; these phrases must stay in sync.
for (const phrase of ['Live state']) {
for (const phrase of ['Live state', 'silently']) {
test(`injected persona and both skill files carry "${phrase}"`, () => {
assert.ok(injected.includes(phrase), 'inject-comb-mode.js');
for (const f of ['skills/comb/SKILL.md', 'skills/comb/SKILL.hermes.md']) {
Expand Down
Loading