tendril-debug-job — Claude Code skill: what it does, how to install
Inspects Tendril job execution artifacts to pinpoint issues in agent behavior, promptware instructions, or memory. Useful when a run fails or burns unnecessary tokens.
npx skills add Ivy-Interactive/Ivy-Tendril --skill tendril-debug-job -a claude-codeWhat tendril-debug-job does
The skill investigates Tendril runs using a five-digit job identifier like 00458 or a direct path to a log file. It inspects artifacts stored in $TENDRIL_HOME/Jobs/, including the {stem}.md run log and unparsed stream output in {stem}.raw.jsonl.
Execution follows five inspection phases. First, it extracts exit codes, durations, token costs, and mid-run agent notes. Next, it parses stream JSON lines to trace tool failures and redundant file edits. Then it validates agent decisions against Program.md rules and relevant Tendril C# components.
All recommendations print directly into the chat without saving new files to disk. Without run artifacts present in $TENDRIL_HOME/Jobs/, the skill cannot diagnose anything.
What it helps with
- diagnose failed Tendril runs by job identifier
- detect repetitive file edits and compilation error loops
- verify agent adherence to
Program.mdpromptware instructions - audit token waste and cache efficiency across raw JSONL logs
Example prompts for the agent
- /tendril-debug-job 00458 agent got stuck in an edit loop on a single file
- /tendril-debug-job 00124 inspect token overspending and investigate build failure
How to install tendril-debug-job
1Skills CLI (Vercel)
npx skills add Ivy-Interactive/Ivy-Tendril --skill tendril-debug-job -a claude-code2Manually: put the files in place
~/.claude/skills/tendril-debug-job/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/tendril-debug-job/
1Skills CLI (Vercel)
npx skills add Ivy-Interactive/Ivy-Tendril --skill tendril-debug-job -a codex2Manually: put the files in place
.agents/skills/tendril-debug-job/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add Ivy-Interactive/Ivy-Tendril --skill tendril-debug-job -a cursor2Manually: put the files in place
.cursor/skills/tendril-debug-job/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install Ivy-Interactive/Ivy-Tendril tendril-debug-job2Manually: put the files in place
.github/skills/tendril-debug-job/SKILL.md1Skills CLI (Vercel)
npx skills add Ivy-Interactive/Ivy-Tendril --skill tendril-debug-job -a gemini-cli2Platform CLI
gemini skills install https://github.com/Ivy-Interactive/Ivy-Tendril --path skills/tendril-debug-jobManually: put the files in place
.devin/skills/tendril-debug-job/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add Ivy-Interactive/Ivy-Tendril --skill tendril-debug-job -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about tendril-debug-job
How to install tendril-debug-job in Claude Code?
Run npx skills add Ivy-Interactive/Ivy-Tendril --skill tendril-debug-job -a claude-code. The skill will be placed in ~/.claude/skills/tendril-debug-job/SKILL.md.
What does tendril-debug-job do?
It reconstructs an agent's execution timeline from Tendril logs to detect instruction flaws, memory gaps, tool errors, and token waste.
Which files does tendril-debug-job require to run?
It needs the job artifacts located in $TENDRIL_HOME/Jobs/, including the {stem}.md job log, {stem}.prompt.md, and {stem}.raw.jsonl.
Source text
SKILL.md · Apache-2.0
---
name: tendril-debug-job
description: Analyze a Tendril job's execution artifacts to identify issues and improvement opportunities in Tendril, promptware instructions, memory, or tools.
---
# tendril-debug-job
Analyze a job's execution artifacts to identify issues and improvement opportunities in Tendril, the promptware instructions, memory, or tools.
## Invocation
```
/tendril-debug-job <job-id> <comment>
```
* **job-id** - Five-digit job id (e.g., `00458`). A full path to a job log also works.
* **comment** - Free-text describing what to look for or what went wrong
## Job Artifacts
Every job writes four files, flat, into `$TENDRIL_HOME/Jobs/`. They share one stem:
```
{jobId}-{planId}-{promptware} e.g. 00458-00044-ExecutePlan
{jobId}-{promptware} when the job has no plan (e.g. CreatePlan)
```
| File | Name |
|------|------|
| `{stem}.md` | **Job Log** - status, timings, CLI command, final output, agent-authored `## Agent Log` sections |
| `{stem}.prompt.md` | **Job Prompt** - the exact prompt handed to the agent |
| `{stem}.raw.jsonl` | **Job Raw Log** - unparsed CLI stream-json output |
| `{stem}.eventwire.jsonl` | **Job Eventwire Log** - Tendril's parsed event stream |
Locate them with a glob on the job id:
```bash
ls "$TENDRIL_HOME/Jobs/00458-"*
```
The promptware type is the **last** dash-separated segment of the stem; the plan id, when present, is the middle segment. There is no `Logs/` folder anywhere - not under promptwares, not under plans.
## What This Skill Does
1. Reads the Job Log, the Job Prompt, and the Job Raw Log
2. Reconstructs the agent's execution timeline: tool calls, decisions, errors, retries
3. Cross-references with the promptware's Program.md, Memory, and Tools
4. Identifies concrete improvements to Tendril code, promptware instructions, or agent behavior
5. Produces actionable recommendations
## Execution Steps
### Phase 1 - Read the Job Log and Job Prompt
The Job Log (`{stem}.md`, produced by `JobLogWriter`) has this structure:
```markdown
# Job Log {stem}
- **JobId:** {id}
- **PlanId:** {planId} # present whenever the job produced or targeted a plan
- **Status:** {Completed|Failed|Timeout}
- **Exit Code:** {0|1|N/A}
- **Started:** {timestamp}
- **Completed:** {timestamp}
- **Duration:** {seconds}s
- **Provider:** {claude|copilot|codex|...}
- **SessionId:** {id}
- **Cost:** ${amount}
- **Tokens:** {count}
## CLI Command
{full command line}
## Final Output
{agent's last text response}
## Outcome
{commits, verifications, final plan state - ExecutePlan/RetryPlan only}
## Agent Log - {action} ({timestamp})
{narrative the agent appended mid-run via `tendril job add-log`}
```
The compiled prompt is **not** in this file. Read `{stem}.prompt.md` for the full firmware + Program.md + references + custom instructions.
Extract:
- The promptware type and plan id (from the stem)
- The program folder: `$TENDRIL_HOME/Promptwares/{promptware}` (in a dev checkout, `src/Ivy.Tendril/Promptwares/{promptware}`)
- Status, exit code, duration, cost, tokens
- The agent's own narrative from the `## Agent Log` sections
- The final output
### Phase 2 - Analyze the Raw JSONL
`{stem}.raw.jsonl` is the CLI's `--output-format stream-json` output. Each line is a JSON object with a `type` field:
| Type | Contents |
|------|----------|
| `system` | System prompt setup |
| `assistant` | Agent response with `content[]` array (text blocks and tool_use blocks) and `usage` (token counts) |
| `tool_result` | Result of a tool call |
| `result` | Final result text |
`{stem}.eventwire.jsonl` is Tendril's own parsed view of that same stream - use it when you want Tendril's interpretation (including `PermissionDenialEvent`) rather than the provider's raw wire format.
**Analysis approach (use targeted reads, never read the whole file if large):**
1. Count total lines: `wc -l`
2. Extract tool call patterns:
- Grep for `"tool_use"` to find all tool calls
- Count each tool type (Read, Write, Edit, Bash, Grep, Glob)
- Identify repeated reads of the same file (redundant work)
- Find failed tool calls (look for `"error"` or `"is_error":true` in tool_result lines)
3. Token usage:
- Sum `input_tokens`, `output_tokens` from assistant messages
- Check `cache_read_input_tokens` vs `cache_creation_input_tokens` for cache efficiency
4. Error patterns:
- Grep for `error`, `failed`, `exception` in tool results
- Count build-fix-build cycles (consecutive Bash calls with compilation errors)
- Identify thrashing (read-edit-read-edit on same file)
- `src/scripts/AnalyzeFailed.ps1` dumps every failed shell command across all raw logs
5. Timeline:
- First and last timestamps for wall-clock duration
- Long gaps between messages (rate limiting, slow tools)
### Phase 3 - Cross-Reference with Promptware Source
Read the promptware's source files from the program folder:
| File | Purpose |
|------|---------|
| `Program.md` | The agent's instructions - did it follow them? |
| `Memory/*.md` | Accumulated learnings - is anything missing or wrong? |
| `Tools/*` | Custom tools available - were they used appropriately? |
Check:
- Did the agent follow Program.md instructions in order?
- Did it skip steps or go off-script?
- Are there Memory entries that should have prevented a mistake?
- Are there Tools that should have been used but weren't?
- Did the compiled prompt provide sufficient context?
### Phase 4 - Cross-Reference with Tendril Source
Based on findings, check relevant Tendril source files:
| File | What It Controls |
|------|-----------------|
| `Helpers/JobLogPaths.cs` | Where every job artifact lives and how its stem is built |
| `Services/FirmwareCompiler.cs` | Firmware template, prompt compilation |
| `Services/Agents/AgentProviderFactory.cs` | Tool permissions, model/effort resolution |
| `Services/Jobs/JobLauncher.cs` | Job launch, firmware values, environment setup |
| `Services/Jobs/JobCompletionHandler.cs` | Post-completion processing, state transitions |
| `Services/Promptware/JobLogWriter.cs` | Job Log / Job Prompt / raw log writing |
| `Models/JobArgs.cs` | Typed POCO args passed to jobs |
### Phase 5 - Produce Recommendations
Output a structured analysis directly in the conversation (do NOT write files):
```markdown
## Execution Summary
- **Job:** {jobId} ({promptware}, plan {planId})
- **Status:** {status} (exit code {code})
- **Duration:** {duration}
- **Tokens:** {input + output} (cache hit: {ratio}%)
- **Tool Calls:** {count} ({breakdown by type})
- **Errors:** {count}
## Timeline
Brief narrative of what the agent did step by step.
## Findings
### {Finding Title}
- **Category:** {Instruction Gap | Memory Gap | Tool Gap | Tendril Bug | Token Waste | Error Loop | Permission Issue}
- **Severity:** {Low | Medium | High | Critical}
- **Evidence:** {specific tool calls, line numbers in JSONL, quotes from output}
{Description of the issue.}
**Root Cause:** {why this happened}
**Recommendation:** {concrete fix - which file, what to change}
---
{Repeat for each finding}
## Concrete Fixes (Priority Order)
1. **[Severity] {file path}**: {what to change and why}
2. ...
```
## Rules
* **Read-only**: Do NOT modify source code, promptware instructions, or memory files. Output recommendations only.
* **Always produce findings**, even if the execution was clean - "executed as expected" is a valid finding.
* **Be specific**: Cite JSONL line ranges, tool call sequences, and exact prompt sections.
* **The user's comment is your guide**: Prioritize investigating what they flagged.
* **Use targeted reads**: JSONL files can be huge. Use grep, offset/limit, and line counts rather than reading entire files.
* **Focus on actionable items**: Every finding should have a concrete recommendation pointing to a specific file.
* **Distinguish agent mistakes from system issues**: An agent going off-script is a Program.md problem; a tool failing is a Tendril infrastructure problem.
© Ivy-Interactive · Apache-2.0 · Ivy-Interactive/Ivy-Tendril