/simplify

Claude Code·Fable 5·pfleidi·2mo ago·22min·1 Checkpoint·3 file changes·+23/-54·38.2K tokens

/simplify → 4 cleanup agents in parallel → apply the fixes

You are improving the quality of the changed code, not hunting for bugs. Review it for reuse, simplification, efficiency, and altitude issues, then fix what you find. Do not look for correctness bugs — that is what /code-review is for.

Phase 0 — Gather the diff

Run git diff @{upstream}...HEAD (or git diff main...HEAD / git diff HEAD~1 if there's no upstream) to get the unified diff under review. If there are uncommitted changes, or the range diff is empty, also run git diff HEAD and include the working-tree changes in scope — the review often runs before the commit. If a PR number, branch name, or file path was passed as an argument, review that target instead. Treat this diff as the review scope.

Phase 1 — Review (4 cleanup agents in parallel)

Launch 4 independent review agents via the Agent tool, all in a single message so they run concurrently. Pass each agent the diff and one of the four angles below. Each returns its findings with file, line, a one-line summary, and the concrete cost (what is duplicated, wasted, or harder to maintain).

Reuse

Flag new code that re-implements something the codebase already has — Grep shared/utility modules and files adjacent to the change, and name the existing helper to call instead.

Simplification

Flag unnecessary complexity the diff adds: redundant or derivable state, copy-paste with slight variation, deep nesting, dead code left behind. Name the simpler form that does the same job.

Efficiency

Flag wasted work the diff introduces: redundant computation or repeated I/O, independent operations run sequentially, blocking work added to startup or hot paths. Also flag long-lived objects built from closures or captured environments — they keep the entire enclosing scope alive for the object's lifetime (a memory leak when that scope holds large values); prefer a class/struct that copies only the fields it needs. Name the cheaper alternative.

Altitude

Check that each change is implemented at the right depth, not as a fragile bandaid. Special cases layered on shared infrastructure are a sign the fix isn't deep enough — prefer generalizing the underlying mechanism over adding special cases.

Phase 2 — Apply the fixes

Wait for all four agents to complete, dedup findings that point at the same line or mechanism, and fix each remaining one directly. Skip any finding whose fix would change intended behavior, require changes well outside the reviewed diff, or that you judge to be a false positive — note the skip rather than arguing with it. Finish with a brief summary of what was fixed and what was skipped (or confirm the code was already clean).

2mo ago·6m

/simplify complete. Four review agents (reuse, simplification, efficiency, altitude) reviewed the --findings <handle> diff; I applied the deduplicated fixes as uncommitted working-tree changes (net −31 lines), and build, focused tests, and mise run lint all pass.

Fixed (in cmd/entire/cli/review/fix.go unless noted):

  • Unified the unknown-handle error paths in runReviewFindings — the special len(manifests) == 0 && handle != "" branch duplicated findReviewManifestByHandle's zero-match error, and printReviewFindingsHandles already prints nothing for an empty list, so the handle lookup now runs first and one path covers both cases.
  • Single source of truth for manifest handles — reviewManifestHandle (the primary handle used for display) previously re-implemented the SessionID-then-timestamp priority that reviewManifestHandles (all handles, used for matching) also encoded; it now just returns the first element of reviewManifestHandles.
  • Reused the package's existing dedupeStrings (from picker.go) instead of the hand-rolled slices.Contains dedup loops; this also let the single-use reviewManifestHandleList helper collapse into its only caller.
  • Inlined quoteReviewFindingsHandle into reviewFindingsCommand, its only caller.
  • Removed the duplicated timestamp format — localReviewManifestFilename in manifest.go inlined the same 20060102T150405 format the handle depends on; it now calls reviewManifestTimeHandle, so the handle and the manifest filename prefix can't drift apart.

Skipped, with reasons:

  • Positional-arg handling in cmd.go: the suggested collapse of positionalArg doesn't work — the variable is what carries the handle into runReviewFindings. A review findings <handle> subcommand (matching investigate show) would remove the profile-vs-handle ambiguity at the root, but that's a CLI-surface change beyond this diff.
  • Extracting the --edit non-interactive guard into a helper: it's a single site; no other command shares the message, so a helper would add a function without removing duplication.
  • Reusing shellQuote: identical implementations exist in strategy/hooks.go and resume_picker.go, but both are unexported in other packages — promoting one to a shared package is an interface change outside this diff's scope. Worth a separate cleanup if you want it.
  • Efficiency findings: none — the agent confirmed the O(n²)-ish handle scans are negligible for a directory of a few local manifest files.

One behavioral nuance worth knowing: reviewManifestHandle now trims whitespace from SessionIDs (it goes through reviewManifestHandles), which makes display consistent with matching — a whitespace-padded SessionID previously displayed untrimmed but only matched trimmed.