From ai-dev-assistant
Parses YAML frontmatter from task.md files and returns structured hierarchy metadata (id, kind, parent, children, blocks, blocked_by, status). Defensive: never blocks on malformed input.
How this skill is triggered — by the user, by Claude, or both
Slash command
/ai-dev-assistant:task-frontmatter-readerinheritThis skill is limited to the following tools:
These tools are removed from Claude's available pool while this skill is active:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Thin wrapper around the real script `${CLAUDE_PLUGIN_ROOT}/scripts/fm-read.sh`. The script is a deterministic file-parsing pipeline (bash + python3 + jq); this skill exists to give it a name callable via the Skill tool and to document its contract.
Thin wrapper around the real script ${CLAUDE_PLUGIN_ROOT}/scripts/fm-read.sh. The script is a deterministic file-parsing pipeline (bash + python3 + jq); this skill exists to give it a name callable via the Skill tool and to document its contract.
Input: one argument — absolute path to a task folder. Output: a single-line JSON object to stdout. Exit code always 0.
Always-present fields:
id — local:<folder-name> (URI style)kind — one of flat | epic | sub_epic | subtaskparent — local:<id> or nullchildren — array of local:<id> stringsblocks — array of local:<id> stringsblocked_by — array of local:<id> stringsexternal_ids — object (reserved for future tracker integration; currently {})status — draft | in_progress | blocked | completedmechanism_hints — array of {approach, status} (status: suggested | required); the optional mechanism-challenge contract (GAP G, references/mechanism-challenge.md). Defaults to [] when absent — read-if-present; the challenge's prose-extraction floor applies otherwise.folder — absolute path passed inwarnings — array of {code, detail} entriesDefensive posture. Never throws, never blocks, never exits non-zero. All error conditions surface as entries in warnings[]. Callers should treat warnings as observations, not failures.
| Input state | Resulting warnings |
|---|---|
| Folder does not exist | folder_missing |
Folder exists, task.md missing | task_md_missing |
task.md present, no frontmatter block | (none — absence of frontmatter is legitimate; kind defaults to flat) |
| Frontmatter YAML malformed | malformed_yaml |
| python3 / yaml unavailable | parser_unavailable |
Call the script directly via the Bash tool:
"${CLAUDE_PLUGIN_ROOT}/scripts/fm-read.sh" "/absolute/path/to/task/folder"
Parse the JSON output with jq. Example:
OUTPUT=$("${CLAUDE_PLUGIN_ROOT}/scripts/fm-read.sh" "$TASK_DIR")
KIND=$(jq -r '.kind' <<<"$OUTPUT")
WARNINGS=$(jq -c '.warnings' <<<"$OUTPUT")
Earlier drafts of this skill embedded the parser logic in the skill body as bash pseudo-code. A paper-test (2026-04-22) showed this led to pseudo-function references that would force Claude to re-implement helpers each invocation, with the risk of divergent implementations across runs. The script-based design eliminates that class of bug: the implementation is a single file that can be tested once and reused deterministically.
/ai-dev-assistant:migrate-to-epic — preflight kind checkepic-migrator skill — Step 4 validation of generated frontmatter/status, /next, /complete — kind detection for hierarchy-aware renderingfm-read.sh or source fm-helpers.sh directly (for helper bash functions like fm_read, write_epic_frontmatter, etc.).warnings[] as a blocking error. The contract says warnings are observations.npx claudepluginhub camoa/claude-skills --plugin ai-dev-assistantParses a task's alignment.md scope contract (Goal, Expected result, Success criteria, Non-goals) into structured JSON with defensive error handling and warnings.
Retrieves lightweight frontmatter metadata (status, priority, effort, type, tags, owner, dependencies) from task .md files by ID or keyword using Glob and Read. Use for quick status checks.
Scans project .md files to add or fix YAML frontmatter (summary + read_when) for discovery by Reflex context routers.