Software_development_department trace-history

Reads and filters production/traces/decision_ledger.jsonl to display a timeline of agent decisions. Supports filtering by agent, risk_tier, task_id, outcome, and date range.

install
source · Clone the upstream repo
git clone https://github.com/tranhieutt/software_development_department
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/tranhieutt/software_development_department "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/trace-history" ~/.claude/skills/tranhieutt-software-development-department-trace-history && rm -rf "$T"
manifest: .claude/skills/trace-history/SKILL.md
source content

Trace History

Read

production/traces/decision_ledger.jsonl
and display a filtered, human-readable timeline of agent decisions.

Execution

The rendering and filtering logic is implemented in

scripts/trace-history.sh
. This skill delegates to that script — do NOT re-implement parsing here.

1. Run the backing script

Invoke exactly once, passing

$ARGUMENTS
through unchanged:

bash scripts/trace-history.sh $ARGUMENTS

The script handles: flag parsing, filtering, rendering (pretty or JSON), empty-ledger short-circuit, and invalid-argument rejection. Return the script's stdout verbatim to the user.

2. Supported flags (all optional)

FlagDefaultMeaning
--agent <name>
allFilter by
agent_id
--risk <High|Medium|Low>
allFilter by
risk_tier
--task <id>
allSubstring match on
task_id
--outcome <pass|fail|blocked|skipped>
allFilter by
outcome
--since <YYYY-MM-DD>
no limitOnly entries with
ts >= date
--last <N>
20Keep last N after other filters
--format <pretty|json>
prettyOutput format

3. Output format

Pretty (default): timeline with risk badges (🔴🟡🟢) and outcome emojis (✅❌⛔⏭️), grouped with separators and totals. Failed/blocked entries trigger a

/resume-from
hint automatically.

JSON: raw matching entries as a JSON array — use when piping to another tool.

4. Empty or no-match

The script emits

📭
messages for an empty ledger or zero-match filter. Return those messages as-is; do not fabricate data.


How decisions get into the ledger

Agents append one JSON line per significant decision to

production/traces/decision_ledger.jsonl
.

Append format:

{"ts":"2026-04-16T10:30:00Z","session":"main","agent_id":"backend-developer","task_id":"042","request":"Choose JWT signing algorithm","reasoning":"RS256 supports multi-service verification without sharing secrets","choice":"RS256 over HS256","outcome":"pass","risk_tier":"Medium","duration_s":18}

When to write a ledger entry (per coordination-rules.md Rule 15):

  • Any decision with
    risk_tier
    Medium or High
  • Any decision that was disputed or required fallback
  • Any Circuit Breaker state transition (CLOSED → OPEN → HALF-OPEN)
  • Any cross-agent handoff with a non-trivial acceptance criteria
  • Task completion or failure (final outcome of a checkpoint)

Low-risk decisions (trivial style choices, obvious fixes) may be omitted to keep the ledger focused on decisions worth auditing.