Meta Skill
Thin wrapper that delegates system building to meta-builder-agent subagent. This skill handles all three modes of /meta: interactive interview, prompt analysis, and system analysis.
IMPORTANT: This skill implements the skill-internal postflight pattern. After the subagent returns, this skill handles all postflight operations (git commit if tasks created) before returning. This eliminates the "continue" prompt issue between skill return and orchestrator.
Context References
Reference (do not load eagerly):
- Path:
.claude/context/formats/return-metadata-file.md- Metadata file schema - Path:
.claude/context/patterns/postflight-control.md- Marker file protocol - Path:
.claude/context/patterns/file-metadata-exchange.md- File I/O helpers
Note: This skill is a thin wrapper with internal postflight. Context is loaded by the delegated agent.
Trigger Conditions
This skill activates when:
- /meta command is invoked (with any arguments)
- User requests system building or task creation for .claude/ changes
- System analysis is requested (--analyze flag)
Anti-Bypass Constraint
PROHIBITION: This skill and its delegated agent (meta-builder-agent) MUST NOT write to .claude/ paths using Write or Edit tools. The /meta workflow creates TASKS only. All .claude/ file modifications happen through the /implement lifecycle with proper skill delegation.
Detected by: PostToolUse hook validate-meta-write.sh provides corrective context if bypass is attempted.
Legitimate writes: Only specs/ paths (TODO.md, state.json, task directories) are valid write targets for this skill chain.
Execution
1. Input Validation
Validate and classify mode from arguments:
Mode Detection Logic:
# Parse arguments
args="$ARGUMENTS"
# Target resolution: global-by-default, --local is the only opt-out, no interactive prompt.
# Note: parse-command-args.sh is NOT sourced here — its Step 6 task-number validation gate
# hard-fails on /meta's free-form argument grammar (/meta takes a prompt, never N[,N-N]).
# This standalone check is a deliberate, same-shaped parallel to that script's --local handling
# (LOCAL_FLAG regex-match + sed-strip convention), not a redundant reimplementation of it.
GLOBAL_ROOT="${CLAUDE_AGENT_GLOBAL_ROOT:-$HOME/.config/nvim}"
local_mode="false"
if [[ "$args" =~ --local ]]; then
local_mode="true"
fi
args=$(echo "$args" | sed 's/--local//g' | xargs)
# Determine mode (classified AFTER --local is stripped, so `/meta --local` does not
# mis-classify as mode=prompt with prompt="--local")
if [ -z "$args" ]; then
mode="interactive"
elif [ "$args" = "--analyze" ]; then
mode="analyze"
else
mode="prompt"
prompt="$args"
fi
# Resolve target_root from local_mode. This is a genuine no-op when invoked from within
# $GLOBAL_ROOT — the same code path runs and resolves to the same repo; there is no
# special-casing branch for "already at the global root".
if [ "$local_mode" = "true" ]; then
target_root="$(git rev-parse --show-toplevel)"
mode_target="local"
else
target_root="$GLOBAL_ROOT"
mode_target="global"
fi
No task_number validation needed - /meta creates new tasks rather than operating on existing ones.
2. Context Preparation
Prepare delegation context:
{
"session_id": "sess_{timestamp}_{random}",
"delegation_depth": 1,
"delegation_path": ["orchestrator", "meta", "skill-meta"],
"timeout": 7200,
"mode": "interactive|prompt|analyze",
"prompt": "{user prompt if mode=prompt, null otherwise}",
"mode_target": "global|local",
"target_root": "{resolved absolute path — $GLOBAL_ROOT in global mode, current repo root in local mode}"
}
3. Invoke Subagent
CRITICAL: You MUST use the Agent tool to spawn the subagent.
The agent field in this skill's frontmatter specifies the target: meta-builder-agent
Required Tool Invocation:
Tool: Agent (NOT Skill, NOT Plan)
Parameters:
- subagent_type: "meta-builder-agent"
- prompt: [Include mode, prompt if provided, delegation_context (with mode_target/target_root),
AND the path-qualification imperative below]
- description: "Execute meta building in {mode} mode"
DO NOT use Skill(meta-builder-agent) - this will FAIL.
Agents live in .claude/agents/, not .claude/skills/.
The Skill tool can only invoke skills from .claude/skills/.
REQUIRED path-qualification imperative in the Agent-tool prompt: because Write/Edit tool path
resolution is completely independent of shell cwd (no cd in any Bash call affects it), the prompt
sent to meta-builder-agent MUST include an explicit, unambiguous instruction that every
task-directory Write/Edit path be qualified by target_root (or be an absolute path) — NEVER a
bare specs/... relative path. For example: "All task-directory paths (TODO.md, state.json, task
dirs) MUST be written as {target_root}/specs/..., never as a bare specs/... relative path."
This instruction is carried by the prompt today; a dependent follow-up task makes it durable in the
agent definition itself (meta-builder-agent.md) rather than relying on prompt text alone.
The subagent will:
- Load component guides on-demand based on mode
- Execute mode-specific workflow:
- Interactive: Run 7-stage interview with AskUserQuestion
- Prompt: Analyze request and propose task breakdown
- Analyze: Inventory existing components and provide recommendations
- Create task entries (TODO.md, state.json, task directories) for non-analyze modes
- Return standardized JSON result
4. Return Validation
Validate return matches return-metadata-file.md schema:
- Status is one of: completed, partial, failed, blocked
- Summary is non-empty and <100 tokens
- Artifacts array present (task directories for interactive/prompt modes)
- Metadata contains session_id, agent_type, delegation info
5. Return Propagation
Return validated result to caller without modification.
Return Format
See .claude/context/formats/return-metadata-file.md for full specification.
Expected Return: Interactive Mode (tasks created)
{
"status": "tasks_created",
"summary": "Created 2 tasks for command creation workflow. Tasks start in NOT STARTED status.",
"artifacts": [
{
"type": "task",
"path": "specs/430_create_export_command/",
"summary": "Task directory for new command"
},
{
"type": "task",
"path": "specs/431_export_command_tests/",
"summary": "Task directory for tests"
}
],
"metadata": {
"session_id": "sess_1736700000_abc123",
"agent_type": "meta-builder-agent",
"delegation_depth": 1,
"delegation_path": ["orchestrator", "meta", "meta-builder-agent"],
"mode": "interactive",
"tasks_created": 2,
"tasks_status": "not_started"
},
"next_steps": "Run /research 430 to begin research on first task"
}
Note: Tasks created via /meta start in NOT STARTED status. Run /research N to begin the standard research -> plan -> implement lifecycle.
Expected Return: Analyze Mode (read-only)
{
"status": "analyzed",
"summary": "System analysis complete. Found 9 commands, 9 skills, 6 agents, and 15 active tasks.",
"artifacts": [],
"metadata": {
"session_id": "sess_1736700000_xyz789",
"agent_type": "meta-builder-agent",
"delegation_depth": 1,
"delegation_path": ["orchestrator", "meta", "meta-builder-agent"],
"mode": "analyze",
"component_counts": {
"commands": 9,
"skills": 9,
"agents": 6,
"active_tasks": 15
}
},
"next_steps": "Review analysis and run /meta to create tasks if needed"
}
Expected Return: User Cancelled
{
"status": "cancelled",
"summary": "User cancelled task creation at confirmation stage. No tasks created.",
"artifacts": [],
"metadata": {
"session_id": "sess_1736700000_def456",
"agent_type": "meta-builder-agent",
"delegation_depth": 1,
"delegation_path": ["orchestrator", "meta", "meta-builder-agent"],
"mode": "interactive",
"cancelled": true
},
"next_steps": "Run /meta again when ready to create tasks"
}
Error Handling
Input Validation Errors
Return immediately with failed status if arguments are malformed.
Subagent Errors
Pass through the subagent's error return verbatim.
User Cancellation
Return completed status (not failed) when user explicitly cancels at confirmation stage.
Timeout
Return partial status if subagent times out (default 7200s for interactive sessions).
MUST NOT (Postflight Boundary)
After the agent returns, this skill MUST NOT:
- Edit .claude/ files - All system building is done by agent
- Create task directories - Task creation is done by agent
- Run analysis commands - Analysis is agent work
- Write documentation - Artifact creation is agent work
- Use AskUserQuestion - User interaction is agent work
The postflight phase is LIMITED TO:
- Reading agent return
- Git commit (if tasks were created)
Postflight Git Commit
If the agent return indicates tasks were created, commit at target_root (resolved in Section 1).
This MUST be issued as a single Bash tool call — shell cwd from a cd in one Bash invocation
does not persist into a later, separate Bash invocation, so GLOBAL_ROOT/target_root must be
re-derived and chained inline at the point of use, every time:
GLOBAL_ROOT="${CLAUDE_AGENT_GLOBAL_ROOT:-$HOME/.config/nvim}"
cd "$GLOBAL_ROOT" && git add specs/ && git commit -m "task {N}: create {title}
Session: {session_id}
"
In local mode, the identical block runs with target_root (the current repo root) substituted
for $GLOBAL_ROOT — this is the same code path, not a separate branch; when the current repo
already IS $GLOBAL_ROOT, both modes resolve to an identical commit target (the no-op case).
Reference: @.claude/context/standards/postflight-tool-restrictions.md