con un clic
skill-nix-research
// Conduct Nix/NixOS/Home Manager research using MCP-NixOS, web docs, and codebase exploration. Invoke for nix research tasks.
// Conduct Nix/NixOS/Home Manager research using MCP-NixOS, web docs, and codebase exploration. Invoke for nix research tasks.
Route commands to appropriate workflows based on task language and status. Invoke when executing /task, /research, /plan, /implement commands.
Implement Nix configuration changes from plans. Invoke for nix implementation tasks.
Document conversion routing with dual invocation support
Create scoped git commits for task operations. Invoke after task status changes or artifact creation.
Execute general implementation tasks following a plan. Invoke for general implementation work.
Implement LaTeX documents following a plan. Invoke for LaTeX-language implementation tasks.
| name | skill-nix-research |
| description | Conduct Nix/NixOS/Home Manager research using MCP-NixOS, web docs, and codebase exploration. Invoke for nix research tasks. |
| allowed-tools | Task, Bash, Edit, Read, Write |
Thin wrapper that delegates Nix research to nix-research-agent subagent.
IMPORTANT: This skill implements the skill-internal postflight pattern. After the subagent returns, this skill handles all postflight operations (status update, artifact linking, git commit) before returning.
Reference (do not load eagerly):
.claude/context/core/formats/return-metadata-file.md - Metadata file schema.claude/context/core/patterns/postflight-control.md - Marker file protocol.claude/context/core/patterns/jq-escaping-workarounds.md - jq escaping patternsThis skill activates when:
Validate required inputs:
task_number - Must be provided and exist in state.jsonfocus_prompt - Optional focus for research direction# Lookup task
task_data=$(jq -r --argjson num "$task_number" \
'.active_projects[] | select(.project_number == $num)' \
specs/state.json)
# Validate exists
if [ -z "$task_data" ]; then
return error "Task $task_number not found"
fi
# Extract fields
language=$(echo "$task_data" | jq -r '.language // "nix"')
status=$(echo "$task_data" | jq -r '.status')
project_name=$(echo "$task_data" | jq -r '.project_name')
description=$(echo "$task_data" | jq -r '.description // ""')
Update task status to "researching" BEFORE invoking subagent.
Update state.json:
jq --arg ts "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
--arg status "researching" \
--arg sid "$session_id" \
'(.active_projects[] | select(.project_number == '$task_number')) |= . + {
status: $status,
last_updated: $ts,
session_id: $sid
}' specs/state.json > /tmp/state.json && mv /tmp/state.json specs/state.json
Update TODO.md: Use Edit tool to change status marker to [RESEARCHING].
mkdir -p "specs/${task_number}_${project_name}"
cat > "specs/${task_number}_${project_name}/.postflight-pending" << EOF
{
"session_id": "${session_id}",
"skill": "skill-nix-research",
"task_number": ${task_number},
"operation": "research",
"reason": "Postflight pending: status update, artifact linking, git commit",
"created": "$(date -u +%Y-%m-%dT%H:%M:%SZ)"
}
EOF
{
"session_id": "sess_{timestamp}_{random}",
"delegation_depth": 1,
"delegation_path": ["orchestrator", "research", "skill-nix-research"],
"timeout": 3600,
"task_context": {
"task_number": N,
"task_name": "{project_name}",
"description": "{description}",
"language": "nix"
},
"focus_prompt": "{optional focus}",
"metadata_file_path": "specs/{N}_{SLUG}/.return-meta.json"
}
CRITICAL: You MUST use the Task tool to spawn the subagent.
Tool: Task (NOT Skill)
Parameters:
- subagent_type: "nix-research-agent"
- prompt: [Include task_context, delegation_context, focus_prompt, metadata_file_path]
- description: "Execute Nix research for task {N}"
The subagent will:
metadata_file="specs/${task_number}_${project_name}/.return-meta.json"
if [ -f "$metadata_file" ] && jq empty "$metadata_file" 2>/dev/null; then
status=$(jq -r '.status' "$metadata_file")
artifact_path=$(jq -r '.artifacts[0].path // ""' "$metadata_file")
artifact_type=$(jq -r '.artifacts[0].type // ""' "$metadata_file")
artifact_summary=$(jq -r '.artifacts[0].summary // ""' "$metadata_file")
else
status="failed"
fi
If status is "researched", update state.json and TODO.md.
Add artifact to state.json with summary.
git add -A
git commit -m "task ${task_number}: complete research
Session: ${session_id}
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>"
rm -f "specs/${task_number}_${project_name}/.postflight-pending"
rm -f "specs/${task_number}_${project_name}/.return-meta.json"
Research completed for task {N}:
- Found NixOS module patterns
- Identified package configuration
- Created report at specs/{N}_{SLUG}/reports/research-{NNN}.md
- Status updated to [RESEARCHED]
- Changes committed
Return immediately if task not found.
Keep status as "researching" for resume.
Non-blocking: Log failure but continue.
Brief text summary (NOT JSON).