The write handler was building a hand-rolled map that dropped the type and domain fields from writeArgs. Pass the struct directly so all fields reach the ingestion server. Strengthen the test to assert the request body contains the type field. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Project template
Harness-agnostic project scaffold using the Agent Skills open standard.
Quick start
degit mathias/project-template my-new-project
cd my-new-project
task init
Structure
.context/
├── PROJECT.md ← Canonical project context (edit this)
├── mcp.json ← MCP server config (generated on first sync)
└── system-prompt.txt ← Generated: generic system prompt
.skills/
├── go-patterns/
│ └── SKILL.md ← Agent Skills standard format
└── htmx-patterns/
└── SKILL.md
scripts/
└── context-sync.sh ← Adapter generator (finds root AGENT.md automatically)
Taskfile.yml ← Task runner config
DECISIONS.md ← Why things are the way they are
Generated files (gitignored)
| File | Consumer | Notes |
|---|---|---|
AGENTS.md |
Crush, Pi, Antigravity | Root + project concatenated |
CLAUDE.md |
Claude Code | Project-only (inherits root via tree walk) |
.cursorrules |
Cursor | Root + project concatenated |
.aider.conventions.md |
Aider | Root + project concatenated |
.context/system-prompt.txt |
Open WebUI, Mods, generic | Root + project concatenated |
How root context works
The script walks up from the project directory looking for ~/dev/.context/AGENT.md.
- Claude Code: inherits natively (reads every
CLAUDE.mdup the tree) → project CLAUDE.md is project-only - Everything else: can't walk the tree → script concatenates root + project into each generated file
Skills
Skills use the Agent Skills open standard. Each skill is a folder with a SKILL.md containing frontmatter:
---
name: my-skill
description: What this skill does. When to use it.
---
# Instructions here
Supported natively by Claude Code, Pi, Crush, and Antigravity. No adapter needed for skills.
Adding a skill
mkdir .skills/my-new-skill
# Create .skills/my-new-skill/SKILL.md with frontmatter + instructions
Using pi-skills (cross-compatible)
# User-level (all projects)
git clone https://github.com/badlogic/pi-skills ~/.pi/agent/skills/pi-skills
# Symlink for Claude Code
ln -s ~/.pi/agent/skills/pi-skills/brave-search ~/.claude/skills/brave-search
Usage with specific tools
Claude Code: task context:sync:claude → reads CLAUDE.md + discovers .skills/*/SKILL.md
Crush: task context:sync:agents → reads AGENTS.md + discovers .skills/*/SKILL.md
Pi: task context:sync:agents → reads AGENTS.md + discovers .skills/*/SKILL.md (or symlink .skills/ to .pi/skills/)
Antigravity: task context:sync:agents → reads AGENTS.md + discovers .skills/*/SKILL.md
Cursor: task context:sync:cursor → reads .cursorrules
Mistral Vibe: Run root-level task context:sync:vibe once → vibe --agent mathias
Open WebUI / Mods: Copy .context/system-prompt.txt into a preset or pipe it
Any other tool: Point at .context/PROJECT.md directly — it's human-readable markdown