Writer’s Brief

The Hook

When your tool doesn’t have a config option you need, sometimes you just read the binary.

Main Points to Cover

  1. Using strings on a compiled Go binary to extract TOML/JSON struct tags and discover undocumented config fields
  2. The two-layer fix: global default via config.toml args field + bulk SQLite update for existing sessions
  3. The detective work - tracing from “Chrome mode” display string to use_chrome JSON field to discovering there’s no TOML equivalent, then finding toml:"args" as the backdoor

The Angle

You hit a wall with a tool you use daily. There’s no docs, no GitHub issue, no Stack Overflow answer. But the binary itself IS the documentation if you know how to read it.

Target Reader

People who use CLI tools daily and sometimes need to go deeper than the docs. Developers who’ve never thought to strings a binary. Agent-deck users specifically.

Tone Notes

Story-driven with technical payoff. The fun is in the detective work, not the solution. Lean into the absurdity of “I asked Claude to change a setting and it started doing binary forensics.”

Raw Material / Moments to Write From

These are notes for Alex to write from. Not prose.

  • Asked Claude to “make chrome the default” - simple request. Claude’s response: send an agent to crawl the entire .agent-deck directory, read SQLite schemas, check the binary type. Massive recon for a config change.
  • The breakthrough was literally strings binary | grep toml - extracting Go struct tags from a compiled binary. Binary archaeology to find a config field.
  • use_chrome only has a json tag, not a toml tag. The developers stored it per-session but never made it a global config option. The args field was the undocumented backdoor.
  • 37 sessions across 3 profiles (default: 18, ai-course: 13, itw: 6). All updated in one bash loop. The oat profile existed but was a ghost - zero Claude sessions.
  • The binary had Chrome mode as a display string next to Claude Options - meaning the TUI Settings screen probably has this toggle too. But we solved it from the CLI because that’s more fun.
  • The escalation path: check docs (nothing) -> check CLI help (nothing) -> check config file (nothing) -> strings the binary (found it). Classic “when all else fails, read the source.”
  • The two completely different solutions needed for one problem: TOML config for the future, SQLite for the past.
  • Also fixed the /capture command itself during this session - it was delegating to a subagent that had no conversation context, and it was writing blog prose instead of just giving writing prompts.