---
title: "Playbooks: Build Your Own AI Agent for One Business Process"
description: "Free playbooks that walk you and your coding agent through building an AI agent for one business process: what to build, in what order, where it gets dangerous."
author: "Eduard Klein"
date: 2026-08-19
updated: 2026-08-26
lang: en
type: pages
url: "https://eduardklein.com/playbooks/"
site: "Eduard Klein"
---

<section class="pb-hero">
  <div class="pb-inner pb-hero-inner">
    <div class="pb-hero-text">
      <div class="pb-eyebrow">Playbooks</div>
      <h1>Build the agent yourself.</h1>
      <p class="pb-hero-lead">Each playbook takes one business process and walks you through building an AI agent for it, with your coding agent doing the typing.</p>
      <div class="pb-hero-actions">
        <a class="pb-btn pb-btn-primary" href="#playbooks">Browse the playbooks →</a>
      </div>
      <p class="pb-hero-note">Free to read after a one-minute sign-up. No card.</p>
    </div>
    <div class="pb-hero-card" aria-hidden="true">
      <div class="pb-deck" data-pb-deck>
        <figure class="pb-sheet pb-sheet--3">
          <div class="pb-sheet-head"><span class="pb-sheet-no">03</span><span class="pb-sheet-name">Extended Blueprint</span></div>
          <div class="pb-sheet-reader">for your coding agent</div>
          <div class="pb-sheet-art pb-art-code"><span class="pb-row"><i class="w2"></i><i class="w5"></i></span><span class="pb-row"><i class="w3"></i><i class="w4"></i><i class="w2"></i></span><span class="pb-row"><i class="w4"></i><i class="w3"></i></span><span class="pb-row pb-row-caret"><i class="w2"></i></span></div>
        </figure>
        <figure class="pb-sheet pb-sheet--2">
          <div class="pb-sheet-head"><span class="pb-sheet-no">02</span><span class="pb-sheet-name">Blueprint</span></div>
          <div class="pb-sheet-reader">for your developer</div>
          <div class="pb-sheet-art pb-art-map"><span class="pb-node"></span><span class="pb-edge"></span><span class="pb-node pb-node-accent"></span><span class="pb-edge"></span><span class="pb-node"></span></div>
        </figure>
        <figure class="pb-sheet pb-sheet--1">
          <div class="pb-sheet-head"><span class="pb-sheet-no">01</span><span class="pb-sheet-name">Playbook</span></div>
          <div class="pb-sheet-reader">for you, no code</div>
          <div class="pb-sheet-art pb-art-prose"><span class="pb-row"><i class="w9"></i></span><span class="pb-row"><i class="w7"></i></span><span class="pb-row"><i class="w8"></i></span><span class="pb-row"><i class="w5"></i></span></div>
        </figure>
      </div>
    </div>
  </div>
</section>

<section class="pb-section pb-section-alt" id="playbooks">
  <div class="pb-inner">
    <div class="pb-eyebrow">Playbooks</div>
    <h2 class="pb-h2">Pick a process. Build the agent for it.</h2>
    <p class="pb-lead">Sales and outreach first, because that is where I have run the systems myself. More follow.</p>
    <div class="pb-cards">
      <article class="pb-card">
        <div class="pb-card-cover">
          <svg viewBox="0 0 400 190" role="img" aria-label="Signals flowing through one central store out to an isolated sandbox"><defs><linearGradient id="pbg1" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#2b5a78"/><stop offset="1" stop-color="#1a3648"/></linearGradient></defs><rect width="400" height="190" fill="url(#pbg1)"/><g opacity=".13" stroke="#fff" stroke-width="1"><path d="M0 47.5h400M0 95h400M0 142.5h400M100 0v190M200 0v190M300 0v190"/></g><g stroke="#8FB4CC" stroke-width="1.5" fill="none"><path d="M74 55h44M74 95h44M74 135h44"/></g><g fill="#8FB4CC"><circle cx="58" cy="55" r="7"/><circle cx="58" cy="95" r="7"/><circle cx="58" cy="135" r="7"/></g><rect x="124" y="60" width="96" height="70" rx="10" fill="#fff"/><g fill="#2b5a78"><rect x="138" y="76" width="68" height="6" rx="3"/><rect x="138" y="92" width="68" height="6" rx="3"/><rect x="138" y="108" width="44" height="6" rx="3"/></g><path d="M226 95h40" stroke="#FA454D" stroke-width="2" fill="none"/><path d="M262 89l10 6-10 6z" fill="#FA454D"/><rect x="280" y="52" width="86" height="86" rx="12" fill="none" stroke="#FA454D" stroke-width="2" stroke-dasharray="7 6"/><g fill="#FA454D"><circle cx="323" cy="95" r="13"/></g><path d="M317 95l4 4 8-9" stroke="#1a3648" stroke-width="2.5" fill="none" stroke-linecap="round" stroke-linejoin="round"/></svg>
        </div>
        <div class="pb-card-main">
          <div class="pb-card-kicker">Outreach</div>
          <h3>Build Your Own AI SDR</h3>
          <p class="pb-card-sub">The top-of-funnel system that still works in month six, because the context lives in one place.</p>
          <ul class="pb-card-list">
            <li><strong>The whole system mapped.</strong> Know what to build, and in what order, before you start.</li>
            <li><strong>Secrets never reach a model.</strong> A credential setup you can verify.</li>
            <li><strong>The dangerous edge, isolated.</strong> A hostile web page cannot steer your agent.</li>
          </ul>
          <div class="pb-card-foot">
            <a class="pb-btn pb-btn-primary" href="https://app.eduardklein.com/products/ai-sdr">Open the playbook →</a>
            <span class="pb-card-meta">3 documents · Free</span>
          </div>
        </div>
      </article>
      <article class="pb-card">
        <div class="pb-card-cover">
          <svg viewBox="0 0 400 190" role="img" aria-label="A browser window with a filter panel and a list of matching results"><defs><linearGradient id="pbg2" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#2b5a78"/><stop offset="1" stop-color="#1a3648"/></linearGradient></defs><rect width="400" height="190" fill="url(#pbg2)"/><g opacity=".13" stroke="#fff" stroke-width="1"><path d="M0 47.5h400M0 95h400M0 142.5h400M100 0v190M200 0v190M300 0v190"/></g><rect x="46" y="34" width="308" height="122" rx="12" fill="#fff"/><path d="M46 46a12 12 0 0112-12h284a12 12 0 0112 12v14H46z" fill="#E8EDF2"/><g fill="#B8C8D6"><circle cx="62" cy="47" r="4"/><circle cx="76" cy="47" r="4"/><circle cx="90" cy="47" r="4"/></g><rect x="108" y="42" width="120" height="10" rx="5" fill="#CBD8E3"/><rect x="60" y="74" width="86" height="68" rx="8" fill="#F4F8FB"/><g fill="#FA454D"><rect x="70" y="86" width="42" height="6" rx="3"/></g><g fill="#B8C8D6"><rect x="70" y="100" width="66" height="5" rx="2.5"/><rect x="70" y="112" width="52" height="5" rx="2.5"/><rect x="70" y="124" width="60" height="5" rx="2.5"/></g><g><rect x="160" y="74" width="180" height="20" rx="6" fill="#F4F8FB"/><rect x="160" y="100" width="180" height="20" rx="6" fill="#F4F8FB"/><rect x="160" y="126" width="180" height="16" rx="6" fill="#F4F8FB"/><circle cx="174" cy="84" r="6" fill="#8FB4CC"/><circle cx="174" cy="110" r="6" fill="#8FB4CC"/><rect x="188" y="81" width="96" height="6" rx="3" fill="#CBD8E3"/><rect x="188" y="107" width="76" height="6" rx="3" fill="#CBD8E3"/></g></svg>
        </div>
        <div class="pb-card-main">
          <div class="pb-card-kicker">Experimental study</div>
          <h3>Build Your Own Sales Navigator Agent</h3>
          <p class="pb-card-sub">An agent that works the search surface for you, driven through a real browser under your own login.</p>
          <ul class="pb-card-list">
            <li><strong>The full search surface, documented.</strong> Stop guessing what the tool can express.</li>
            <li><strong>An honest read on the risk.</strong> That includes what humanisation does not buy you.</li>
          </ul>
          <p class="pb-warn"><strong>Terms notice:</strong> automating LinkedIn breaches section 8.2 of its User Agreement. Experimental study.</p>
          <div class="pb-card-foot">
            <a class="pb-btn pb-btn-primary" href="https://app.eduardklein.com/products/sales-navigator-agent">Open the playbook →</a>
            <span class="pb-card-meta">3 documents · Free</span>
          </div>
        </div>
      </article>
      <article class="pb-card">
        <div class="pb-card-cover">
          <svg viewBox="0 0 400 190" role="img" aria-label="A browser window driving a connected network of accounts"><defs><linearGradient id="pbg3" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#2b5a78"/><stop offset="1" stop-color="#1a3648"/></linearGradient></defs><rect width="400" height="190" fill="url(#pbg3)"/><g opacity=".13" stroke="#fff" stroke-width="1"><path d="M0 47.5h400M0 95h400M0 142.5h400M100 0v190M200 0v190M300 0v190"/></g><rect x="34" y="42" width="150" height="106" rx="12" fill="#fff"/><path d="M34 54a12 12 0 0112-12h126a12 12 0 0112 12v12H34z" fill="#E8EDF2"/><g fill="#B8C8D6"><circle cx="50" cy="54" r="4"/><circle cx="64" cy="54" r="4"/><circle cx="78" cy="54" r="4"/></g><g fill="#CBD8E3"><rect x="50" y="82" width="118" height="7" rx="3.5"/><rect x="50" y="98" width="92" height="7" rx="3.5"/></g><rect x="50" y="118" width="58" height="16" rx="8" fill="#FA454D"/><path d="M192 95h34" stroke="#FA454D" stroke-width="2" fill="none" stroke-dasharray="6 5"/><g stroke="#8FB4CC" stroke-width="1.5" fill="none"><path d="M300 95l-42-38M300 95l-42 38M300 95l52-30M300 95l52 30M300 95h-42"/></g><g fill="#8FB4CC"><circle cx="258" cy="57" r="9"/><circle cx="258" cy="133" r="9"/><circle cx="352" cy="65" r="9"/><circle cx="352" cy="125" r="9"/><circle cx="258" cy="95" r="9"/></g><circle cx="300" cy="95" r="16" fill="#FA454D"/><g fill="#fff"><rect x="294" y="88" width="4" height="14" rx="2"/><rect x="302" y="88" width="4" height="14" rx="2"/></g></svg>
        </div>
        <div class="pb-card-main">
          <div class="pb-card-kicker">Experimental study</div>
          <h3>Build Your Own LinkedIn Automation Agent</h3>
          <p class="pb-card-sub">A browser you log into yourself, a coding agent that drives it, and no per-seat licence.</p>
          <ul class="pb-card-list">
            <li><strong>See the system from the inside.</strong> You also see where this class of tool turns fragile.</li>
            <li><strong>Know what it really costs</strong>, priced next to products selling the same capability.</li>
            <li><strong>Buy better, if you buy.</strong> The questions that separate a vendor from a wrapper.</li>
          </ul>
          <p class="pb-warn"><strong>Terms notice:</strong> automating LinkedIn breaches section 8.2 of its User Agreement. Experimental study.</p>
          <div class="pb-card-foot">
            <a class="pb-btn pb-btn-primary" href="https://app.eduardklein.com/products/linkedin-automation">Open the playbook →</a>
            <span class="pb-card-meta">3 documents · Free</span>
          </div>
        </div>
      </article>
    </div>
  </div>
</section>

<section class="pb-section" id="how">
  <div class="pb-inner">
    <div class="pb-eyebrow">What is inside every playbook</div>
    <h2 class="pb-h2">Three documents, three readers.</h2>
    <p class="pb-lead">A document that serves two readers serves neither. You read the first one end to end, and hand the third one to Claude Code or Codex.</p>
    <div class="pb-docs">
      <article class="pb-doc">
        <div class="pb-doc-num">01</div>
        <h3>The Playbook</h3>
        <div class="pb-doc-reader">for the founder or owner</div>
        <p>What to build, in what order, and what it costs. No code, no schemas, no shell commands.</p>
      </article>
      <article class="pb-doc">
        <div class="pb-doc-num">02</div>
        <h3>The Blueprint</h3>
        <div class="pb-doc-reader">for you, or the developer you hand it to</div>
        <p>Architecture, data model, the configuration that matters, and the checks that prove the controls hold.</p>
      </article>
      <article class="pb-doc">
        <div class="pb-doc-num">03</div>
        <h3>The Extended Blueprint</h3>
        <div class="pb-doc-reader">for your coding agent</div>
        <p>Executable instructions, session by session, with the acceptance criteria each step has to meet.</p>
      </article>
    </div>
  </div>
</section>

<section class="pb-section pb-section-alt" id="honesty">
  <div class="pb-inner">
    <div class="pb-eyebrow">Before you start</div>
    <h2 class="pb-h2">Chapter 0 is a reality check, and it is not decorative.</h2>
    <p class="pb-lead">Every playbook opens by telling you plainly who should not attempt this alone. That gate is the reason you can trust the other forty pages.</p>
    <div class="pb-facts">
      <div class="pb-fact">
        <h3>Who it is for</h3>
        <p>Founders and owners who would rather own this than rent it. Your coding agent does the typing, but you do need to understand what you are looking at.</p>
      </div>
      <div class="pb-fact">
        <h3>What it is not</h3>
        <p>It is not autopilot. There is a human in every loop that touches a person. An agent that closes deals while you sleep is selling you the part that was never the bottleneck.</p>
      </div>
    </div>
  </div>
</section>

<section class="pb-section pb-cta">
  <div class="pb-inner">
    <div class="pb-eyebrow">Start reading</div>
    <h2 class="pb-h2">Free to read. One sign-in.</h2>
    <p class="pb-lead">The playbooks live in the app so the diagrams stay interactive and updates reach you without a re-download. If you would rather not build it yourself, the request form for a paid build sits inside every playbook.</p>
    <div class="pb-hero-actions">
      <a class="pb-btn pb-btn-primary" href="https://app.eduardklein.com/dashboard/all-products">Open the app →</a>
    </div>
  </div>
</section>

<script type="module">
// Progressive enhancement only. The deck's entrance, resting layout and hover
// fan are all CSS — if this module never loads, nothing is missing.
import { animate } from 'https://cdn.jsdelivr.net/npm/motion@11/+esm';

const deck = document.querySelector('[data-pb-deck]');
const stage = deck && deck.closest('.pb-hero-card');
const fine = window.matchMedia('(hover: hover) and (pointer: fine)');
const wide = window.matchMedia('(min-width: 901px)');
const still = window.matchMedia('(prefers-reduced-motion: reduce)');

if (deck && stage && fine.matches && wide.matches && !still.matches) {
  const spring = { type: 'spring', stiffness: 190, damping: 24, mass: .9 };

  stage.addEventListener('pointermove', (e) => {
    const r = stage.getBoundingClientRect();
    const px = (e.clientX - r.left) / r.width - .5;
    const py = (e.clientY - r.top) / r.height - .5;
    animate(deck, { rotateY: px * 11, rotateX: -py * 9 }, spring);
  });

  stage.addEventListener('pointerleave', () => {
    animate(deck, { rotateY: 0, rotateX: 0 }, spring);
  });
}
</script>
