Conversation
…demand load
Discovery reads the same roots dsh reads (verified in its
skill-filesystem package): <project>/.dsc/skills,
<project>/.agents/skills, ~/.dsc/skills, ~/.agents/skills, precedence
in that order on a name collision, project root = nearest .git — so
one skills directory serves both harnesses with the same collision
semantics. Skill identity is the frontmatter name, under dsh's own
name rule.
Progressive disclosure per DESIGN.md: the system prompt carries one
index line per skill; the body enters context only when the model
invokes the skill tool (static schema — no name enum, so adding a
skill never rewrites the tool's prefix bytes). Zero skills = no tool
registered = the gated default prompt, byte-identical, and the golden
now proves that for an empty index explicitly. Frontmatter parsing is
a zero-dep YAML subset; anything unparseable skips that one skill
with a warning (the 126 real skills in this machine's ~/.agents/skills
all parse, zero warnings). dsc skills lists what discovery found;
/status gained a skills line.
Measured (real API, flash, totals byte-stable across runs): the index
costs ~149 tokens fixed + ~25 per skill — 1134 -> 1308 -> 1359 input
tokens/turn at 0/1/3 skills. Verified live: flash invoked skill
{"name":"release-notes"} and answered from the loaded body. MCP ships
nothing here (Round 3 amendment stands; upstream deleted its plugin
manifest 08-09 with no migration — holding is deliberate).
Cache-impact: none by default — the default prompt is byte-unchanged
(prompt-golden green). With skills discovered the prompt grows by the
index only, frozen by a new golden; discovery runs once per process so
the prefix is byte-stable across a session's runs. 133 tests.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
<project>/.dsc/skills,<project>/.agents/skills,~/.dsc/skills,~/.agents/skills, precedence in that order on a name collision (project beats home, harness-native beats shared; mirrors dsh's root ranks, verified in its skill-filesystem package). Project root = nearest.git, also the dsh rule. One skills directory serves both harnesses — that is the launch-day interop story.skilltool. Static tool schema — adding a skill never rewrites the tool's prefix bytes.~/.agents/skillsall parse with zero warnings.dsc skillslists what discovery found and from where;/statusgained askillsline.skill {"name":"release-notes"}and answered from the loaded body. Full notes:docs/devlog/2026-08-13-m8-skills.org.Test plan
bun test tests— 133 pass (new:tests/skills.test.tscovering frontmatter hardening, precedence/shadowing, empty roots, project-root walk, on-demand load; goldens for the skills prompt and the empty-index no-op)bun src/cli.ts --help(the CI smoke step)skilltool invocation against the real APIMade with Cursor