Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsBlogPro
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Authors
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges
  • Chrome Extension
  • Skill Manager

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

ProTermsPrivacyRefunds
Back to skills

Report Back

ASecurity

The shared final-report format for any multi-step run: a flat rail of executed steps (✓/-/!/✗ with concrete outcomes), a gutter ledger for what is owed (`you` — always printed, `— nothing, you're clear` when nothing is) and any open question, a links list of everything the reader might open, and a summary of at most 3 lines. Use it whenever a task involved a pipeline or several sequential steps and you're about to write the wrap-up message — shipping a PR, reconciling branches, a deploy, a ba...

2 stars
0 votes
0 copies
0 views
Added 10/6/2026
ai-agentsgonodegit

Works with

terminalcli

Security Analysis

A100/100

Scanned 10/6/2026

$npx -y skills add junielton/harnu --skill report-back --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Report Back?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Report Back
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/junielton-report-back/badge)](https://www.skillsdirectory.com/skills/junielton-report-back)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
Files
SKILL.md
---
name: report-back
effort: low
description: "The shared final-report format for any multi-step run: a flat rail of executed steps (✓/-/!/✗ with concrete outcomes), a gutter ledger for what is owed (`you` — always printed, `— nothing, you're clear` when nothing is) and any open question, a links list of everything the reader might open, and a summary of at most 3 lines. Use it whenever a task involved a pipeline or several sequential steps and you're about to write the wrap-up message — shipping a PR, reconciling branches, a deploy, a batch of file changes, a scaffold — or whenever the operator asks 'what did you do?', 'summarize what was done', 'where is the report?', or complains a final summary was a wall of prose. Other pipeline skills reference this as their output contract. Do NOT use for simple Q&A — a question gets a direct answer, not a report."
---

# Report Back (final-report format)

The last message of a multi-step run is read by someone who walked away while it
ran. They don't want the story; they want to scan what happened, spot the one
thing that needs them, and move on.

The format has three blocks in one fenced code block, separated by blank lines:
a **rail** for the trace, a **ledger** for the state, a **list** for the links.
Each block uses the layout that fits what it carries — a rail where there is a
real sequence, a column where the eye should learn a position, no alignment at
all where URLs will wrap.

```
avatar-cache  ▰▰▰▰▰▰▰▱▱▱ 70%
│
├─ ✓ review-local — 2 safe fixes
├─ ✓ commit + push — 3 commits on PROJ-231-fix-avatar-cache
├─ ✓ PR #142 opened
├─ - reviewers — already assigned on the existing PR
├─ ✓ CI green — 12/12 checks
└─ ✗ Copilot — 1 CR needs a product decision

⚑ you      decide the retry config (3 attempts vs backoff)
? open     does the cache invalidate on logout?

PR #142 · diff + threads → https://github.com/org/repo/pull/142
Green CI run → https://github.com/org/repo/actions/runs/9912
Task PROJ-231 → https://tracker.example.com/t/PROJ-231
review-local report → docs/reports/avatar-cache.md
```

Below the block, the summary: at most 3 plain sentences.

Write the labels in the language you are speaking to the operator — the column
widths are what is fixed, not the words. One report per front the run touched;
two fronts means two reports, blank line between.

## The glyph vocabulary is frozen — narrow text, no emoji

Emoji are the wrong tool for a column. They occupy two cells on some fonts and
one on others, and which ones misbehave is not predictable from the codepoint —
`⚪` and `⚠️` look as safe as `✅` and are not. Any padding that fixes one
terminal breaks another.

So the markers are **narrow text glyphs**, the same family the `status` skill
uses. Every one of them is exactly one column on every font, so the prose after
them always starts on the same column:

| marker | means                                             |
| ------ | ------------------------------------------------- |
| `✓`    | ran and succeeded                                 |
| `✗`    | failed, or hit a red gate                         |
| `!`    | done, with a caveat worth seeing                  |
| `-`    | skipped, or never reached                         |
| `⚑`    | something is owed by the operator (ledger gutter) |
| `?`    | open question (ledger label)                      |

Banned outright, and this is measured, not taste: every emoji (`✅ ❌ 🟡 🔵 🚩
⚪ ⚠️ 🔗`), plus `▶` and `⏭`, which have emoji variants a terminal may promote
to double width. **Exactly one space after the marker. Never two** — hand-
compensating a glyph's width is only ever correct on the terminal you tested it
on.

## Block 1 — the rail (what this run did)

A flat rail, **depth 1 only**. `│` opener, `├─ ` on each step, `└─ ` on the
last. Nesting costs 3 columns per level and buys nothing here. The rail
characters are narrow and come BEFORE the glyph, so whatever the glyph does to
width, the rail stays aligned.

- One line per step that was in the invoking skill's declared plan, in execution
  order. The rows ARE that skill's steps — not a retelling.
- Markers are only the six in the table above; the reason a step is `-` or `✗`
  goes in its prose, in a few words.
- Each line carries a **concrete outcome**, not the step name restated: counts,
  branch names, PR numbers, file paths. "✓ commit" says nothing; "✓ commit +
  push — 3 commits on PROJ-231" is scannable evidence.
- Keep it short — the full URL belongs in block 3, here it is a bare `#142`.
- More than 8 steps: fold the homogeneous ones into one row with a count
  (`✓ 24/30 files migrated`) and give a row only to the exceptions.
- A run that stopped early still lists the steps it never reached, as `- … —
stopped before this`, so the reader sees what did NOT happen.

## Block 2 — the ledger (where the front stands now)

The `status` skill's grid: a **2-wide gutter, blank by default** (one glyph plus
one space), then a **9-wide word label**, then the value — which therefore always
starts at column 12. An empty gutter is what makes a full one loud.

```
⚑ you      <what only the operator can do>
? open     <unanswered question that changes the next step>
```

- Only two labels survive: **`you`** and **`open`**. `now` was cut — in a FINAL
  report the run is over, so "what is running now" is either a lie or a
  restatement of what unblocks after the operator answers. Fold it into the
  `you` line as the consequence clause: "you decide → I apply and merge".
- The gutter takes **`⚑` only when something is actually owed**, and nothing else;
  `?` marks the open line. Both are one column, so the label column never shifts.
- **`you` always prints.** When nothing is owed it reads `— nothing, you're
clear`. It is the highest-value token in the report: the only one that gives
  the operator permission to close the terminal. An absent line reads as "I
  forgot to check"; the sentence reads as "I checked, you are free".
- `open` is dropped entirely when there is no open question. Never pad it.
- This block never restates a `✓`. Done work lives in the rail and nowhere else.

## Block 3 — the links (what the reader might open)

PRs, issues, CI runs, tracker tasks, deploy or preview URLs, dashboards, design
nodes, chat threads, generated files or reports (repo-relative paths count).

- One line per link, `<why open it> → <url or path>`. The label says what it is
  and why they'd open it, not just "link".
- **Never align this block into columns.** It is the one block whose content
  wraps — a 90-char URL under an aligned label column lands its tail under the
  labels and ruins the report. One space each side of the arrow, always.
- Prefer the **deepest** link: the CR thread itself, not the PR page containing
  it. "What do I open" should land on the thing, not near it.
- A URL is written in full HERE and only here.
- Never invent a URL. If a link was expected but doesn't exist, say so on its
  line: `PR → not opened yet (stopped at review)`.
- Drop the block entirely when the run produced nothing clickable.

## The header line

`<front name>  <bar> <pct>%  · <verdict>` — the bar is ten cells, `▰` filled /
`▱` empty. Build it from evidence read this run, never from memory: for a
Mission, `mission_get` (its steps' proofs — `verified` fills a cell, `claimed`
and `self-verified` do not); otherwise the board and `gh pr`. **No denominator
read this run → no bar**, just the front name. A bar built from how far along it
feels is the worst line this format can emit.

**The verdict clause is the report's only explicit success token.** Everything
else in this format signals trouble — `✗`, `!`, `⚑`, `?` — so a clean run says
nothing at all, and the reader is left inferring success from the absence of a
failure. Those are not the same thing: "nothing went wrong" and "nobody checked"
render identically. So a run ends its header with `· all green` when **all
three** are true at once: every rail row is `✓`, the ledger owes nothing, and the
evidence is named (a merged PR, green checks, a passing suite with its count).
Miss any one and the clause is omitted — an omitted verdict honestly reads as
"not proven finished". A run that stopped takes the negative form instead:
`· stopped at <what>`. Never write either from the feeling that it went well.

## Summary rules

- **At most 3 lines**, below the block, plain sentences, no bullets.
- Line 1: what shipped / what the run produced. Then, only if needed: what still
  needs the operator, and any caveat that changes what they'd do next.
- If a `✗` stopped the run, the summary's job is to say exactly what decision or
  fix is needed to resume.
- It may reference a fact, never re-render it. If a summary line survives the
  deletion of everything above it without losing meaning, it is a duplicate —
  cut it. Three lines is a ceiling, not a target.

## Scope

This format is for **multi-step work**: pipelines, batches, scaffolds, anything
where several actions ran and the operator needs the trace. A simple question
gets a direct answer in prose — a rail there is noise, and noise is exactly what
this format exists to kill.

## For other skills

A pipeline skill that wants this as its output contract just says "end the run
with a `report-back` final report" in its finish step — don't re-specify the
format inline (it drifts). The rail's rows should mirror that skill's own
declared pipeline steps. When a `status` glance card heads the report, the card's
links fold into this report's links block; never print two.

Attribution

junieltonjunielton
View sourceSee grades on GitHubMore from junielton →
SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Related Skills

Caveman

Terse caveman voice: answer first, fluff gone, every technical fact kept. Use for /caveman, "caveman mode", "talk like caveman", "be brief", "less tokens". Stays on until "stop caveman" or "normal mode".

1100021 votes

Hyperplan

Adversarial multi-agent planning skill. Self-orchestrates 5 hostile category members (unspecified-low, unspecified-high, deep, ultrabrain, artistry) via team-mode for ruthless cross-critique debate, distills only the defensible insights, then MANDATORILY hands the distilled insight bundle to the `plan` agent for executable plan formalization. Use when planning needs maximum rigor and surfacing of weak assumptions, blind spots, and over-engineering. Triggers: 'hyperplan', 'hpp', '/hyperplan', ...

698621 votes

Writing Skills

Create and manage Claude Code skills in HASH repository following Anthropic best practices. Use when creating new skills, modifying skill-rules.json, understanding trigger patterns, working with hooks, debugging skill activation, or implementing progressive disclosure. Covers skill structure, YAML frontmatter, trigger types (keywords, intent patterns), UserPromptSubmit hook, and the 500-line rule. Includes validation and debugging with SKILL_DEBUG. Examples include rust-error-stack, cargo-dep...

3931 votes

Mcp Code Execution

Routes multi-tool workflows through MCP servers for large datasets and pipelines. Use when Bash tool overhead is limiting throughput on data-heavy tasks.

3421 votes

catchup

Recovers the conversation and failed tool calls of a previous Codex, Amp, Claude Code, Antigravity, Cline, Copilot CLI, Cursor, DeepSeek Harness, Grok Build, Kimi, OpenCode, Pi Agent, or ZCode session. Use when the user says "catch up", "what did the last session do", "get me up to speed", "I switched agents", asks to recover/summarize a previous session before continuing, or asks to diagnose or report a catchup failure. Do NOT use for the current conversation, git history, or any non-agent log.

741 votes
View all in ai-agents →