← Vault Index
Source: frameworks/kit-master-plan/05-master-plan-output-skill.md

Client Master Plan — Output Skill

What this produces: A fully styled, single-file HTML Client Master Plan. This is a living document — it grows with each session. Dark theme, Advisory OS branded (not client-branded).

Output filename: client-master-plan-[client-first-name]-[client-last-name].html (no date — living document)

Required inputs: Client profile data, session transcripts, constraint briefs, previous master plan (if updating).

Reference file: aos-brand-kit.html — consult for exact hex values, CSS variables, and typography specs.


Document Identity

The master plan is the advisor's strategic command center for a client engagement. It is NOT client-facing. It tracks everything: GPS, constraints, themes, quotes, wins, actions, conversations, seeds planted, and recommendations. It grows over time and becomes the single source of truth for the relationship.


How to Use This Skill

Copy the HTML template below. Replace all {{PLACEHOLDER}} content with actual client data. Do not modify the CSS, class names, or HTML structure. Add or remove repeating blocks (constraints, quotes, actions, conversations, modals) as needed.


Section Order

  1. Header — Brand mark, "Client Master Plan" title, navigation buttons
  2. Client Header — Name, firm, team size, relationship start, last updated date
  3. GPS — Trajectory summary + Position/Direction/Speed grid + history toggle
  4. Weekly Rhythm — Meeting cadence and recurring touchpoints (add when established)
  5. Recurring Themes — Evidence-backed patterns with source tags
  6. Card Grid:
  1. Modals — Full conversation recaps (one per session)
  2. Footer — Document title + last updated date

Update Rules

After every session, update in this order:

  1. Conversation Recap (always) — add entry + modal
  2. Action Items (always) — check off completed, add new
  3. GPS (if changed) — push current to history, update current
  4. Constraint Statuses (if changed) — update badges and detail text
  5. Wins (if any) — add new wins
  6. Recommendations (if changed) — update statuses
  7. History (always) — add one-line entry with date

What NOT to update:


GPS Change Markers

Each GPS field gets a marker on update:


Constraint Status Progression

OpenIn ProgressActive SolveDesignedDeployedSolved

Solved constraints move to the solved section with green left border, strikethrough text, and date.


Constraint Pattern Tags

EmojiTermMeaning
🔁RecurringHappens repeatedly on a cycle
📈EscalatingGets worse each cycle you don't solve it
📦Same Root CauseMultiple constraints from one missing system
↔️Solve TogetherTwo constraints amplify each other, solve in one project
⬆️UpstreamRoot cause level
⬇️DownstreamSymptom level, resolves when upstream is solved

Recommendation Statuses

SuggestedAcceptedIn ProgressDesignedImplemented


Seed Statuses

Seed (planted) → PresentedInterestedActive (agreed/signed)


Content Rules

  1. GPS Trajectory — 3–5 sentences. What's happening, what just happened, what's coming. No jargon.
  2. Themes need evidence. Source tags showing where the pattern was observed.
  3. Quotes stay close to what was said. Clean up filler and garble, never fabricate.
  4. Action items get owner badges. Advisor (gold) or Client (blue). Group by session date.
  5. Conversation recaps document what happened, not what was planned. If the conversation went off-script, document where it went.
  6. Wins are evidence of progress. Operational wins, relationship wins, team wins.
  7. Seeds Planted tracks future revenue. Each seed has a status and a "Next" action.

Repeating Block Templates

Constraint Card

<div class="constraint-item" style="border-left: 3px solid {{TIER_COLOR}};">
    <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.4rem;">
        <div class="constraint-type" style="margin-bottom: 0;">{{TYPE_EMOJI}} {{TYPE}} · {{CATEGORY}} · {{TIER}}</div>
        <span style="font-size: 0.6rem; text-transform: uppercase; letter-spacing: 0.05em; padding: 0.15rem 0.4rem; background: var(--slate); color: var(--cream);">{{STATUS}}</span>
    </div>
    <div class="constraint-text">{{ID}} — {{CONSTRAINT NAME}}</div>
    <div class="constraint-detail">{{DETAIL TEXT}}</div>
    <div style="display: flex; gap: 0.5rem; margin-top: 0.5rem;">
        <!-- Add pattern tags as needed -->
        <span style="font-size: 0.6rem; padding: 0.15rem 0.4rem; background: var(--warning); color: var(--charcoal);">🔁 Recurring</span>
    </div>
</div>

Tier colors:

Solved Constraint

<div class="solved-item">
    <div class="constraint-text">{{CONSTRAINT NAME}}</div>
    <div class="solved-detail">Solved: {{SOLUTION}} · {{DATE}} · {{STATUS NOTE}}</div>
</div>

Solve Together Marker

<span class="solve-together-marker">↔️ Solve Together with {{OTHER_ID}}</span>

Theme Item

<div class="theme-item" style="border-left: 3px solid {{COLOR}};">
    <div class="theme-name" style="display: flex; align-items: center; gap: 0.75rem;">{{THEME NAME}} <span style="font-size: 0.6rem; text-transform: uppercase; letter-spacing: 0.05em; padding: 0.15rem 0.4rem; background: {{BADGE_BG}}; color: {{BADGE_TEXT}};">{{BADGE}}</span></div>
    <div class="theme-evidence">{{EVIDENCE TEXT}}</div>
    <div class="theme-sources">
        <span class="theme-source">{{SOURCE 1}}</span>
        <span class="theme-source">{{SOURCE 2}}</span>
    </div>
</div>

Theme border colors:

Recommendation Item

<div class="recommendation-item">
    <div class="recommendation-text">{{RECOMMENDATION}}</div>
    <div class="recommendation-linked">Linked: {{CONSTRAINT IDS}} · {{CONTEXT}}</div>
    <span class="recommendation-status {{STATUS_CLASS}}">{{STATUS}}</span>
</div>

Status classes: open, presented, accepted, implemented

Seed Item

<div class="offer-item">
    <div class="offer-top">
        <div class="offer-info">
            <div class="offer-name">{{OFFER NAME}}</div>
            <div class="offer-note">{{DESCRIPTION}}</div>
        </div>
        <span class="offer-status {{STATUS_CLASS}}">{{STATUS}}</span>
    </div>
    <div class="offer-next"><strong>Next:</strong> {{NEXT ACTION}}</div>
</div>

Status classes: planted, presented, interested, active, agreed

Quote Item

<div class="quote-item">
    "{{QUOTE TEXT}}"
    <div class="quote-context">{{CONTEXT}} — {{DATE}}</div>
</div>

Win Item

<div class="win-item">
    <div class="win-title">{{WIN TITLE}}</div>
    <div class="win-detail">{{WHY IT MATTERS}}</div>
    <div class="win-date">{{DATE}}</div>
</div>

Action Item

<div class="action-item">
    <input type="checkbox" class="action-checkbox">
    <div class="action-content">
        <div class="action-task">{{TASK}}</div>
        <div class="action-meta"><span class="action-owner {{OWNER_CLASS}}">{{OWNER}}</span> <span>Source: {{DATE}}</span></div>
    </div>
</div>

Owner classes: advisor (gold), client (blue) Completed: Add checked to checkbox, add ✓ {{COMPLETION NOTE}} to meta.

Conversation Item + Modal

<!-- In conversation list -->
<div class="conversation-item" onclick="openModal('modal-{{ID}}')">
    <div class="conversation-header">
        <span class="conversation-date">{{DATE}}</span>
        <span class="conversation-type">{{TYPE}}</span>
    </div>
    <div class="conversation-summary">{{3-5 SENTENCE SUMMARY}}</div>
    <div class="conversation-outcomes"><strong>Outcomes:</strong> {{BULLET-STYLE OUTCOMES}}</div>
    <div class="conversation-expand">View Full Recap →</div>
</div>

<!-- Modal (place after footer) -->
<div class="modal-overlay" id="modal-{{ID}}" onclick="if(event.target===this)closeModal('modal-{{ID}}')">
    <div class="modal">
        <h3>{{DATE}} — {{TYPE}}</h3>
        <div class="recap-section">
            <div class="recap-section-title">Full Recap</div>
            <div class="recap-content">{{DETAILED NARRATIVE}}</div>
        </div>
        <div class="recap-outcomes">
            <div class="recap-outcomes-title">Key Outcomes</div>
            <div class="recap-content">{{OUTCOMES}}</div>
        </div>
        <button class="modal-close" onclick="closeModal('modal-{{ID}}')">Close</button>
    </div>
</div>

Full HTML Template

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Client Master Plan - {{CLIENT NAME}}</title>
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;1,400;1,500&family=Inter:wght@300;400;500;600&display=swap" rel="stylesheet">
    <style>
        :root {
            --gold: #b79d64;
            --gold-dim: rgba(183, 157, 100, 0.3);
            --charcoal: #1a1a1a;
            --deep-charcoal: #2a2a2a;
            --panel: #232323;
            --cream: #f5f4f0;
            --stone: #8a8680;
            --slate: #4a5a6a;
            --success: #4a7c6f;
            --warning: #a08347;
            --danger: #8b4049;
            --muted: #3a3a3a;
            --owner-advisor: #b79d64;
            --owner-client: #5a8a9a;
            --owner-team: #8a6a9a;
            /* Backward compatibility */
            --owner-mine: var(--owner-advisor);
        }
        * { margin: 0; padding: 0; box-sizing: border-box; }
        body { font-family: 'Inter', -apple-system, sans-serif; background: var(--charcoal); color: var(--cream); line-height: 1.6; min-height: 100vh; }
        ::-webkit-scrollbar { width: 8px; }
        ::-webkit-scrollbar-track { background: var(--charcoal); }
        ::-webkit-scrollbar-thumb { background: var(--gold-dim); border-radius: 4px; }
        ::-webkit-scrollbar-thumb:hover { background: var(--gold); }
        scrollbar-color: var(--gold-dim) var(--charcoal);
        h1, h2, h3, h4 { font-family: 'Cormorant Garamond', serif; font-weight: 400; color: var(--cream); }

        header { background: linear-gradient(180deg, var(--deep-charcoal) 0%, var(--charcoal) 100%); border-bottom: 1px solid var(--gold-dim); padding: 1.5rem 3rem; display: flex; justify-content: space-between; align-items: center; }
        .brand { display: flex; align-items: center; gap: 1rem; }
        .brand-mark { width: 32px; height: 32px; background: var(--gold); display: flex; align-items: center; justify-content: center; font-family: 'Cormorant Garamond', serif; font-size: 1.25rem; font-weight: 600; color: var(--charcoal); }
        .brand-text { font-family: 'Cormorant Garamond', serif; font-size: 1.25rem; color: var(--cream); letter-spacing: 0.02em; }
        .brand-text span { color: var(--gold); }
        .header-actions { display: flex; gap: 1rem; }
        .btn { font-family: 'Inter', sans-serif; font-size: 0.75rem; font-weight: 500; letter-spacing: 0.05em; text-transform: uppercase; padding: 0.75rem 1.25rem; border: none; cursor: pointer; transition: all 0.2s ease; }
        .btn-primary { background: var(--gold); color: var(--charcoal); }
        .btn-primary:hover { background: var(--cream); }
        .btn-secondary { background: transparent; color: var(--stone); border: 1px solid var(--muted); }
        .btn-secondary:hover { border-color: var(--gold); color: var(--gold); }
        .edit-btn { background: none; border: none; color: var(--stone); cursor: pointer; font-size: 0.7rem; text-transform: uppercase; letter-spacing: 0.05em; }
        .edit-btn:hover { color: var(--gold); }

        main { max-width: 1400px; margin: 0 auto; padding: 2rem 3rem; }
        /* ... all remaining CSS identical to golden example ... */

        .action-owner { padding: 0.15rem 0.5rem; text-transform: uppercase; letter-spacing: 0.05em; font-weight: 500; }
        .action-owner.advisor { background: var(--owner-advisor); color: var(--charcoal); }
        .action-owner.mine { background: var(--owner-advisor); color: var(--charcoal); } /* backward compat */
        .action-owner.client { background: var(--owner-client); color: var(--cream); }
        .action-legend { display: flex; gap: 1.5rem; margin-bottom: 1rem; padding: 0.75rem 1rem; background: var(--charcoal); border: 1px solid var(--muted); }
        .legend-item { display: flex; align-items: center; gap: 0.5rem; font-size: 0.7rem; color: var(--stone); }
        .legend-dot { width: 12px; height: 12px; border-radius: 2px; }
        .legend-dot.advisor { background: var(--owner-advisor); }
        .legend-dot.mine { background: var(--owner-advisor); } /* backward compat */
        .legend-dot.client { background: var(--owner-client); }
    </style>
</head>
<!-- Body structure identical to golden example -->
</html>

Note: The full template body is identical to the golden example (03-example-client-master-plan.html). Only the :root variables, owner classes, and scrollbar rules differ from the original. Copy the body from the golden example and apply these CSS changes.


Changes from v1.0

What changedOldNew
Ownership variable--owner-mine--owner-advisor (with --owner-mine alias)
Owner CSS class.mine only.advisor canonical, .mine backward compat
Legend label"Mine (Kathryn)""Advisor (Kathryn)"
Scrollbar hoverNot specified--gold-dim default, --gold on hover
Reference fileNot specifiedaos-brand-kit.html

Checklist Before Delivery


Skill file for Advisory OS Client Master Plan output · Updated February 16, 2026