Workflow your job! : This is Not Advice

Think about your job as a series of workflows.

Heads up, long one lol.

If you're in sales or revenue and you've been wondering how to actually use Claude Code (or Codex) for real work, this is the whole thing laid out.

I'm CRO at Dream. I run partnerships for Simon Squibb.

Every stage of my sales cycle is a workflow. Every workflow is a skill. The skills all read from the same shared brain (Obsidian vault + HubSpot + Gmail + Slack + Granola + WhatsApp + Perplexity) and write back to it.

THE FOUNDATION

Two systems doing the heavy lifting.

The Obsidian vault is one folder of markdown files. People/ has 141+ Person pages, one per human I've met. Deals/ has one file per active HubSpot deal. Meeting Notes/ has every recorded meeting. Strategic Priorities sits at the top as the lens.

Inside People/ four master files hold it together: Black Book Index (the directory), Open Loops Master (every pending commitment across every system with a source link back), HubSpot Deal Pipeline (the cross-referenced pipeline view), and my Writing Style Guide.

Claude Code is the worker. Three layers: skills (workflows I fire by name), scheduled tasks (cron jobs running Claude in headless mode, 20+ of them), and hooks (rails that fire on every tool call, including one that hard-blocks em dashes anywhere in any output, and one that runs my humanizer skill on every outbound email before it sends).

STAGE 1: COLD OUTBOUND

I fire /cold-outreach. It asks me three things. WHO (names, a category, or a spreadsheet). WHAT (I'm selling). WHERE (cities I'll be in, dates).

It looks every contact up in Apollo and verifies which city the person actually lives in, not the company HQ. Anyone outside the target cities gets cut. Then Perplexity on each remaining person to find one specific personalised line for the PS. Drafts a tight 5-line email using my fixed template (subject "Simon Squibb x [First Last]", standard intro, the pitch with a real number, a "no-brainer" line that sells TO them rather than telling them what's in it for me, a city ask, sign-off, PS under 12 words).

Drops every email into Gmail Drafts in batches of 8 in parallel. I review the batch and hit send.

STAGE 2: PRE-MEETING BRIEF

A scheduled task fires every 15 minutes on weekdays. Checks Google Calendar for any meeting starting in the next 20 minutes. If nothing, exits silent.

If there is one, it pulls the attendee's Black Book page, any Open Loops tied to that person, any active HubSpot deal they''re attached to. For new contacts with no Black Book page yet, a Perplexity research pass. For every external attendee, a second Perplexity pass on their company for notable news in the last 7 days. Recent Slack and Gmail mentions of them. Any agenda links in the calendar event.

Compiles it into a scannable brief and posts to my private #jonny-briefing Slack channel.

I open Slack 5 minutes before the call. I'm briefed.

STAGE 3: THE MEETING

I take the call. Granola records and auto-transcribes. The transcript and an AI summary land in my Obsidian vault automatically.

STAGE 4: THE GRANOLA SWEEP

A scheduled task runs every 30 minutes. Scans the Granola folder for new transcripts. For each new meeting:

Writes a clean Meeting Note in Obsidian with date, attendees, decisions, next steps, who owns what.

For every non-internal attendee, appends new context to their existing Black Book page (never overwrites) or creates a new page.

For every external attendee with a HubSpot ID, composes a meeting summary (topics, decisions, deal terms, next steps with owners) and pushes it as a note attached to that contact in HubSpot.

Appends any new commitments to the Open Loops Master with a backlink to the meeting note as the source.

STAGE 5: POST-MEETING FOLLOW-UP DRAFT

A separate scheduled task runs every 30 minutes. Looks for meetings that ended in the last 2 hours and applies 5 gates: 5 minutes of cool-down so Granola finalises, I actually spoke (at least 3 of my turns in the transcript), it was a real conversation (10+ total turns), an external attendee was on the call, partnership context (skips internal team meetings and recurring stand-ups).

If all 5 gates pass, it reads the transcript, extracts each side's commitments, and drafts a Gmail follow-up that opens by referencing a specific moment from the conversation so it doesn''t feel templated, lists what I''ll do with timelines, and what they''ll do with timelines.

Lands in Gmail Drafts. I review and send.

STAGE 6: THE MORNING BRIEFING (THE ENGINE)

Two scheduled tasks chain at the start of every day.

06:25am the HubSpot deal sync fires. Pulls every open deal. For each one, pulls every associated contact, then searches Gmail for the last 30 days of mail with those contacts. Runs regex patterns over the latest messages plus staleness metrics to infer stage signals at 3 confidence levels: HIGH (auto-applied: signed contract, payment received, explicit decline), MEDIUM (surfaced for my approval: offer received, contract sent), LOW (logged only).

If the latest message is inbound, asks a question, and is 2+ days old, it marks the deal as owing a reply and creates a HIGH-priority task in HubSpot. Each deal stage has its own staleness threshold (Contracting 7 days, Chasing Contract 5 days, In Negotiation 7 days, Make Proposal 14 days).

Writes a structured run report to disk.

07:57am the morning briefing fires. Pre-flight checks every MCP it needs (Slack, Gmail, Calendar). If any are broken, fires a phone push notification and stops. No silent failures.

Then a full sweep. Strategic Priorities first as the lens. Every meeting on my calendar today with attendee context from the Black Book. Full Slack sweep across every channel and DM I have access to for the last 24 hours. Full Gmail sweep of what I sent yesterday and what's unread. Reads the HubSpot sync report and pulls out who I owe replies to, stale deals, suggested stage changes, auto-applied changes. WhatsApp Work-list chats only. Three Perplexity news queries. London weather.

Then it updates the Black Book with anything new it learned overnight. Writes the briefing to a file in an outbox folder. A dispatcher process watches that folder and posts to #jonny-briefing within 60 seconds.

8am I open Slack. My whole world is laid out. Who I'm meeting today. Who I owe replies. What's stale. What's news. What changed in deal-land overnight.

STAGE 7: THE PROPOSAL (A WEBSITE, NOT A DECK)

We send password-gated websites deployed to Vercel or HubSpot.

The skill sees from my meeting note when I've promised to send a proposal and what asset I''m selling them. It auto-triggers the right proposal builder.

It resolves the brand. Pulls every piece of internal context in parallel: HubSpot deal, vault Deal page, any Person pages for known contacts at the brand, any Granola transcripts with the brand, the canonical brand layer (Dream source, Simon source, my voice profile, the proof library of closed-won deals).

Runs a Perplexity deep-dive in parallel: their full product line and pricing, sponsorships they've done recently, sponsorships their direct competitors have done, their VP of Marketing / Partnerships / CMO by name, brand colours from their press kit, top stated priorities from earnings calls, customer count.

Writes a Partner Brain file recording every fact found and every decision made (auditable).

Generates 3 distinct pitch angles, each using a different lever from the proof library. Scores each on fit-with-priorities, differentiation, and conversion likelihood. Picks the highest scorer automatically.

Picks the right sponsorship archetype for this brand. Writes a config file populating every section of the site for this specific buyer: hero, CTA, value lines, partner benefits with brand-specific integration angles, a predicted-value funnel with their actual pricing tiers baked into the model, an investment tier anchored to typical budget bands for brands like them.

Runs every prose field through a voice pass (cuts "leverage", "synergy", "robust", "ecosystem", "circle back", hedge words, "reach out") then a humanizer pass (cuts em dashes, rule-of-three, "delve", inflated symbolism, AI vocab).

Generates the brand assets. Logo pulled from Brandfetch (with 6 fallback sources). Then custom visual mockups in Higgsfield using OpenAI Image 2 to show the prospect exactly what the partnership would look like in the wild.

If we're proposing content filmed with their CEO, the skill uses Perplexity to pull the CEO's photo, then Higgsfield drops them straight into the exact shot we''d film. If we''re proposing an outdoor activation, it mocks up the brand''s logo on the actual wall. The skill swaps logo and brand colour into our master reference images while preserving everything else identically.

Runs every pre-flight gate (canonical numbers locked, zero em dashes anywhere, no other-partner commercials leaked, every image is a real image not a 1KB error page).

Builds and deploys. Assigns a permanent partner alias. Bakes in a password gate. Logs every decision it made to a learnings file so future runs sharpen.

I get one URL back. I send it.

STAGE 8: DURING THE DEAL

/contract-review when their paper lands. Extracts the contract into structured JSON. Loads my gold-standard reference contract and the clause checklist. For each section (payment, IP, liability, termination, governing law, editorial control for influencer contracts), classifies the incoming as PRESENT & STRONG, PRESENT BUT WEAK, MISSING, or PROBLEMATIC. Builds edit instructions. Each edit carries a comment explaining WHY, citing the gold standard or the business reason. Generates a DOCX with proper Word tracked-change markup. Stores everything under contracts/[brand-slug]/v1-original, v1-extracted, v1-edits, v1-redlined so the history is auditable.

When their lawyer fires back v2, it diffs against my v1 and tells me what they accepted, what they pushed back on, and what they introduced themselves. Then generates v2-redlined.

I upload the DOCX to Google Drive. Google Docs auto-converts the tracked changes into Suggestions.

STAGE 9: THE HANDOVER (NEXT BUILD)

This one isn't built yet but it's next. I drop the signed contract in. It reads every email and Obsidian note tied to the deal, builds out the Notion pages the execution team need to deliver, then loops them into a new execution email thread with the client. So I can hand it cleanly to the team that actually delivers the work and they have full context from day one.

STAGE 10: CASE STUDY (AND REPORTING)

Once the partnership is live, Apify scrapes the social media results (YouTube views, LinkedIn impressions, Instagram reach). Those numbers feed into the case study skill.

When the deal is closed-won, I run /case-study [deal]. Picks the shape (Content/Creator, Affiliate/Performance, Speaking, or Hybrid) based on the deal type. Pulls the closed deal from HubSpot, the Gmail thread history, the Granola transcripts, the Person page, and the Apify-scraped performance numbers.

Reads my brand canonicals (22M+ followers, 400M views/month) so the proof is anchored.

Builds a known/unknown table. Prompts me for what it can''t see: video URLs, view counts, engagement, CPM, testimonials, signups, CAC, dashboard screenshots. If I say "don''t have yet" it writes [v2: metric to be added when reported] rather than inventing.

Generates a one-page DOCX case study with embedded video links and a Visual Proof block. Lands internally first for approval, then goes to the client. Then saves it into the proof library, which is what the proposal skills pull from when they need social proof for the next pitch.

So every closed-won deal becomes evidence that gets reused.

HERE'S THE BIT NOBODY FOCUSES ON

The skills are the visible part. The context is what does the work.

Every customer-facing skill loads the same brand context on every fire: jonny-voice-profile.md (my actual writing voice), dream-inc-source.md (canonical org facts), simon-squibb-source.md (canonical Simon facts and numbers), proof-library.md (every closed-won deal indexed by lever, brand mix, and audience), simon-rate-card.md (canonical pricing).

Every scheduled task loads the same vault index: Strategic Priorities, Open Loops Master, HubSpot Pipeline doc, Black Book Index.

Every tool call goes through the hooks. The em dash hook hard-blocks U+2014 in any file write, any Bash command, any MCP tool input. The humanizer hook runs my humanizer skill on every outbound email or Slack message and rewrites the prose before the tool actually fires.

So when I trigger a skill I'm not asking AI to be creative. I'm asking it to render the right artefact from a context window that already knows more about the buyer, the brand, my pricing, my voice, and my goals than a new hire would on day one.

The smartest model in the world is no use if it doesn't know who you're talking to.

THE TAKEAWAY

Look at your own job. Find the workflows. The ones you do over and over. The ones with predictable inputs and outputs.

Each one is a skill. Build it once. Feed it your context properly. Let it run.

You're handing off the repeatable part so you can show up for the part that actually needs you in the room.

If you want a YouTube walkthrough of how to build it end-to-end, reply and I'll work on it.

Cheers
Jonny