Skip to content

Decision Matrix

S2 · Pattern 🔬 Research 2026-04-17
flowchart TD
Start[New stack pick?] --> CLI{AI coding CLI}
CLI -->|primary| Claude[Claude Code]
CLI -->|fallback / spot| GemCodex[Gemini or Codex CLI]
CLI -->|wrapper| Reject1[Avoid until 2027+]
Start --> Mux{Terminal mux}
Mux -->|fresh start| Zellij[Zellij]
Mux -->|existing muscle memory| Tmux[tmux]
Start --> Net{Cross-device}
Net -->|default| Tail[Tailscale + SSH alias]
Net -->|public SSH| Reject2[Avoid: brute-force surface]
Start --> KB{Knowledge mgmt}
KB -->|markdown-first| Obsidian[Obsidian]
KB -->|server-locked| Reject3[Avoid: poor agent fit]
OptionPickReasoning
Claude Code✅ primaryBest agentic execution I’ve used; Anthropic’s Opus/Sonnet tiers have real headroom; the $100/mo Max plan makes intensive use affordable
Gemini CLI◐ fallbackFree tier; different model family for sanity checks; spot tasks when rate-limited on Claude
Codex CLI◐ alternativeOpenAI ecosystem fluency; second option for comparison
OpenCode / OpenClaw / T3Code❌ avoidBan risk, ecosystem instability, unvetted security surface
IDE-embedded (Cursor, Continue, Cline)❌ for primary useCouples AI to editor; bad for cross-device portability

When to revisit wrappers: 2+ years clean operation, verified code audit, provider cooperation. Maybe 2027.

OptionPickReasoning
Zellij✅ primaryDiscoverable keybindings (status bar), modern Rust impl, works well with Claude Code + OpenCode
tmux◐ fallbackUniversally installed, battle-tested; some tools (OpenCode) historically quirky inside tmux
WezTerm mux❌ for sessionsLocal-only; doesn’t cross devices. Fine as terminal emulator though
screenOlder than tmux; no reason to pick it today
OptionPickReasoning
Tailscale + SSH config alias✅ primaryDevice-mesh auth; no public ports; MagicDNS gives stable names; Tailscale SSH removes key management
Termux (Android)✅ for phoneReal Linux userspace; full SSH + tooling
Termix (iOS)◐ if neededLess powerful; no Linux userspace; workable for emergencies
GitHub Codespaces◐ for specific casesDifferent model; fine for cloud-first devs, not for my-own-machine workflow
Raw SSH over public internetPublic exposure; brute-force surface; key management tax
Headscale (self-hosted)❌ for nowControl-plane maintenance tax; free Tailscale fits my use
OptionPickReasoning
Obsidian✅ primaryPlain markdown on filesystem; strong plugin ecosystem; now has CLI; my Obsidian-Flavored-Markdown works with this site
Obsidian CLI (v1.12.4+)✅ for automationSearch/open/get from terminal
Logseq❌ for meOutliner-first UX; prefer document-first
NotionNot plain text; server-locked; poor agent fit
Roam / similarSame concerns as Notion
Plain markdown + VS CodeNo graph navigation; drops once vault gets large
OptionPickReasoning
Zipline (self-hosted) + ShareX + sharex-clip2path✅ primaryOne-hotkey screenshot → URL; Tailscale-gated; zero public exposure
Imgur / public paste servicesPublic exposure; privacy concerns for work content
Terminal-native image display (iTerm2’s imgcat)◐ for some casesDoesn’t give AI an accessible URL
OptionPickReasoning
WSL2 on Windows✅ my choiceWindows is my primary OS; WSL2 gives Linux for dev tools; best of both
Native Linux✅ equally goodWhat most dev machines run; everything in this scaffold works natively
Native macOS✅ equally goodSimilar — most tools work identically
Windows without WSLMost dev tooling assumes Unix; friction is constant
OptionPickReasoning
VS Code✅ primaryGood extension ecosystem; works well alongside terminal CLI
vscode-terminal-workspaces✅ my extSidebar GUI for tmux-style sessions (works well with Claude Code, Gemini CLI)
vscode-terminal-image-paste✅ my extPaste clipboard images directly into terminal (alternative to Zipline flow)
Neovim / Helix◐ for someTerminal-native; good if you prefer terminal everywhere
OptionPickReasoning
TrueNAS (specifics in 03-work/homelab/)ZFS, containers, decent UI
Self-host behind TailscaleAuth via device identity; no public exposure
Public-facing with reverse proxy + auth❌ for mostAdds config surface I don’t need
  1. Pick one primary, have 1–2 fallbacks. More than three options per layer is indecision.
  2. Prefer official over wrappers until wrappers prove 2+ years of stability.
  3. Tailscale-gate anything self-hosted unless there’s a specific reason to expose it.
  4. Terminal-first, editor-integrated. Editors sit alongside; terminal is the universal substrate.
  5. Revisit every 6–12 months. The ecosystem moves; old decisions expire.