Meta-development tools for agentic workflows

Meta-development tools for agentic workflows.
Working with AI coding agents generates valuable artifacts beyond code: session patterns, failure modes, decision trails. This plugin helps capture and learn from that meta-layer, including understanding the harness itself.
| Skill | Description |
|---|---|
agent-meta:park | Save current work context. Two modes: continuation (handoff to new session) and close-out (record of completed work). |
agent-meta:unpark | Resume work from a parked handoff, or read a wrapped close-out as reference. |
agent-meta:snapshot | Capture current session state (inline or with save). In-flow checkpoint, not a walking-away artifact. |
agent-meta:harness-binary-spelunking | Spelunk the Claude Code CLI binary to extract the system prompt, map UI messages to code paths, decode minified functions, and find undocumented config keys. |
Invoke by asking naturally ("park this session", "wrap this up", "unpark docs/handoffs/foo.md") or with the fully qualified slash form (/agent-meta:park).
| Command | Description |
|---|---|
/session-id | Print the current session ID. Answers instantly, with no model turn, and works mid-turn. |
/session-id is a mod: a function-hooks module at hooks/register.ts, loaded alongside the shell hooks in hooks/hooks.json. Run its tests with claude plugin test plugins/agent-meta.
park produces two distinct artifacts:
Parked: heading, [topic].md filename): for handoffs to a new session. The Resume Prompt is the centerpiece: tight, specific, copy-paste ready.Wrapped: heading, [topic]-wrapped.md filename): for records of completed work. No Resume Prompt; an "Outcome" section in past tense and an optional "Open Threads" list.Mode is picked at park time from your phrasing ("park to continue" vs "wrap this up"), inferred from the work's state, or asked if ambiguous.
Analysis tools for post-hoc session review:
| Script | Description |
|---|---|
find-failures.py | Find tool calls that errored |
trace-hooks.py | Trace hook execution through a session |
analyze-routing.py | Analyze tool-routing suggestions and outcomes |
summarize-session.py | Condense session to key events |
identify-skills.py | Flag patterns that suggest new skills/hooks |
# From plugin directory
./scripts/find-failures.py ~/.claude/projects/my-project/session.jsonl
./scripts/summarize-session.py ~/.claude/projects/my-project/
# JSON output for programmatic use
./scripts/find-failures.py --json ~/.claude/projects/my-project/
Configure handoff location in your CLAUDE.md (project or user level):
## Parking
Location: ~/Vaults/my-vault/handoffs/
Default location: .parkinglot/ in project root (gitignored).
Optionally, also send the parked file to an external destination (e.g. filing it into a second-brain vault) via env vars:
# Literal destination command template
export AGENT_PARK_DESTINATION='npx @techpickles/sb note create --source auto --title "{title}" --content-file {file}'
# Or: a no-arg command whose stdout produces the template dynamically. Wins over
# AGENT_PARK_DESTINATION if both are set.
export AGENT_PARK_DESTINATION_HELPER='~/.claude/bin/pick-park-destination.sh'
Both accept {file}, {title}, and {mode} (continuation or close-out) placeholders. Neither var set means park behaves exactly as it does without one — this is purely additive, never a replacement for the local file.
Requires the pickled-claude-plugins marketplace. Then:
/plugin install agent-meta@pickled-claude-plugins
stay-on-target - Focused development mode with drift detectiontool-routing - Tool call suggestions and routinghooks/register.ts 17 lines1import type { Register } from 'claude-code'
2
3export const register: Register = on => {
4 on('session.start', async ($, e, next) => {
5 await $.command.register({
6 name: 'session-id',
7 description: 'Show the current session ID',
8 immediate: true,
9 })
10 return next(e)
11 })
12
13 on('command.run', { command: 'session-id' }, async $ => ({
14 text: await $.session.id(),
15 }))
16}
17