Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add tianhanz/ears --skill resumegit clone --depth 1 https://github.com/tianhanz/earsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/tianhanz/ears/resume)<a href="https://agentmods.dev/skills/tianhanz/ears/resume"><img src="https://agentmods.dev/badge/skills/tianhanz/ears/resume/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/tianhanz/ears/resume"><img src="https://agentmods.dev/badge/skills/tianhanz/ears/resume.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00040 | $0.01424 |
| Opus 5.5 | $0.00016 | $0.00570 |
| Sonnet 5.5 | $0.00008 | $0.00285 |
| Haiku 4.5 | $0.00004 | $0.00142 |
Grade A, and why
resume scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 181 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Resume Skill
Load and restore task state from a structured checkpoint file.
When to Use
- Session start: After context loss or session restart
- Crash recovery: Picking up after unexpected interruption
- Task handoff: Another person/agent continuing work
- Branch fork: Starting from another branch's checkpoint
- Manual resume: User explicitly requests
/resume [checkpoint-file]
Step 1 — Find checkpoint
If no argument provided: Find latest checkpoint on current branch:
BRANCH=$(git branch --show-current)
LATEST=$(ls -t .claude/checkpoints/${BRANCH}-*.yaml 2>/dev/null | head -1)
if [ -z "$LATEST" ]; then
echo "No checkpoint found for branch: $BRANCH"
echo "Available checkpoints:"
ls -t .claude/checkpoints/*.yaml 2>/dev/null | head -10
exit 1
fi
echo "Found checkpoint: $LATEST"
CHECKPOINT_FILE="$LATEST"
If argument provided: Use that checkpoint file or branch name:
ARG="$1"
if [ -f "$ARG" ]; then
CHECKPOINT_FILE="$ARG"
elif ls -t .claude/checkpoints/${ARG}-*.yaml 2>/dev/null | head -1 > /dev/null; then
CHECKPOINT_FILE=$(ls -t .claude/checkpoints/${ARG}-*.yaml | head -1)
else
echo "Checkpoint not found: $ARG"
exit 1
fi
Step 2 — Load and display checkpoint
import yaml
import os
checkpoint_file = os.environ.get('CHECKPOINT_FILE', '.claude/checkpoints/latest.yaml')
with open(checkpoint_file, 'r') as f:
checkpoint = yaml.safe_load(f)
print("=" * 60)
print(f"CHECKPOINT RESUME: {checkpoint_file}")
print(f"Created: {checkpoint['created_at']}")
print(f"Branch: {checkpoint['branch']}")
print("=" * 60)
print()
# Phase
phase = checkpoint.get('phase', {})
print("PHASE")
print(f" Current: {phase.get('current', '?')}")
print(f" Completed: {', '.join(phase.get('completed', []))}")
print(f" Next: {', '.join(phase.get('next', []))}")
print()
# Parameters
params = checkpoint.get('state', {}).get('parameters', [])
if params:
print(f"PARAMETERS ({len(params)} extracted)")
for p in params:
unit = p.get('unit', '')
print(f" {p['name']} = {p['value']} {unit} [{p.get('confidence','?')}] -- {p.get('source','?')}")
print()
# Experiments
experiments = checkpoint.get('state', {}).get('experiments', [])
if experiments:
print(f"EXPERIMENTS ({len(experiments)} total)")
for exp in experiments:
progress = f" {int(exp['progress']*100)}%" if 'progress' in exp else ""
reason = f" -- {exp['reason']}" if 'reason' in exp else ""
print(f" {exp['name']} [{exp['status']}]{progress}{reason}")
print()
# Decisions
decisions = checkpoint.get('state', {}).get('decisions', [])
if decisions:
print(f"DECISIONS ({len(decisions)} made)")
for dec in decisions:
print(f" {dec.get('question','?')} -> {dec.get('decision','?')} [{dec.get('confidence','?')}]")
print()
# Blockers
blockers = checkpoint.get('blockers', [])
if blockers:
print(f"BLOCKERS ({len(blockers)} open)")
for b in blockers:
assumption = f" (assuming: {b['assumption']})" if 'assumption' in b else ""
print(f" [{b.get('impact','?')}] {b['question']}{assumption}")
print()
# Artifacts — verify they exist
artifacts = checkpoint.get('artifacts', [])
if artifacts:
print(f"ARTIFACTS ({len(artifacts)} tracked)")
missing = 0
for a in artifacts:
path = a['path'].replace('~', os.path.expanduser('~'))
exists = os.path.exists(path)
status = "OK" if exists else "MISSING"
if not exists:
missing += 1
print(f" [{status}] {a['path']} ({a.get('role','?')})")
if missing > 0:
print(f"\n WARNING: {missing} artifact(s) missing!")
print()
# Resume instructions
print("=" * 60)
print("RESUME INSTRUCTIONS")
print("=" * 60)
print()
print(checkpoint.get('resume_instructions', '(no instructions)'))
print()
print("=" * 60)
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2mo ago First seen · 181 lines · 40 tokens per session scan A 351f06e07827
resume is a skill published in the GitHub repository tianhanz/ears (6 stars, last pushed 6mo ago), licensed MIT. It adds 40 tokens to every session and 1,424 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
resume compared with skills from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| resumetianhanz/ears | Skill | 6 | 6mo ago | MIT | A | 40 | Claude Code, Codex |
| testing-api-authentication-weaknessesxalgorix/xalgorix | Skill | 1.3k | today | Apache-2.0 | A | 102 | Claude Code, Codex |
| authentication-session-testingxalgorix/xalgorix | Skill | 1.3k | today | Apache-2.0 | A | 53 | Claude Code, Codex |
| Effective Memoryplur-ai/plur | Skill | 313 | yesterday | Apache-2.0 | A | 43 | Claude Code |
| olyslaveOftime/open-relay | Skill | 110 | 8d ago | MIT | A | 64 | Claude Code, Codex |
| oly-daemonslaveOftime/open-relay | Skill | 110 | 8d ago | MIT | A | 40 | Claude Code, Codex |
| oly-subagentslaveOftime/open-relay | Skill | 110 | 8d ago | MIT | A | 49 | Claude Code, Codex |