<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://honestafblog.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://honestafblog.com/" rel="alternate" type="text/html" /><updated>2026-04-15T03:23:55+00:00</updated><id>https://honestafblog.com/feed.xml</id><title type="html">honestAFblog</title><subtitle>HonestAF&apos;s (Alex Friedrichsen&apos;s) Blog for personal reflection and anecdotes, magic, cognitive science, data science, philosophy and more.</subtitle><author><name>Alex Friedrichsen</name></author><entry><title type="html">I Built Agent Infrastructure for Two Weeks Straight. Here’s What Actually Worked.</title><link href="https://honestafblog.com/ai,agents,infrastructure,claude,observability/2026/04/01/agent-infrastructure-30-days.html" rel="alternate" type="text/html" title="I Built Agent Infrastructure for Two Weeks Straight. Here’s What Actually Worked." /><published>2026-04-01T13:00:00+00:00</published><updated>2026-04-01T13:00:00+00:00</updated><id>https://honestafblog.com/ai,agents,infrastructure,claude,observability/2026/04/01/agent-infrastructure-30-days</id><content type="html" xml:base="https://honestafblog.com/ai,agents,infrastructure,claude,observability/2026/04/01/agent-infrastructure-30-days.html"><![CDATA[<p>On March 15th I had a Claude Code installation, a half-baked Obsidian vault, and a vague conviction that “agent teams” were more than a Twitter buzzword. By March 31st I had 12 native agents across 4 operational planes, a zero-cost observability dashboard, overnight crons that audit their own vault for gaps, and mechanical hooks that lint, format, and scan for secrets on every file edit. None of it is magic. Most of it is plumbing.</p>

<p>Here’s what I built, what actually worked, and what I’d do differently.</p>

<h2 id="act-1-the-operating-system-mar-15-20">Act 1: The Operating System (Mar 15-20)</h2>

<p>The first thing I did wrong was think about agents. The first thing I should have done, and eventually did, was think about configuration.</p>

<p>Claude Code has a settings hierarchy that most people never touch: global settings, project settings, local overrides, environment variables, MCP server configs, permission auto-approvals. Before you spawn a single agent, you need this foundation solid. I didn’t have it solid. I spent two days fighting permission prompts and MCP server misconfigurations before I went back and mapped the entire config surface.</p>

<p>Once the config was stable, I ran my first real agent team test: two parallel agents reviewed a research project independently. They converged on the same conclusions. Sounds boring. It’s the most important result of the month. It told me the architecture was sound enough that independent agents with the same context arrive at consistent outputs. Reproducibility before creativity.</p>

<p>From there I designed an agent roster across 4 planes:</p>

<ul>
  <li><strong>Strategy</strong>: Atlas (planning), Herald (intake/briefing)</li>
  <li><strong>Execution</strong>: Forge (builds code), Pixel (design), Quill (writes content, hello), Lens (data analysis)</li>
  <li><strong>Verification</strong>: Cipher (code review), Gauntlet (testing), Prism (design review)</li>
  <li><strong>Operations</strong>: Scout (research), Sage (vault maintenance), Anchor (deployment and infra)</li>
</ul>

<p>Twelve agents. The roster started at ten and grew. Herald and Prism were later additions. Rosters always grow.</p>

<p>I built the company repo, HonestAlexFLLC, with all the persona files, 6 workflow playbooks, and a CLAUDE.md that acts as the master configuration document. Every agent reads this file. Every agent inherits the same rules. This is the operating system, and the persona files are the applications.</p>

<p>The week’s biggest win was the first agent-to-agent handshake. We ran a short Discord volley between an always-on bot instance and the orchestrator session, 6 messages exchanged with a dead-simple protocol: TASK_REQUEST, STATUS_UPDATE, DATA_DROP. Three message types. That’s it. I resisted the urge to build something clever, and that restraint has paid off every day since. (The always-on bot has since been retired; the orchestrator handles spawning directly now that crons run locally. The protocol stayed.)</p>

<p>The key insight from this week, written in my notes in all caps: <strong>“Subagents are not for anthropomorphizing roles. They are for controlling context.”</strong> Every agent is a context window. The persona file determines what fills that window. That’s the whole game.</p>

<h2 id="act-2-platform-and-research-mar-21-28">Act 2: Platform and Research (Mar 21-28)</h2>

<p>Week one gave me agents. Week two gave me a platform, and the research to know where it stood.</p>

<p>The first real infrastructure piece was <code class="language-plaintext highlighter-rouge">_universal.md</code>, a shared rules block that every agent inherits. Cipher review is mandatory before shipping. CEO gates exist for architecture decisions, style guides, and deploys. Scope detection means if an agent discovers a feature that’s too large to build inline, it escalates instead of going rogue. These aren’t suggestions. They’re mechanical constraints.</p>

<p>Then I migrated all 12 agents to Claude Code’s native <code class="language-plaintext highlighter-rouge">.claude/agents/</code> format with YAML frontmatter. This unlocked three things.</p>

<p><strong>3-tier model routing.</strong> Not every task needs the most expensive model at maximum effort. Judgment calls (planning, review) get opus at high effort. Execution (building, writing) gets opus at medium. Support tasks (research, maintenance) get sonnet at high. Cost is part of the reason. The bigger reason is matching cognitive intensity to the task. You don’t need deep reasoning to grep a codebase.</p>

<p><strong>Per-agent tool restrictions.</strong> Forge can write files. Scout cannot. Cipher can read everything but write nothing. Least privilege is a security principle, sure. It’s also a correctness principle: it prevents agents from doing things they shouldn’t be doing in the first place. The best way to stop a research agent from “helpfully” editing your source code is to take away the edit tool.</p>

<p><strong>Worktree isolation.</strong> Build agents operate in Git worktrees, not the main working tree. If Forge breaks something, it breaks it in its own sandbox. (This one had a subtle failure mode for orchestrator-delegated spawns, covered below.)</p>

<p>I built two skills during this period. The <code class="language-plaintext highlighter-rouge">/ralph</code> skill is an autonomous iteration loop with circuit breakers. The agent keeps working until a stop condition hits or it runs out of approved scope. It requires CEO approval to activate because autonomous loops without human gates are how you burn $200 in API calls on a Saturday morning. The <code class="language-plaintext highlighter-rouge">/research</code> skill implements a depth protocol: quick, standard, deep, exhaustive. Each level chains more Scout passes, with later passes specifically targeting gaps identified by earlier ones.</p>

<p>One thing I learned the hard way: <strong>MCP tool schemas are expensive.</strong> Each server’s tool definitions cost 4-32x more tokens than CLI equivalents. The lesson is minimal installs and per-agent scoping. Don’t give every agent access to every MCP server.</p>

<h3 id="evaluating-the-ecosystem">Evaluating the Ecosystem</h3>

<p>The Claude Code community is building faster than any single person can track. Part of this week was figuring out what already existed so I wouldn’t rebuild it worse.</p>

<p>I ran a 4-topic landscape sweep: creative design agents, self-learning systems, orchestration frameworks, and persona management at scale. Four deep-research Scout runs, 25+ searches across 6 passes each, later passes targeting gaps from earlier ones. The output was four reports totaling maybe 15,000 words. Most of it I’ll never re-read. But having an agent synthesize the contradictions between sources is what made the build decisions feel less like guesswork.</p>

<p>The community tools I evaluated:</p>

<ul>
  <li><strong>SuperClaude</strong> (21.9K stars): monolithic framework, 30 slash commands, 20 agent personas, 7 behavioral modes. Same core idea as our persona files. Where we diverged: they put everything in one package, we distribute it across individual agent files, a shared rules block, and project-level configs. The monolithic approach is easier to install. The distributed approach is easier to modify without breaking unrelated things. I chose the one that matched how I actually work.</li>
  <li><strong>Ralph Wiggum</strong> (8.2K stars): autonomous iteration with a circuit breaker. Agent detects stalls, repeated errors, or declining output quality, then stops itself. Directly inspired our <code class="language-plaintext highlighter-rouge">/ralph</code> skill.</li>
  <li><strong>HCOM</strong> (claude-hook-comms): inter-agent collision detection. Adopted the core pattern for our PostToolUse hooks, adapted it to our multi-worktree setup.</li>
  <li><strong>Context Engineering Kit</strong>: clean-state execution, filesystem memory, voting across multiple agent outputs. The filesystem-as-memory approach validated what we were already doing with the Obsidian vault.</li>
  <li><strong>Claude Squad</strong> (6.6K stars): terminal UI for managing agents in parallel Git worktrees. We evaluated it and preferred native worktree isolation without the management layer. One fewer abstraction.</li>
</ul>

<p>I cherry-picked 5 patterns from the Superpowers framework (99.2K stars). Not browsed casually. Read systematically, took what fit:</p>

<ol>
  <li><strong>Discipline invocation</strong>: the 1% rule, where agents verify their changes don’t break more than 1% of existing behavior</li>
  <li><strong>Verification-before-completion</strong>: an evidence gate where agents prove their work before declaring done</li>
  <li><strong>TDD rationalization defense table</strong>: prevents agents from rationalizing why they shouldn’t write tests</li>
  <li><strong>Systematic debugging protocol</strong>: 4-phase (reproduce, isolate, hypothesize, verify)</li>
  <li><strong>Plan specificity</strong>: banned placeholders in implementation plans (no “TODO: implement later”)</li>
</ol>

<p>These are small rules. They compound.</p>

<p>The pattern across all of this: evaluate everything, adopt nothing wholesale, cherry-pick aggressively. Frameworks are idea libraries, not commitments.</p>

<h2 id="act-3-enforcement-and-observability-mar-29-31">Act 3: Enforcement and Observability (Mar 29-31)</h2>

<p>The final push was metaoptimization: building the systems that monitor, enforce, and improve the agent infrastructure itself.</p>

<p>The philosophy behind this act came from a thread with an Anthropic red team member: “Invest time in programmatic task verifiers, things that programmatically check that X task has actually been completed properly.” That clarified something I’d been feeling but hadn’t articulated. The enforcement strategy splits into two layers.</p>

<p><strong>Programmatic gates.</strong> Deterministic, cheap, scalable. They run in milliseconds. They never hallucinate. They never get tired. A PostToolUse hook fires on every file edit and runs Prettier (formatting), ESLint (linting), and a regex scan for secrets (API keys, tokens, passwords). If an agent writes a file with a hardcoded API key, the hook catches it before the change propagates. PreToolUse hooks block dangerous commands before they execute. Stop hooks verify tests pass before an agent declares completion.</p>

<p><strong>Judgment gates.</strong> Expensive, essential, non-automatable. Cipher reviewing code for architectural coherence, security implications, edge cases that no regex will catch. This is the 20% that requires intelligence.</p>

<p>The research was unambiguous: agents hallucinate rule violations when rules exist only as natural language in prompts. “Don’t commit API keys” in a persona file is a suggestion. A regex hook that fires on every file write is a law. Encode rules as executable checks, not prose. Save the expensive judgment for things that require it.</p>

<p><strong>Gauntlet got redesigned</strong> along the same lines. The TDAD paper (March 2026) found something counterintuitive: telling an agent to “do TDD” <em>increased</em> regressions by 9.94%. Procedural instructions don’t transfer well to agents. What works: providing contextual information (which tests to verify, what behavior to validate) and letting the agent figure out the procedure.</p>

<p>This produced a three-phase QA model.</p>

<ol>
  <li><strong>Spec</strong> (before build). Gauntlet writes failing tests that define expected behavior. These become Forge’s implementation target.</li>
  <li><strong>Guard</strong> (during build). PostToolUse hooks auto-run affected tests after every file edit. Immediate feedback, no manual step.</li>
  <li><strong>Verify</strong> (after build). Full suite, edge cases, mutation testing. Report goes to Cipher.</li>
</ol>

<p>The critical insight: without pre-existing tests, agents write implementation code that looks correct, then generate tests that verify what the code <em>does</em> rather than what it <em>should do</em>. Tests that pass by construction. Green checkmarks that mean nothing. Phase 1 prevents this by forcing the implementation to satisfy an independent specification.</p>

<p>I ran a full agent pipeline test: Herald (intake) to Atlas (planning) to Forge (build) to Gauntlet (test) to Cipher (review). Gauntlet caught 2 bugs. Forge fixed them. Cipher approved. The pipeline works. It’s not fast, but it’s reliable in a way that me coding at 2 AM is not.</p>

<p><strong>The observability dashboard.</strong> I installed disler’s multi-agent observability system (1.3K stars): a Bun server, a Vue dashboard, and a SQLite database. All 12 hook event types are wired. The critical decision: <strong>no –summarize flag.</strong> That flag calls the Haiku API on every event to generate a human-readable summary. It costs money. We skip it. The raw event data (which agent ran, what tools it used, when it started and stopped) is sufficient for debugging and analysis. You don’t always need AI to watch AI. Sometimes a SQLite database and a Vue dashboard are enough.</p>

<p><strong>HCOM (Hook Collision Monitor).</strong> A PostToolUse hook that detects when multiple agents edit the same file simultaneously. File collisions are the number one source of subtle bugs in multi-agent setups. HCOM doesn’t prevent them (that would require locking, which introduces its own problems). It alerts so you can investigate.</p>

<p>Over this period I also installed 5 data-source MCP servers: Reddit, Hacker News, YouTube, Exa (web search), and XQuik for Twitter/X. All free except XQuik at $20/month on an existing subscription. Combined with the utility MCPs already running (Playwright, semantic search, knowledge graph), that’s 8 total MCP servers locally, plus 3 cloud-connected services (Notion, Gmail, Google Calendar).</p>

<p><strong>The overnight research cron.</strong> This is the piece I’m most proud of, and it cost $0 in new infrastructure. Two phases, running nightly:</p>

<ul>
  <li><strong>3:30 AM</strong>: vault gap analysis. The cron reads open-threads and project files, identifies stale threads, abandoned next-steps, and missing research. It writes a structured audit report.</li>
  <li><strong>4:00 AM</strong>: AI news research. Two parallel Scouts sweep Reddit, Hacker News, Twitter/X, YouTube, and Exa web search for AI and developer news relevant to our active projects.</li>
</ul>

<p>All free MCP servers plus the existing XQuik subscription. Total new cost: zero. Cipher reviewed the cron scripts and found 2 blockers (a hardcoded API key and a lock file race condition) and 5 warnings. All fixed before deployment. The first dry run found real gaps: LLC formation had stalled for 12 days with no progress, and “programmatic verifiers” were referenced 3 times across the vault but never researched. The system identified its own blind spots.</p>

<h3 id="whats-researched-but-not-deployed">What’s Researched but Not Deployed</h3>

<p>Honesty tax: here’s what’s still on the shelf, and what’s moved off it in the two weeks since this post went up.</p>

<ul>
  <li><strong>Circuit breakers for runaway loops</strong>: the Ralph pattern (detect stalls, repeated errors, output quality decline). Still researched, not wired into our agents. Low urgency right now because we haven’t had a runaway, but the absence is a latent risk.</li>
  <li><strong>Token budget enforcement</strong>: hard ceilings set before execution, calibrated at 2x the p95 of historical runs. Still not implemented. A local usage dashboard sits in the backlog; that’s the prerequisite.</li>
  <li><strong>GUARDRAILS.md</strong>: a persistent file of learned safety constraints with triggers and provenance, so agents accumulate institutional knowledge about what not to do. Still designed, not written.</li>
  <li><strong>Microsoft’s 27-failure-mode taxonomy</strong>: memory poisoning, agent compromise, cross-domain prompt injection. Read the paper, still haven’t mapped our system against it. Probably a weekend’s work.</li>
  <li><strong>Parallel Forge worktree isolation</strong>: was broken for orchestrator-delegated spawns (worktrees got created against the wrong repo). Fixed April 12 with a marker-file hook: orchestrator writes the target repo path to <code class="language-plaintext highlighter-rouge">/tmp/claude-worktree-target</code>, a WorktreeCreate hook reads it and routes the worktree correctly, SubagentStop cleans up. Parallel Forges against the same repo now each get their own worktree and branch. Caveat that cost me an afternoon: frontmatter <code class="language-plaintext highlighter-rouge">isolation: worktree</code> is silently ignored at runtime, so it has to be passed explicitly on the Agent tool call.</li>
  <li><strong>X Signal Digest</strong>: daily 3am cron that pulls my own likes and bookmarks via XQuik, filters for AI/dev signals, and writes a digest to the vault. Live. The point is forced re-encounter with things I flagged but didn’t act on. Surprisingly good at surfacing “oh right, I meant to try that.”</li>
</ul>

<p>The gap between “researched” and “deployed” is where the interesting work happens. Some of it has happened.</p>

<h2 id="what-actually-emerged">What Actually Emerged</h2>

<p>After two weeks, a few patterns crystallized that I didn’t plan for.</p>

<p><strong>The vault IS the memory system.</strong> I started assuming I’d need a separate memory layer: vector database, retrieval-augmented generation, something. What I actually built is an Obsidian vault readable by both humans (graph view, backlinks, search) and agents (semantic search, knowledge graph tools). One source of truth, not two. The vault is the memory. Everything else is an index into it. QMD, the local BM25 search layer, indexes 317 markdown documents as of today. The same numbers humans see in Obsidian’s file explorer are the ones agents query.</p>

<p><strong>Forgetting is a feature.</strong> The instinct is to save everything: every conversation, every debugging session, every decision rationale. Indiscriminate storage propagates errors. If an agent reads outdated context, it makes outdated decisions. The research on self-learning agents is clear: systems that selectively retain high-quality memories outperform comprehensive-but-undifferentiated storage. So the vault has a simple rule: daily notes are append-only, but the working state is actively pruned. Recently completed items get removed after 3 days. The vault remembers what matters and forgets what doesn’t.</p>

<p><strong>The 80% Problem.</strong> Agents generate 80% of code rapidly. The remaining 20% (architecture, trade-offs, context) is where human value concentrates. The one-person billion-dollar company isn’t one person doing nothing. It’s one person doing the 20% that requires judgment, while agents handle the 80% that requires execution.</p>

<p><strong>Context engineering, not prompt engineering.</strong> The industry is shifting from “how you ask” to “what information architecture surrounds the request.” The CLAUDE.md file, the persona files, the vault structure, the MCP server selection, the tool restrictions: these aren’t prompts. They’re the environment. The same agent with different context produces radically different output. The prompt matters less than you think. The context matters more than you think.</p>

<h2 id="the-numbers">The Numbers</h2>

<ul>
  <li>12 native agents across 4 operational planes</li>
  <li>8 local MCP servers + 3 cloud-connected services (6 free, 1 free tier, 1 existing subscription)</li>
  <li>12 hook event types wired for observability</li>
  <li>3-tier model routing (judgment / execution / support)</li>
  <li>5 cherry-picked patterns from Superpowers (99.2K stars)</li>
  <li>4-topic landscape sweep across agent systems</li>
  <li>$0 new infrastructure cost for the overnight cron</li>
  <li>2 paradigms validated: team pipeline (coordinated handoffs) and background subagent (isolated research)</li>
  <li>317 markdown documents indexed by QMD (and growing)</li>
</ul>

<p>The cron has been running for two-plus weeks now. Every morning there’s a fresh vault audit flagging stale threads and a fresh AI digest summarizing what shipped overnight across Reddit, HN, X, YouTube, and Exa. I read both before the first coffee. Most mornings they surface one or two things worth acting on. Occasionally they catch something critical: a stalled workstream, an API deprecation, a paper whose authors are getting uncomfortably close to our adversarial AI negotiation work.</p>

<p>That’s not a metaphor for anything. It’s just infrastructure.</p>]]></content><author><name>Alex Friedrichsen</name></author><category term="ai,agents,infrastructure,claude,observability" /><summary type="html"><![CDATA[On March 15th I had a Claude Code installation, a half-baked Obsidian vault, and a vague conviction that “agent teams” were more than a Twitter buzzword. By March 31st I had 12 native agents across 4 operational planes, a zero-cost observability dashboard, overnight crons that audit their own vault for gaps, and mechanical hooks that lint, format, and scan for secrets on every file edit. None of it is magic. Most of it is plumbing.]]></summary></entry><entry><title type="html">We Built a 12-Agent AI Company. Here’s the Org Chart.</title><link href="https://honestafblog.com/ai,agents,architecture,claude,organization/2026/03/21/12-agent-ai-company-org-chart.html" rel="alternate" type="text/html" title="We Built a 12-Agent AI Company. Here’s the Org Chart." /><published>2026-03-21T03:00:00+00:00</published><updated>2026-03-21T03:00:00+00:00</updated><id>https://honestafblog.com/ai,agents,architecture,claude,organization/2026/03/21/12-agent-ai-company-org-chart</id><content type="html" xml:base="https://honestafblog.com/ai,agents,architecture,claude,organization/2026/03/21/12-agent-ai-company-org-chart.html"><![CDATA[<p>Most people building with AI agents start by asking “what can this agent do?” Wrong question. The right one is what you’d ask before hiring humans: what’s the org chart? Who reports to whom? What happens when someone screws up?</p>

<p>I run HonestAlexF as a solo dev company. One human (me), twelve AI agents, multiple product lines: data science consulting, TCG analytics, ad creative pipelines, content. The agents aren’t chatbots I talk to. They’re an organizational structure that happens to be made of language models.</p>

<p>Here’s how it actually works.</p>

<h2 id="the-topology-problem">The Topology Problem</h2>

<p>When you throw multiple agents at a task with no structure, errors don’t add. They multiply. The research on multi-agent systems is clear: unstructured swarms amplify errors by an order of magnitude. Every agent that touches a task is a chance for hallucination to compound. The “bag of agents” pattern, where you spawn a bunch of workers and hope for the best, is how you get confidently wrong output at scale.</p>

<p>First principle: topology over quantity. If you can’t draw the information flow between your agents on a napkin, you have too many.</p>

<h2 id="four-planes-twelve-agents">Four Planes, Twelve Agents</h2>

<p>The agents are organized into four functional planes, plus intake and a cross-cutting role. Information flows down for delegation, up for review.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>INTAKE (upstream of all planes)
  Herald (project interviewer)
      |
STRATEGY PLANE
  Atlas (chief strategist)
      |
EXECUTION PLANE
  Forge (code) | Lens (data) | Quill (content) | Pixel (design)
      |
VERIFICATION PLANE
  Gauntlet (testing) | Cipher (review) + Prism (design review)
      |
OPERATIONS PLANE
  Scout (research) | Anchor (infrastructure)

CROSS-CUTTING
  Sage (knowledge hygiene across all planes)
</code></pre></div></div>

<p><strong>Herald</strong> sits upstream of everything. Before any work enters the pipeline, Herald interviews me to nail down scope, constraints, and success criteria. Think of it as the intake form that prevents the rest of the system from solving the wrong problem.</p>

<p><strong>Atlas</strong> is the strategist. Breaks goals into tasks, assigns them to the right agents, sequences dependencies. Atlas never executes, only plans and delegates. There’s also an orchestrator session (QueenAdministrator) that handles the infrastructure layer: spawning agents, routing messages, cleaning up after subagents. Atlas does strategy; the orchestrator does logistics.</p>

<p><strong>Forge</strong> writes code. <strong>Lens</strong> does data analysis. <strong>Quill</strong> writes content. <strong>Pixel</strong> handles visual design. Four execution agents organized by output type, not by department. This matters. An agent that’s great at writing Python is not the same cognitive mode as one writing blog posts. Separation of concerns applies to AI workers too.</p>

<p><strong>Gauntlet</strong> tests. <strong>Cipher</strong> reviews. These two are the reason the system works at all. Research on adversarial review agents shows they nearly double accuracy compared to unchecked output. That’s why Cipher exists as a mandatory gate on every workflow. Nothing ships without passing through Cipher. For design work specifically, Cipher delegates to <strong>Prism</strong>, a specialist sub-reviewer focused on aesthetics and UX, then synthesizes both reviews into a single verdict. Prism is Cipher’s eyes for visual quality. The division keeps reviews sharp rather than asking one agent to evaluate both code correctness and color theory.</p>

<p><strong>Scout</strong> does research: web searches, competitive intelligence, technology evaluation. <strong>Anchor</strong> handles deployment and infrastructure: CI/CD, cron scheduling, anything that touches the outside world.</p>

<p><strong>Sage</strong> is the knowledge manager, and it’s cross-cutting rather than tied to any single plane. Sage maintains the Obsidian vault that serves as the team’s shared memory, prunes stale information, and cross-links notes so the knowledge graph stays navigable. Every other agent benefits from Sage’s work, which is why it doesn’t belong in Operations or any other single plane.</p>

<h2 id="the-pipeline-and-why-gauntlet-appears-twice">The Pipeline (and Why Gauntlet Appears Twice)</h2>

<p>The standard workflow:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Herald -&gt; Atlas -&gt; Gauntlet (spec) -&gt; Forge -&gt; Gauntlet (verify) -&gt; Cipher -&gt; Ship
</code></pre></div></div>

<p>Notice Gauntlet shows up twice. That’s the TDD-first model: Gauntlet writes the test specifications <em>before</em> Forge writes the code, then Gauntlet comes back to verify the implementation against those specs. Forge is building to a target, not freestyling.</p>

<p>It’s a closed feedback loop. There’s no path from execution to output that skips verification. Every piece of work passes through at least one adversarial agent before a human sees it.</p>

<h2 id="what-a-persona-file-looks-like">What a Persona File Looks Like</h2>

<p>Each agent is defined in a markdown file. Trimmed example:</p>

<div class="language-markdown highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="gh"># Cipher (Code and Quality Reviewer)</span>

You are Cipher, the Code and Quality Reviewer for HonestAlexF LLC.

<span class="gu">## Your Role</span>
You are the mandatory quality gate for ALL workflows. Every piece
of work passes through you before shipping.

<span class="gu">## Expertise</span>
<span class="p">-</span> Code review, security analysis, performance profiling
<span class="p">-</span> Test coverage analysis, architectural critique

<span class="gu">## Anti-Patterns (Things You Must NEVER Do)</span>
<span class="p">-</span> NEVER approves code without actually reading it
<span class="p">-</span> NEVER rubber-stamps ("LGTM" without substantive review)
<span class="p">-</span> NEVER reviews own code (Forge code gets Cipher review)
</code></pre></div></div>

<p>The anti-patterns section is load-bearing. Telling an agent what it <em>is</em> matters less than telling it what it must <em>never do</em>. The anti-patterns are where the guardrails live.</p>

<h2 id="two-ways-to-run-them">Two Ways to Run Them</h2>

<p>Not every task needs the full pipeline. There are two execution modes.</p>

<p><strong>Team agents</strong> get their own tmux panes, can message each other, and coordinate through shared task lists with dependencies. Use these when agents need to hand off results: the Herald-to-Cipher pipeline, parallel research tasks, debugging sessions where multiple agents investigate competing hypotheses.</p>

<p><strong>Background subagents</strong> are fire-and-forget. No pane, no team overhead. Spawn one, it does its thing, you get notified when it’s done. Use these for independent tasks: a quick research lookup, a one-off build, anything where the agent doesn’t need to talk to other agents.</p>

<p>Rule of thumb: if agents need to coordinate, use a team. If they don’t, use background. Never more than five parallel agents regardless. Coordination collapse is real above that threshold.</p>

<h2 id="what-i-actually-learned-building-this">What I Actually Learned Building This</h2>

<p><strong>Anti-patterns matter more than capabilities.</strong> Every persona file includes a list of things that agent must <em>never</em> do. Atlas must never write code. Cipher must never rubber-stamp a review. Forge must never deploy. A few more that turned out to matter: Scout must never edit source files (research agents get read-only tool access), Sage must never prune something it just learned about (24-hour quarantine before archival), Herald must never answer its own questions on behalf of the CEO. These negative constraints prevent drift more effectively than positive instructions. Tell an LLM “you’re a code reviewer who also writes code when needed,” congratulations, you now have an agent that writes code and skips reviews.</p>

<p><strong>The adversarial reviewer is non-negotiable.</strong> Not because the other agents are bad. Because every system that produces output without critical review eventually produces garbage. This is true for human teams too.</p>

<p><strong>3-5 concurrent agents is the sweet spot.</strong> I have twelve defined roles but never run more than five at a time. Most workflows use two or three. The full roster exists for coverage across business lines, not concurrency.</p>

<p><strong>Research-backed decisions, always.</strong> Every agent is instructed to search the web, check the vault, or ask me before guessing. Scout exists specifically to feed research into other agents’ work. The alternative, agents confidently making stuff up, is how you end up with plausible-sounding analysis built on fabricated data.</p>

<h2 id="what-this-doesnt-replace">What This Doesn’t Replace</h2>

<p>Agents propose. I decide. All client-facing communication goes through me. Pricing, contracts, creative direction: human only. The 80/20 model: agents handle 80% of execution, I review the 20% that matters.</p>

<p>This is an org chart, not a replacement for judgment. The agents are very good at execution within defined parameters. They’re terrible at knowing which parameters matter.</p>

<p>(This post was reviewed by Cipher before publication. Cipher flagged the original draft for unsourced claims and a missing pipeline stage. Adversarial review works on prose too, apparently.)</p>

<p>I’ll write about what’s actually breaking once I have more data.</p>]]></content><author><name>Alex Friedrichsen</name></author><category term="ai,agents,architecture,claude,organization" /><summary type="html"><![CDATA[Most people building with AI agents start by asking “what can this agent do?” Wrong question. The right one is what you’d ask before hiring humans: what’s the org chart? Who reports to whom? What happens when someone screws up?]]></summary></entry><entry><title type="html">Self-Playtesting</title><link href="https://honestafblog.com/mtg/2025/07/24/self-playtesting.html" rel="alternate" type="text/html" title="Self-Playtesting" /><published>2025-07-24T04:52:23+00:00</published><updated>2025-07-24T04:52:23+00:00</updated><id>https://honestafblog.com/mtg/2025/07/24/self-playtesting</id><content type="html" xml:base="https://honestafblog.com/mtg/2025/07/24/self-playtesting.html"><![CDATA[<p>Sometimes, you find yourself wondering if your crazy brew is competitive.</p>

<p>Okay, it’s possible that my crazy brews aren’t quite as crazy as some of the Saffron Olive or CovertGoBlue brews that are on their face non-competitive decks. It’s also possible that I am trying to cast Quintorius and storm off while not dying the Heartfire Hero by turn 5. Regardless, I find myself awake in EST time, in the middle of standard testing season preparing for the next Pro Tour. One advantage of having a global testing team is that we all join together on Discord, it unifies us. On the other hand, surprisingly often the Eastern time late evening slot is a no go for people wanting to play. Which is why I, somewhat belatedly, came to the conclusion of loading up two decks on Cockatrice and playing them against myself.</p>

<p>At first, I didn’t realize this was possible without having two instances of Cockatrice open, each one connected to one of the servers, one hosting the match and the other joining. Once done, you can set them up split screen on a monitor and alt-tab back and forth between the two. The trick is that the window on the left you have to go into the View menu and disable floating card images, log, and text to clear the screen space. Belatedly, I learned that you can also just Host Local Game and select 2 players as the option. However, while less clunky to set up, I prefer the double client implementation as it allows you to use hotkeys for each player without requiring moving through turn phases to the other deck’s turn. For instance, if I wanted to use Ctrl-W to scry cards on my opponents end step with a Consider, the UI would think the active player has the hotkeys and would scry for the wrong deck. This issue is remedied by Alt-Tabbing back and forth, but requires more familiarity.</p>

<p><img src="/assets/images/solo-magic/solo-magic-1.png" alt="Solo Magic" /></p>

<p>Beyond the technical difficulties, playing the game against oneself is a very compartmentalized process. While at the beginning of a match, the deck that goes first chooses whether to keep or mulligan. Then priority switches to deck 2 (like a normal game of Magic). If deck 1 kept, this is where the first example of doublethink comes in. You must forget deck one’s hand; try to remove the bias of overcorrecting for the cards present in the hand that is visible to you in the opposing deck. It can be hard to measure how successful I am in doing this. In fact, oftentimes knowing about a bias is (citation needed) not even helpful in avoiding it. One strategy is to look at the full opposing decklist while mulliganing, though this can slow things down. I can rationalize that my endless hours of experience mulliganing might help build up an immunity, and ultimately, the effect on keeps is usually small and matchup dependent. I felt this pull most with cards like spell pierce.</p>

<p>As an aside, playing around one-of copies of cards follows a similar logic, with the caveat that you have to try and calculate whether playing around them will maximize your winrate*. The gameplay I found dynamic. You get the full conception of the graph of decisions that could be made throughout a game. Sometimes in a match, you play your 1 drop 2 drop and 3 drop on curve, and the other player has to decide to play their 2 drop or play their removal spell. You will always be the one player having to decide. Making twice as many decisions can feel taxing, but it allows for play with utmost intentionality. Playing with a purpose to your actions is a great quality to have, especially in a training game. I felt like I better understood the reason going for a tempo gameplan might be better than a value gameplan in a matchup. This a skill I have tried to internalize more, especially since Worlds 2024.</p>

<p>At worlds, I played UW oculus, alongside Eli Kassis. Eli has a gift (cough, 30+ years of experience) for deck building. He often has an easier time than myself understanding what a deck should be trying to do. At this worlds, we were discussing deck building choices and Eli spoke about deck velocity. UR phoenix in pioneer is a premier example of a high deck with high velocity. Individual card quality can sometimes suffer, as the rewards of seeing your key pieces more consistently outweigh the air that having a bunch of cards that mill or draw cards in your deck can present. I wanted to go bigger, Eli wanted to go smaller. This analogy was quickly cemented when I began building a limited deck (Duskmourn) that was focused on reanimator. Again, the strongest move the dec kcould make was reanimating the Valgavoth I had taken in P1P1. I had built a version that was more value heavy, UW with black splash. Eli rebuilt my pool into a BW splash g for 2 broodspinners deck that focused on churn and setting up one big play. All this to say, in the Cockatrice games against myself, I could feel the pressure of the deck needing somethign to build towards when in the driver’s seat much more clearly than an opponent who held 7 cards in their hand, face down.</p>

<p>Cockatrice matches also allow for replayability from specific spots, and for putting cards directly in hand to test them in situations quickly and efficiently. This is why Cocktrice is especially useful for testing new cards. If you think a card should only be a 1 or 2 of in a deck, playing a league or queueing up on Arena will lead to few games with that card in hand. However, 4 copies may lead to games with multiple copies. Simply putting the card in your starting hand on Cockatrice allows us to rapidly prototype decks including the new card. Returning to the concept of a graph or tree of decisions, Cocktraice allows you to set up the same situation and play it out in various ways, testing strategies and counterstrategies that might have led to different outcomes. This is an underutilized technique in Magic practice, but is extremely common in games like Chess. Part of the reason for this is the software we have available. Additionally, each card you draw adds another level of variability, and it’s dubious that replaying games with the same order of cards drawn is more useful than full randomization each playthrough, to get more of a sense for the multiverse of possible games playable.</p>

<p>Sometimes playing against yourself will reinforce bad habits, make you overthink situations, or lead you to improve slower than against an opponent who can quickly point out decisions you miss or new opportunities to improve your game. I would recommend recording your playtesting session, and having someone review it (though finding this person may be tricky, perhaps a swap? Also requires that you somewhat stay on track in the session instead of going down confusing rabbitholes, or voice your rabbitholes out loud).Self-practice has unique value that can be combined with normal two player practice for maximum effect.</p>

<p>Other extraneous notes on testing process:</p>

<p>A feel for a deck that works can be more valuable than a small quantity of results that suggest otherwise. We are constantly extrapolating from small samples (quote here). Brewing decks or trying to understand new cards can be difficult to get an accurate read. Sometimes, I get a feel for a card just having it in my hand that will let me realize “huh, this card feels like I always want to draw it” or to a lesser extent a feel for situations when it is good “this card feels great in my opening hand, but bad when I draw it after turn 2”. Bootstrapping these initial impressions can be one way to reduce the bias inherent with one’s first time playing a card or deck. For draft specific analysis, tools like 17 lands opening hand win rate can allow one to quantify these feelings. A 17lands for constructed could still be useful, though the overall trends would have a lot more variability than your typical limited set. For example, the existence of dedicated combo decks throws a lot of draft wisdom out the window in deck building and play patterns.</p>

<p>*EDIT THIS: If I am in a dominating spot in a game that I am 95% to win if my spell isn’t spell pierced, and 80% to win if it does get spell pierces, the roughly 25% percent of the time (This logic is comparing wrong - we should be comparing them having spell pierce to them not having spell pierce and usplaying around vs us not - 4 scenarios, add up the ev of both playing around and not playing around)</p>]]></content><author><name>Alex Friedrichsen</name></author><category term="MTG" /><summary type="html"><![CDATA[Sometimes, you find yourself wondering if your crazy brew is competitive.]]></summary></entry><entry><title type="html">PT FF Postmortem</title><link href="https://honestafblog.com/magic,reflection,optimization,ai,organization,teams/2025/06/26/PTFF_postmortem.html" rel="alternate" type="text/html" title="PT FF Postmortem" /><published>2025-06-26T04:52:23+00:00</published><updated>2025-06-26T04:52:23+00:00</updated><id>https://honestafblog.com/magic,reflection,optimization,ai,organization,teams/2025/06/26/PTFF_postmortem</id><content type="html" xml:base="https://honestafblog.com/magic,reflection,optimization,ai,organization,teams/2025/06/26/PTFF_postmortem.html"><![CDATA[<p>I made this note to myself while in the Vegas testing house this past June.</p>

<p>“Busy busy week. Hard to do both job and PT prep. Had to come at the sacrifice of a bit of work, and a bit of money, and a bit of communication, and a bit of self-care.”</p>

<p>Over the past year and a half of playing on the Pro Tour, I have realized I don’t play Magic for the money. Freerolling feels good, and winning feels good, but it’s the status game - for prestige - that I like succeeding in the most. Relatedly, the social network that comes alongside the PT is very intertwined in this game (sometimes unhealthily, perhaps). This post is a self-reflection about what I am getting and what I want to get out of travel, Magic, and my focus.</p>

<p>I had a moment walking across the floor where I realized more acutely than before that I do not play Magic for the money. Of couse, on some level most of us (pro magic players) know this. But it is a comfortable illusion that I am here to win money. Framing Magic as a money making scheme with a clear fitness objective - maximize EV - gives it a straightforward, autitistically simplistic endpoint that circumvents the more complicated question - if we aren’t playing for money, why are we investing all of this time and effort? It’s easier to stay within the framework we have made for ourselves - how do we maximize money and winning inside Magic - than it is to leave the framework and ask this more daunting, introspective type of question. This is the type of question that can lead one to make drastically different choices with the way one spends one’s time in the future. Or, it can conversely lead one to self-acceptance of what they are actually getting out of the thing.</p>

<p>For myself, Magic serves as a social platform in an arena that meritocratically rewards success with prestige. The allure of top 8ing a pro tour comes from the increased status I will have among my peers, both competitive, casual, or sometimes non-magic people when I can refer to this triumph in my card slinging career. (The recency bias of me consuming [Elephant in the Brain] is strong). Being good at competitive Magic comes with a lot of upkeep costs: learning new cards, learning the metagame, constructing new decks, learning new limited formats, etc. The great thing about these costs is that oftentimes I am more than willing to pay them through enjoyable hours spent playing the game. It’s at the point where I am at now, when tournaments are taken Seriously, that I question the overlap of work and play and the balance begins to shift. Knowing that money comes from somewhere else can be freeing.</p>

<p>Our last testing house for Team Handshake Moxfield was decidedly exhausting. We always treat the testing house very seriously, and we are also very willing to reflect on what we can do better each time. For Vegas 2025 we tried following a bit stricter of a meeting schedule, and had done a lot of prep work in constructed leading up to being in the house. Despite this prep work, it ended up feeling a bit stressful, if not exactly hectic, with a lack of confidence leading up to the event in deck selection in constructed. Adequate breaks and self-care weren’t prioritized enough. Personally, I was also trying to juggle remote work for Monday and Tuesday of the house, which added another angle. Having a small amount of separation I find greatly improves my focus. A separate bed room, time spent exercising, going out to eat, etc. Without going further into the details, the testing house felt more like work than play for much of the time.</p>

<p>(Excepting when Johnny Simon Richer Dawson Liam and I met up at the pool cabana)
<img src="\assets\images\PTFF\cabanacirca.jpg" alt="pool cabana" /></p>

<p>Dangerously, and to rail against the self-imposed ignorance of diminishing returns common to all competitive magic players, can I expend less effort for a similar result? What is the optimal amount of work to put in for these large event, personally? As a team? How can we achieve balance? Diminishing returns is the enemy - how do we defeat it? What are my priorities?</p>

<p>Naturally, reflecting on these questions must be contrasted with alternative to Magic. I thrive in competitive environments, albeit if everything becomes competition it’s easier to burn out. Choosing your battles is an important skill, and one that I am not naturally predisposed to. I enjoy maintaining the skills I have, continuing to build up the routines and habits that I use to train my skills. My reasoning for this is simple: you are better at losing than gaining, it’s more efficient to maintain than to lose and gain back. This is a lesson from compounding interest, applied to skills learning. If you let the constant drip go unfettered for several months, getting back to where you were will require more time investment than if you had applied an equal opposite force to the drip, continually. Problematically, I have felt like this makes me less agile, less able to quickly jump on top of new opportunities with full commitment and gusto. The bloat of extra routines takes up mental space - despite this being my primary praise for why we should implement habits in the first place. So why is it that habits still take this space, even after being practiced in some cases for years? As a caveat, maybe I only remember the times on days where it does take active thought and most of the time the habits are working in the background as intended.</p>

<p>Conversely, having many habits can put me into action mode, freezing all active thought (Hannah Arendt). I go go go and work on completing them, finding it harder and harder to actually think deeply when I really should be slowing down. Most of the time, I am aligned with my emphasis on speed (<a href="https://www.lesswrong.com/posts/ovmykzXAyG4RXKkKc/yoda-timers-3-speed">Hammertime</a>). Yet finding that my brain feels deprived of those HIT workout equivalent sessions throughout the day is very bad for long term personal growth.</p>

<p>I realize I should give a more concrete example of what I mean. On a day where I wake up tired, it’s harder than usual to follow habits. I try to write daily, for 5-10 minutes. My most successful habits are stacked on top of one another, or triggered by a particular action like opening my front door or seeing myself in the mirror in the morning. Writing is not currently one of those, and it floats in my workday between 11 and 3, usually. If I have to think about, oh I should do writing, I am distracted from “I am in the zone working on my project for one hour”.</p>

<p>About two and a half weeks before the event, I broke up with my ex-girlfriend. We had been together for two years, since the spring I graduated my master’s program. I also started a new job about 1 month prior and juggling a relationship, job, and magic testing was a lot of work. It was a good decision to break up - being together two years and not feeling optimistic about the future being in a relationship with someone I took as a quality signal that it was time for a change. I had worked to remedy this feeling and we had discussed it, but ultimately the feeling stemmed from an incompatibility that was tied to our identities. While I did my best to get on runs and meditate leading up to travel to Vegas, some amount of processing was definitely delayed until post event. I felt it distinctly on my flight home, crying on the plane ride in the dark early morning hours between (vegas airport code) and Newark seemed in hindsight inevitable. I don’t think that it negatively impacted my event, but just wanted to share here as a place to reflect. Looking back on the relationship (and reviewing some online advice recommended by a friend) it’s clear that our relationship had gotten caught in the anxious-avoidant snare wherein one partner feels their freedom is infringed upon, is reluctant to express or confront, and bottles up insecurity, and the other may cling, focus on interpersonal issue(s) instead of self-improvement, and reflect a feeling of insecurity outwardly. This dynamic can be polarizing, with one partner drawing away causing the other partner to lean and repeat, until the distance is great and returning to the center requires a strong show of commitment, growth, or emotional fortitude. I try to learn from my relationships (and hopefully not always the same thing over and over). This time around, learning about this dynamic has given me tools to build better boundaries, identify earlier on dynamics that could transform in a similarly unhealthy way, and allowed me to feel a bit of what a longer term bond can or cannot provide based on what you put into it. For now, i’m back to the single lifestyle and the dating world with a fresh perspective on being my best self and the best romantic partner I can be. P.S. I’ve created a [dating form], if you’re interested in throwing your hat in the ring. No promises that this will stay active, but I’ll try to check it for now.</p>

<p>If you are instead interested in giving more platonic commentary, whether that come in the form of advice, banter, praise, or criticism, you can put your thoughts [here], anonymously or self-identifyingly.</p>

<p><a href="https://docs.google.com/forms/d/e/1FAIpQLScNcQb4_0E_9X5OLfcFcx3Y5C2OZY99rvc8pIW-1yspTabu7w/viewform?usp=dialog">Feedback Form</a></p>

<p>We’ve gotten far off the specifics of the Vegas trip (and that’s totally okay) and I’d like to finish out this article by recounting some of the other more lightweight, fun memories from the trip.</p>

<p>Party on Saturday post event in the penthouse, the non-master bathroom was bigger than my bedroom at home:</p>

<p><img src="\assets\images\PTFF\bathroomsweep.mp4" alt="bathroom sweep gif" /></p>

<p>Playing in my first WSOP event, a 500$ freezeout. I had registered for the event alongside Javier Dominguez, Nathan Steur, and Karl Sarap. Somehow, Nathan and I were placed at the same table! Unlucky! Then, after about 30 minutes, Michael Acevedo was sat down at our table coming off a huge win the night before. None of us ended up day 2ing this one, but we lasted a while in a field of thousands, nonetheless.</p>

<p><img src="\assets\images\PTFF\wsop_freezeout.jpg" alt="WSOP freezeout room" /></p>

<p>One of my great joys is finding public pianos. There is a site which is constanlty going out of date, (public pianos .com) that I have tried to use in the past. More often than not I must find the pianos on my own. Consistently, I connect through Newark as a United flier. Right outside the United Club? A Finely tuned piano, for me to play sunny morning atmospheric improvisations, and a bit of Twentysomething jazz scatting at 5:45 AM on my way back home:</p>

<p><img src="\assets\images\PTFF\newarkpiano.jpg" alt="Newark piano" /></p>

<p>Finally, my mom was courteous enough to pick me up to drive me back to my apartment and even brought a breakfast bagel! Even after all these years of attending tournaments, my mom and dad still support me, watching the standings and streams, and debriefing afterwards. Love you guys!</p>]]></content><author><name>Alex Friedrichsen</name></author><category term="magic,reflection,optimization,ai,organization,teams" /><summary type="html"><![CDATA[I made this note to myself while in the Vegas testing house this past June.]]></summary></entry><entry><title type="html">PT Chicago 2025</title><link href="https://honestafblog.com/magic,reflection,optimization,ai,organization,teams/2025/02/28/handshake_chicago.html" rel="alternate" type="text/html" title="PT Chicago 2025" /><published>2025-02-28T04:52:23+00:00</published><updated>2025-02-28T04:52:23+00:00</updated><id>https://honestafblog.com/magic,reflection,optimization,ai,organization,teams/2025/02/28/handshake_chicago</id><content type="html" xml:base="https://honestafblog.com/magic,reflection,optimization,ai,organization,teams/2025/02/28/handshake_chicago.html"><![CDATA[<h3 id="chicago-pt-2025--tournament-reflection">Chicago PT 2025:  Tournament Reflection</h3>
<h2 id="what-went-right">What Went Right</h2>
<h1 id="personal-performance">Personal Performance</h1>

<p>Successfully balanced social energy with focus and necessary recharging periods
Maintained a moderate exercise routine throughout the event
Adhered to a reasonable sleep schedule
Kept dining budget on target (~$220) while enjoying quality food and house meals
Utilized time efficiently for testing while maintaining healthy habits (eating, napping, reading)</p>

<h1 id="team-collaboration">Team Collaboration</h1>

<p>Pre-tournament planning at the house allowed us to refine numerous ideas
Successfully coordinated with Moxfield and managed sponsorship activities for the team
Made the best of merchandise challenges</p>

<h1 id="tournament-results">Tournament Results</h1>

<p>Advanced to Day 2 despite difficult starts
Recovered to an even record through intentional mental adjustment
Felt confident in deck selection and draft preparation</p>

<h2 id="areas-for-improvement">Areas for Improvement</h2>
<h1 id="preparation">Preparation</h1>

<p>Need more repetitions with the chosen deck before future tournaments
Should test specific sideboard cards more thoroughly (practicing by putting cards directly into hand)
Develop methods for faster testing:</p>

<p>Assemble more paper decks or proxy decks
Find alternatives to MTGO which proved too slow this time</p>

<h1 id="tournament-performance">Tournament Performance</h1>

<p>Aim for slightly faster pace of play
Draft strategy became too greedy in the second draft; should deviate less from plan, especially in high-power packs</p>

<h1 id="physical-wellbeing">Physical Wellbeing</h1>

<p>Improve sleep quality during tournament days by:</p>

<p>Better controlling room temperature
Addressing snoring issues
Implementing a calming pre-sleep ritual to reduce stress
Entering room earlier to shower and get to bed sooner
Completing all tasks the night before (no morning todos)
Optimizing timing of pre-tournament meals
Including appropriate exercise the day before</p>

<h1 id="team-dynamics">Team Dynamics</h1>

<p>Meetings were excessively long and unfocused
Need a designated leader to maintain meeting efficiency and focus discussions
Delegate presentation control more effectively
Some team members were unwilling to try all decks or dismissed options based on personal preference
Should give more credit to deck builders to encourage innovation</p>

<h1 id="mental-approach">Mental Approach</h1>

<p>Break out of stimulus-response patterns by incorporating more reflection/meditation
Focus on high-efficiency testing and reducing panic as deadlines approach
Regularly meditate on the “Most Important Question” at each stage</p>

<h1 id="professional-presentation">Professional Presentation</h1>

<p>Jerseys arrived late
Need to update social media during tournaments
Take more photos for content
Dress more professionally (pack more appropriately)
Improve personal marketing and narrative generation</p>

<h1 id="logistics">Logistics</h1>

<p>Better manage food options during the second half of tournament days
Retire earlier the night before events
Reduce consumption of sugary foods at the team house</p>]]></content><author><name>Alex Friedrichsen</name></author><category term="magic,reflection,optimization,ai,organization,teams" /><summary type="html"><![CDATA[Chicago PT 2025: Tournament Reflection What Went Right Personal Performance]]></summary></entry><entry><title type="html">Foundations Archetype Primer</title><link href="https://honestafblog.com/draft,/limited,/mtg,/strategy/2024/11/21/Foundations_Archetype_Primer_UG.html" rel="alternate" type="text/html" title="Foundations Archetype Primer" /><published>2024-11-21T04:52:23+00:00</published><updated>2024-11-21T04:52:23+00:00</updated><id>https://honestafblog.com/draft,/limited,/mtg,/strategy/2024/11/21/Foundations_Archetype_Primer_UG</id><content type="html" xml:base="https://honestafblog.com/draft,/limited,/mtg,/strategy/2024/11/21/Foundations_Archetype_Primer_UG.html"><![CDATA[<h1 id="mtg-foundations-draft-guide-color-pair-analysis-and-winning-strategies">MTG Foundations Draft Guide: Color Pair Analysis and Winning Strategies</h1>

<p>This is HonestAF aka Alex Friedrichsen writing to you on a chilly Vermont mid-November day in the thick of stick season. Don’t fret! Brisk weather is yet another excuse to stay inside and fire some drafts.</p>

<h2 id="introduction">Introduction</h2>
<p>Magic Foundations returns to fundamentals with a core set-style draft environment that focuses on two-color archetypes and battlefield-centric gameplay. We’ve escaped the haunted, convoluted rooms of Duskmourn. Now, it’s time to slam a Serra Angel on turn 5 and hope it sticks.</p>

<p>Or perhaps slam a well-fed Craw Wurm on turn 6 - <em>I’m looking at you, Quakestriker Ceratops</em></p>

<p>While I appreciate complicated board states and intricate card interactions, it’s refreshing to draft a set that doesn’t demand too much complexity while bringing that cozy nostalgic feeling we all enjoy.</p>

<h2 id="draft-priorities">Draft Priorities</h2>
<ol>
  <li>Premium removal - another set where efficient removal reigns supreme</li>
  <li>Archetype-specific payoffs - signpost uncommons and synergy rares form the foundation of great decks</li>
  <li>Efficient creatures - know which ones are generalists within a color, and which are more niche</li>
</ol>

<p>Let’s examine what’s been winning! These decks are taken from the 17Lands repository of trophy decks for best-of-three matches (https://www.17lands.com/trophy_decks). While I’m including images of only one 3-0 deck per archetype, the takeaways synthesize information from several successful decks.</p>

<h2 id="analysis-framework">Analysis Framework</h2>
<p>For each color pair, I’ll examine:</p>
<ol>
  <li>Archetype gameplan</li>
  <li>Sample 3-0 deck</li>
  <li>Key overperformers</li>
  <li>Strategic advice</li>
</ol>

<h2 id="uw-blue-white">UW (Blue-White)</h2>
<h3 id="gameplan">Gameplan</h3>
<p>The UW deck functions as a classic “skies” strategy, combining efficient flyers with ground defense and tempo plays.</p>

<h3 id="3-0-deck-example">3-0 Deck Example</h3>
<p><img src="\assets\images\2024-11-20\UW_3-0.png" alt="UW 3-0 fliers" /></p>

<h3 id="overperformers">Overperformers</h3>
<ul>
  <li>Luminous Rebuke</li>
  <li>Felidar Savior</li>
  <li>Dazzling Angel</li>
  <li>Healer’s Hawk</li>
</ul>

<h3 id="strategy-tips">Strategy Tips</h3>
<ul>
  <li>Your creatures can usually fly over blockers, while you can effectively block ground threats</li>
  <li>Stall the board with high-toughness creatures or lifegain effects (Aegis Turtle, Felidar Savior)</li>
  <li>Prioritize 2-3 mana flyers over expensive ones</li>
  <li>Efficient interaction helps you race against threats</li>
  <li>Lifegain supports your racing strategy</li>
</ul>

<h2 id="ub-blue-black">UB (Blue-Black)</h2>
<h3 id="gameplan-1">Gameplan</h3>
<p>UB operates as a control deck that can pivot into tempo strategies when needed.</p>

<h3 id="3-0-deck-example-1">3-0 Deck Example</h3>
<p><img src="\assets\images\2024-11-20\UB_3-0.png" alt="UB 3-0" /></p>

<h3 id="overperformers-1">Overperformers</h3>
<ul>
  <li>Bake into a Pie</li>
  <li>Think Twice</li>
  <li>Burglar Rat</li>
  <li>Eaten Alive</li>
  <li>Infestation Sage</li>
</ul>

<h3 id="strategy-tips-1">Strategy Tips</h3>
<ul>
  <li>Flashback spells combined with looter effects generate card advantage</li>
  <li>Dreadwing Scavenger serves as a powerful signpost that leverages graveyard synergies while finding your bombs</li>
  <li>Eaten Alive is strong even without fodder, but exceptional with it</li>
  <li>Macabre Waltz can retrieve your bombs even if discarded early</li>
  <li>Some builds succeed with high spell counts (Fleeting Distraction, Stab, Refute) alongside Tolarian Terror</li>
</ul>

<h2 id="ur-blue-red">UR (Blue-Red)</h2>
<h3 id="gameplan-2">Gameplan</h3>
<p>UR aims to establish an early threat then push damage through pings with card draw and efficient removal. Tempo heavy gameplan.</p>

<h3 id="3-0-deck-example-2">3-0 Deck Example</h3>
<p><img src="\assets\images\2024-11-20\UR_3-0.png" alt="UR 3-0" /></p>

<h3 id="overperformers-2">Overperformers</h3>
<ul>
  <li>Bigfin Bouncer</li>
  <li>Think Twice</li>
  <li>Burst Lightning</li>
  <li>Fleeting Distraction</li>
  <li>Thrill of Possibility</li>
</ul>

<h3 id="strategy-tips-2">Strategy Tips</h3>
<ul>
  <li>Maintain a high density of two-drops with a low curve</li>
  <li>Efficient UR decks spend all their mana every turn</li>
  <li>The strategy can be fragile - losing your pinger or drawing it late reduces crucial closing power</li>
  <li>Multiple viable builds exist, including tokens and burn strategies</li>
  <li>A protected two-drop backed by removal can serve as a win condition</li>
  <li>Can pivot to control with sufficient cheap removal and card draw</li>
</ul>

<h2 id="ug-blue-green">UG (Blue-Green)</h2>
<h3 id="gameplan-3">Gameplan</h3>
<p>UG ranks among the weaker color pairs, partly due to a lack of cohesive identity. While designed as a ramp archetype, the set’s emphasis on curving out means ramp threats often can’t recover lost tempo. Success usually comes from leaning heavily into either blue or green.</p>

<h3 id="3-0-deck-example-3">3-0 Deck Example</h3>
<p><img src="\assets\images\2024-11-20\UG_3-0.png" alt="UG 3-0" /></p>

<h3 id="overperformers-3">Overperformers</h3>
<ul>
  <li>Llanowar Elves</li>
  <li>Bite Down</li>
  <li>Uncharted Voyage</li>
  <li>Wary Thespian</li>
</ul>

<h3 id="strategy-tips-3">Strategy Tips</h3>
<ul>
  <li>Aim to build a primarily green deck splashing blue for cards like Uncharted Voyage, Think Twice, or Tatyova</li>
  <li>Avoid pure ramp strategies (multiple Grow From the Ashes)</li>
  <li>Exception: decks with several splashable bombs can succeed with a UG base, though this is harder than in previous sets</li>
</ul>

<h2 id="bw-black-white">BW (Black-White)</h2>
<h3 id="gameplan-4">Gameplan</h3>
<p>BW is a strong color pair focusing on lifegain and fodder creatures, capable of both going wide and playing attrition games.</p>

<h3 id="3-0-deck-example-4">3-0 Deck Example</h3>
<p><img src="\assets\images\2024-11-20\BW_3-0.png" alt="BW 3-0" /></p>

<h3 id="overperformers-4">Overperformers</h3>
<ul>
  <li>Squad Rallier</li>
  <li>Dazzling Angel</li>
  <li>Helpful Hunter</li>
  <li>Vampire Soulcaller</li>
  <li>Luminous Rebuke</li>
</ul>

<h3 id="strategy-tips-4">Strategy Tips</h3>
<ul>
  <li>Squad Rallier provides both repeatable card advantage and a mana sink, rare qualities in BW</li>
  <li>Cards like Ravenous Amulet and Vampire Gourmand offer sacrifice outlets that generate value from cats and rats</li>
  <li>Prioritize efficient removal (Eaten Alive, Stab, Luminous Rebuke)</li>
  <li>Deep common pool means playables are readily available</li>
</ul>

<h2 id="bg-black-green">BG (Black-Green)</h2>
<h3 id="gameplan-5">Gameplan</h3>
<p>Another of the weaker color pairs, BG centers on the morbid mechanic. Like similar mechanics that trigger from normal gameplay patterns, it’s difficult to build around deliberately. BG typically plays as a “good stuff” archetype.</p>

<h3 id="3-0-deck-example-5">3-0 Deck Example</h3>
<p><img src="\assets\images\2024-11-20\BG_3-0.png" alt="BG 3-0" /></p>

<h3 id="overperformers-5">Overperformers</h3>
<ul>
  <li>Evolving Wilds</li>
  <li>Bushwhack</li>
  <li>Bake into a Pie</li>
  <li>Treetop Snarespinner</li>
  <li>Dwynen’s Elite</li>
</ul>

<h3 id="strategy-tips-5">Strategy Tips</h3>
<ul>
  <li>Focus on raw card power level first, incorporating synergies where possible</li>
  <li>Two-for-one effects help compensate for weaker synergies</li>
  <li>Combine permanent-heavy builds with regrowth effects - casting Elvish Regrower as a vanilla 4/3 feels like you lost the game already</li>
  <li>Strong candidate for splashing bombs thanks to green’s fixing (Evolving Wilds is the highest-winrate common)</li>
  <li>Treetop Snarespinner provides a mana sink at common</li>
</ul>

<h2 id="br-black-red">BR (Black-Red)</h2>
<h3 id="gameplan-6">Gameplan</h3>
<p>BR is deceptively complex - rather than focusing purely on the raid mechanic and aggression, it performs best as a midrange sacrifice deck that generates value while steadily dealing damage.</p>

<h3 id="3-0-deck-example-6">3-0 Deck Example</h3>
<p><img src="\assets\images\2024-11-20\BR_3-0.png" alt="BR 3-0" /></p>

<h3 id="overperformers-6">Overperformers</h3>
<ul>
  <li>Hungry Ghoul</li>
  <li>Gutless Plunderer</li>
  <li>Burst Lightning</li>
  <li>Gorehorn Raider</li>
  <li>Involuntary Employment</li>
</ul>

<h3 id="strategy-tips-6">Strategy Tips</h3>
<ul>
  <li>The classic “steal, attack, sacrifice” pattern is particularly effective here</li>
  <li>The archetype utilizes several cards that other black decks value less, creating draft opportunities</li>
  <li>Gorehorn Raider is a knock-off Flametongue Kavu</li>
  <li>Remain flexible between attrition and aggressive gameplans based on the matchup</li>
</ul>

<h2 id="gw-green-white">GW (Green-White)</h2>
<h3 id="gameplan-7">Gameplan</h3>
<p>GW focuses on +1/+1 counters with high synergy potential. The deck can succeed by either going wide or tall with careful counter distribution.</p>

<h3 id="3-0-deck-example-7">3-0 Deck Example</h3>
<p><img src="\assets\images\2024-11-20\GW_3-0.png" alt="GW 3-0" /></p>

<h3 id="overperformers-7">Overperformers</h3>
<ul>
  <li>Banishing Light</li>
  <li>Treetop Snarespinner</li>
  <li>Bite Down</li>
  <li>Healer’s Hawk</li>
  <li>Inspiring Paladin</li>
</ul>

<h3 id="strategy-tips-7">Strategy Tips</h3>
<ul>
  <li>Treetop Snarespinner provides a valuable mana sink in a color pair with few options</li>
  <li>Healer’s Hawk excels as a counter target, often drawing removal</li>
  <li>When playing against GW, watch for opponent’s Claws Out, especially against cat-heavy decks</li>
  <li>Strong rare and mythic bombs complement an already solid common/uncommon base</li>
  <li>The combination of efficient creatures and synergy makes GW both powerful and consistent</li>
</ul>

<h2 id="gr-green-red">GR (Green-Red)</h2>
<h3 id="gameplan-8">Gameplan</h3>
<p>While the Gruul mechanic centers on power 4 or greater, like GB, this usually happens naturally through normal gameplay.</p>

<h3 id="3-0-deck-example-8">3-0 Deck Example</h3>
<p><img src="\assets\images\2024-11-20\GR_3-0.png" alt="GR 3-0" /></p>

<h3 id="overperformers-8">Overperformers</h3>
<ul>
  <li>Wary Thespian</li>
  <li>Treetop Snarespinner</li>
  <li>Beast-Kin Ranger</li>
  <li>Ambush Wolf</li>
  <li>Cackling Prowler</li>
</ul>

<h3 id="strategy-tips-8">Strategy Tips</h3>
<ul>
  <li>Prioritize early plays to avoid clunky draws with too many 4-6 drops</li>
  <li>Few GR commons provide evasion (trample, menace)</li>
  <li>Removal is largely conditional on toughness - use it wisely</li>
  <li>Develop a clear plan: either stall and win with dragons or trade and dominate the ground</li>
  <li>Both Ambush Wolf and Beast-Kin Ranger easily enable 4-power synergies</li>
</ul>

<h2 id="wr-white-red">WR (White-Red)</h2>
<h3 id="gameplan-9">Gameplan</h3>
<p>WR embodies classic go-wide token aggro, heavily dependent on synergy.</p>

<h3 id="3-0-deck-example-9">3-0 Deck Example</h3>
<p><img src="\assets\images\2024-11-20\WR_3-0.png" alt="WR 3-0" /></p>

<h3 id="overperformers-9">Overperformers</h3>
<ul>
  <li>Dazzling Angel</li>
  <li>Hare Apparent</li>
  <li>Felidar Savior</li>
  <li>Fleeting Flight</li>
  <li>Prideful Parent</li>
</ul>

<h3 id="strategy-tips-9">Strategy Tips</h3>
<ul>
  <li>Best home for Hare Apparent strategies</li>
  <li>Heroic Reinforcements can end games suddenly - multiple copies are exceptional</li>
  <li>Can leverage red’s 4-power creatures effectively alongside go-wide plan</li>
  <li>Fanatical Firebrand underperforms expectations</li>
</ul>

<h2 id="color-pair-rankings">Color Pair Rankings</h2>
<ol>
  <li>UW</li>
  <li>BW - BR - UB</li>
  <li>GW - GR - WR</li>
  <li>GB - UR</li>
  <li>UG</li>
</ol>

<h2 id="conclusion">Conclusion</h2>
<p>Foundations rewards fundamental Magic skills, but a skilled player still has the tools to beat variance and come up on top most of the time. Drafting is more straightforward than usual given restrictive splashing and focused color pairs. Focus on curve, removal, and synergy over complicated combinations. Take on color dual lands highly. Gain an edge through knowing your gameplan, deck construction post draft, and playing towards your win condition.</p>]]></content><author><name>Alex Friedrichsen</name></author><category term="Draft," /><category term="Limited," /><category term="MTG," /><category term="Strategy" /><summary type="html"><![CDATA[MTG Foundations Draft Guide: Color Pair Analysis and Winning Strategies]]></summary></entry><entry><title type="html">Global Entry</title><link href="https://honestafblog.com/story,/breakfast,/travel/2023/12/18/global_entry.html" rel="alternate" type="text/html" title="Global Entry" /><published>2023-12-18T01:31:00+00:00</published><updated>2023-12-18T01:31:00+00:00</updated><id>https://honestafblog.com/story,/breakfast,/travel/2023/12/18/global_entry</id><content type="html" xml:base="https://honestafblog.com/story,/breakfast,/travel/2023/12/18/global_entry.html"><![CDATA[<p>Storytelling</p>

<p>This past Friday I got on a bus from Nashua NH to the Boston Logan airport. The bus arrived 20 minutes before boarding was scheduled to close. I applied for global entry the past spring, driving up to the remote town of Derby line on the Canadian border with Vermont. The border patrol officer doing my investigation made me wait for 30 minutes past my appointment time, despite no apparent line. The actual interview took five. He was impressed by my United credit card, which I had used to pay for the application. He told me when prompted, “I hear that Roasters does a good breakfast quiche. I didn’t tell you that though.” Apparently border patrol agents are expected to remain impartial, and the thickly jowled man took this obligation seriously, though not enough to prevent him from indirectly spreading the good word of his favorite breakfast diner.</p>

<p>When I left the border and drove the 15 minutes to Roasters, I was made to wait behind a man and his two children for a table to come available. The man had curly black hair and looked slightly overwhelmed, not wanting to disappoint his kids and provoke rebuke from their absent mother. I wondered why he was out to a late 11:30 am lunch on a Thursday. Shouldn’t they be in school? Roasters sat atop a steep ridge. A sketchy wooden overlook that barred off vistors not 15 feet from the back of the building spoke of long years in business. There was a rusted bike just over the edge of the ridge, too far down to try and retrieve safely. I went back around to the front of the small building and took a plastered stairway up to the second floor. At some point this might’ve been the apartment where the owners lived. But now, I was welcomed in by a placard with a picture of a lounging naked woman to an out of place sex shop. I smiled towards the counter, and told them that I would let them know if I needed any help. I wanted to look at the sex toys. Who doesn’t want to look at the sex toys? It wasn’t a large selection, and I would’ve been aghast to spend over seventy dollars on a life size replica of Hugh Manita’s dick or a fleshlight with realistic human lips, lipstick not included. The DVDs stared at me from another era, where internet porn hadn’t yet proliferated, and we were ashamed if someone found our copy of Goddess Bless Me! II under the bed.</p>

<p>I sat in parallel to an old lady who slowly, slowly picked away at her American cheese omelet. She smiled at me, and I waved back. The wait wasn’t long, and I listened to a man speak French on a business call in the back corner. Of course, we were next to the border. But it seemed bathetic to cross the border just for breakfast. When I got bored, I turned on Youtube on a low volume, burning away my best attempts at a mindful boredom. Passive observation passed the rest of the experience through a dusty filter as I shoveled down my eggs and sausage, before beginning the long drive home.</p>

<p>~~~~~~~~</p>]]></content><author><name>Alex Friedrichsen</name></author><category term="story," /><category term="breakfast," /><category term="travel" /><summary type="html"><![CDATA[Storytelling]]></summary></entry><entry><title type="html">hello world</title><link href="https://honestafblog.com/magic/reflection/syntax/meta/2023/11/10/hello_world.html" rel="alternate" type="text/html" title="hello world" /><published>2023-11-10T04:52:23+00:00</published><updated>2023-11-10T04:52:23+00:00</updated><id>https://honestafblog.com/magic/reflection/syntax/meta/2023/11/10/hello_world</id><content type="html" xml:base="https://honestafblog.com/magic/reflection/syntax/meta/2023/11/10/hello_world.html"><![CDATA[<h3 id="my-first-blog-post">My First Blog Post</h3>

<h1 id="lots-of-experiementing-with-formatting">Lots of experiementing with formatting</h1>
<p><em>i’m trying to remember markdown syntax</em>
<del>it’s going well</del>
<strong>Knock on wood</strong></p>

<p>Today I set up this blog site. Installing Jekyll wasn’t too too bad. Actually felt like I was some dev things for the first time in a while.
After all, how much of being a dev is actually coding, how much is reading docs and installing packages? (it depends)</p>

<p>One thing I like to do is make lists:</p>
<ul>
  <li>To do lists</li>
  <li>reflection lists</li>
  <li>lists of lists to make</li>
  <li>meta lists</li>
  <li>in my head</li>
  <li>l</li>
  <li>i</li>
  <li>s</li>
  <li>t</li>
  <li>s</li>
  <li>NOT sharepoint lists</li>
</ul>

<p>I do want to figure out a good conduit for my thoughts, and sometimes paper seems irreplaceable. Thus it must be transferred if I want this blog to be truly authentic. I’m not sure to what extent the blog should be structured, the kind of content I will release, etcetera. I can only imagine the expansive, highly trafficked, world of the honestAF blog, full of instructional deck guides, poker videos, fantasy worldbuilding, piano sheets, and whatever else my mind has to offer. It’s kind of like my notion page, but for the world to see.</p>

<p>Does anyone want to see?
I’m not sure if I care about the answer to that question…</p>

<h1 id="what-is-the-af-in-honestaf">What is the “AF” in honestAF</h1>
<p>One, it’s my initials, Alex/Alexander/Xander Friedrichsen.
Two, it’s <strong>AS FUCK</strong>, because we like to be fully blatantly honest.
Some rationale, allegorically (<a href="https://www.jstor.org/stable/465587">can an allegory be quantitative? random article I haven’t read yet.</a>):
I am playing a combo deck that has 51% against the field. The combo is linear, uninteractive, and results in many nongames.
I am playing a control deck that has 49% against the field. The deck feels like it is always in every game it plays. It interacts and has lots of agency.
Obviously, the combo deck is superior from a spike’s view. If I am trying to win the tournament, I chose combo deck (let’s say CI is +- .001%).
Being Honest can feel like playing the combo deck - you might sometimes get reactions that are more visceral and polarizing, but will result in a net positive.
Being <del>dishonest</del> the social chameleon can result in a twisting and turning style that may make you party to none.
Contextually, it is murkier. But I can say whatever I want in my blog, and philosophically I identify with this.
Hypocrisy be damned, let’s examine that later.</p>

<p>Lastly, here is a picture of the deck I have been playing, taken from Jaberwocki due to his incredibly consistent results.
I present: Stock Rakdos Sacrifice (Pioneer)</p>

<p>2 Blackcleave Cliffs
4 Blightstep Pathway
4 Blood Crypt
4 Bloodtithe Harvester
3 Cauldron Familiar
3 Claim the Firstborn
4 Deadly Dispute
2 Den of the Bugbear
4 Fable of the Mirror-Breaker
4 Fatal Push
2 Hive of the Eye Tyrant
1 Kroxa, Titan of Death’s Hunger
4 Mayhem Devil
1 Mountain
1 Ramunap Ruins
1 Sokenzan, Crucible of Defiance
2 Sulfurous Springs
1 Swamp
1 Takenuma, Abandoned Mire
4 Thoughtseize
3 Unlucky Witness
1 Urborg, Tomb of Yawgmoth
4 Witch’s Oven</p>

<p>4 Damping Sphere
2 Duress
2 Furnace Reins
1 Jegantha, the Wellspring
1 Kolaghan’s Command
1 Kroxa, Titan of Death’s Hunger
4 Unlicensed Hearse</p>

<p><img src="\assets\images\juicy-j.jpg" alt="My Image" /></p>]]></content><author><name>Alex Friedrichsen</name></author><category term="magic" /><category term="reflection" /><category term="syntax" /><category term="meta" /><summary type="html"><![CDATA[My First Blog Post]]></summary></entry></feed>