Quote skill descriptions, add VS Code and Cursor, warn on shared dirs - #12
Conversation
Three things, reported from a real machine. A skill description is YAML, and engram was not quoting it. `description: Save this conversation: capture the transcript ...` has a second colon, which makes the frontmatter `mapping values are not allowed in this context` — so the *entire skill* fails to load, silently. Antigravity offered /engram-context and /engram-ingest but not /engram-save-chat for exactly this reason, and nothing anywhere reported an error. Descriptions are now double-quoted scalars. VS Code and Cursor are the tenth and eleventh harnesses, both verified against first-party evidence rather than inferred. Microsoft documents the `.prompt.md` extension and VS Code itself creates the profile `prompts` folder; `.cursor/ skills` and `SKILL.md` both appear inside the cursor-agent binary. VS Code's `mcp.json` keys its servers under `servers` rather than `mcpServers`, so the scanner reads that too. `~/.cursor/skills-cursor` is the vendor's own bundle and is deliberately not treated as a user surface. The duplicate slash commands in Claude Code were not a write bug: `~/.claude/ skills` and `~/.codex/skills` both resolve to one shared library here, so the commands engram wrote for Codex are loaded by Claude Code as well. Engram cannot fix that by writing differently, because both targets are correct for their own harness. It can name it, which is what `also_scans` and the new overlap warning do. Save-chat appeared only once because its skill copy was the one broken by the YAML bug above. Gates: fmt, clippy -D warnings, 260 tests, REUSE 3.3, makeinfo clean. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016i16R4GhdSffsboRYq97Fs
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 75b298f294
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| let mine: Vec<PathBuf> = spec | ||
| .also_scans | ||
| .iter() | ||
| .filter_map(|d| harness::in_home(d)) | ||
| .map(|d| canonical_key(&d)) | ||
| .collect(); |
There was a problem hiding this comment.
Include primary write directories in overlap checks
When two writable harnesses have their primary skill directories symlinked to the same shared library—for example, ~/.codex/skills and ~/.cursor/skills—this constructs mine exclusively from also_scans, so neither harness reports a clash. The install loop then writes identical engram-* paths twice, and the later harness overwrites the files with its own {{HARNESS}} value, leaving the earlier harness's ingest/save-chat commands targeting the wrong reader. Include the harness's own canonical command directory when checking overlaps, and avoid silently overwriting artifacts in this case.
AGENTS.md reference: AGENTS.md:L289-L296
Useful? React with 👍 / 👎.
Three things, all reported from a real machine.
1. A colon in a description silently killed the whole skill
/engram-save-chatwas missing in Antigravity. The cause:That second colon makes the frontmatter invalid YAML:
So the entire skill fails to load — and nothing reports an error anywhere. The other two commands have no colon, which is why exactly two of three appeared.
Descriptions are now double-quoted scalars: the form that survives colons,
#, and the apostrophe inengram'salike. Verified on the real file:2. VS Code and Cursor — the tenth and eleventh harnesses
Both verified against first-party evidence, not inferred:
~/.config/Code/User/prompts/engram-<name>.prompt.md.prompt.mdextension; VS Code itself created the profilepromptsfolder~/.cursor/skills/engram-<name>/SKILL.md.cursor/skillsandSKILL.mdboth appear inside the cursor-agent binaryVS Code's
mcp.jsonkeys its servers underservers, notmcpServers— the scanner now reads that too, so the--dbpin is discovered rather than falling back to a relative default.~/.cursor/skills-cursoris the vendor's own bundle and is deliberately not treated as a user surface — Grok's compatibility scanner filters those same vendor defaults out.3. The Claude Code duplicates were not a write bug
Each engram command exists in exactly two places Claude Code reads:
Both writes are correct for their own harness. The duplication comes from those two directories being the same one on this machine. (And
/engram-save-chatappeared only once because its skill copy was the one broken by bug #1 — the two symptoms had a single shared explanation.)Engram can't fix this by writing differently, so it now names it.
also_scansrecords the directories a harness loads from but engram never writes:The new test builds that exact symlink topology and asserts both halves: Claude Code warns, and Codex — which reads only what it was given — does not.
Gates
fmt·clippy -D warnings· 260 tests · REUSE 3.3 ·makeinfoclean🤖 Generated with Claude Code
https://claude.ai/code/session_016i16R4GhdSffsboRYq97Fs