Skip to content

Quote skill descriptions, add VS Code and Cursor, warn on shared dirs - #12

Merged
UnbreakableMJ merged 1 commit into
mainfrom
fix-skill-yaml-and-dupes
Aug 25, 2026
Merged

Quote skill descriptions, add VS Code and Cursor, warn on shared dirs#12
UnbreakableMJ merged 1 commit into
mainfrom
fix-skill-yaml-and-dupes

Conversation

@UnbreakableMJ

Copy link
Copy Markdown
Contributor

Three things, all reported from a real machine.

1. A colon in a description silently killed the whole skill

/engram-save-chat was missing in Antigravity. The cause:

description: Save this conversation: capture the transcript into engram's memory store, …

That second colon makes the frontmatter invalid YAML:

$ yq -p yaml '.' < frontmatter
Error: yaml: line 2, column 36: mapping values are not allowed in this context

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 in engram's alike. Verified on the real file:

description: "Save this conversation: capture the transcript into engram's memory store, …"
$ yq -p yaml '.name'   →   "engram-save-chat"

2. VS Code and Cursor — the tenth and eleventh harnesses

Both verified against first-party evidence, not inferred:

Harness Target Evidence
VS Code ~/.config/Code/User/prompts/engram-<name>.prompt.md Microsoft documents the .prompt.md extension; VS Code itself created the profile prompts folder
Cursor ~/.cursor/skills/engram-<name>/SKILL.md .cursor/skills and SKILL.md both appear inside the cursor-agent binary

VS Code's mcp.json keys its servers under servers, not mcpServers — the scanner now reads that too, so the --db pin is discovered rather than falling back to a relative default.

~/.cursor/skills-cursor is 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:

~/.claude/commands/engram-*.md          ← written for claude-code
~/.claude/skills/  →  ~/.agents/skills  ←  ~/.codex/skills   written for codex

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-chat appeared 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_scans records the directories a harness loads from but engram never writes:

[claude-code] claude-code also loads commands from a directory engram writes for codex,
so every engram command will appear twice in claude-code. Both writes are correct for
their own harness — the duplication comes from those directories being the same one.
Point them at separate directories to remove it.

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 · makeinfo clean

🤖 Generated with Claude Code

https://claude.ai/code/session_016i16R4GhdSffsboRYq97Fs

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
@UnbreakableMJ
UnbreakableMJ merged commit 8774fdd into main Aug 25, 2026
5 checks passed
@UnbreakableMJ
UnbreakableMJ deleted the fix-skill-yaml-and-dupes branch August 25, 2026 12:06

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread src/install.rs
Comment on lines +354 to +359
let mine: Vec<PathBuf> = spec
.also_scans
.iter()
.filter_map(|d| harness::in_home(d))
.map(|d| canonical_key(&d))
.collect();

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant