Claude Writes, Jev Decides: LinkedIn Marketing Stack
Stand up TypeSafe Jev + Claude Code for LinkedIn radar, lead scoring, content gates, and reply-desk triage. Claude writes, Jev decides, humans approve.
- Time needed
- 2–4 hours
- Steps
- 8
- Level
- Intermediate
What you will have live
By the end of this playbook you will have:
- A TypeSafe / Jev API key and a verified smoke call (
noul/choice/score) - The official TypeSafe skill installed in Claude Code so Claude writes glue code while Jev returns typed decisions
- An editable ICP decision contract (questions + thresholds) you can version in a repo or Sheet
- A LinkedIn radar that scores niche posts / profiles fetched from exports or documentable third-party connectors, not a native LinkedIn “magic API”
- A lead scoring lane that writes Hot / Warm / Cold rows to Google Sheets (or your CRM staging sheet)
- A content engine: Claude drafts posts/comments; Jev gates quality/fit; you approve before anything ships
- A reply desk for hot DMs/comments: Jev triages urgency + intent; Claude drafts; humans send
- Cost math against official Jev pricing so you know what “cheap decisions” actually means
Prerequisites
- TypeSafe account: early access at typesafe.ai; create an API key in the dashboard and store it as
TYPESAFE_API_KEY(password manager, not chat history). - Claude Code installed and logged in (Anthropic account / Claude subscription that supports Claude Code on your machine).
- Python 3.10+ or Node 18+ for the official SDK path (
typesafe-sdkor@typesafe-ai/sdk), optional if you only use cURL at first. - A Google Sheet (or CSV) you own for radar + scoring rows: columns you control:
source_url,snippet,author,company,raw_state,tier,confidence,notes. - A legal data path for LinkedIn-ish inputs: LinkedIn CSV export, Sales Navigator export your policy allows, and/or a documentable connector your counsel accepts (common patterns: Apify actors, Periodix Actions, HeyReach webhooks). Do not paste stolen session cookies into random scripts.
- Optional orchestration: n8n (self-host or Cloud) for schedules + Slack approval cards, see n8n HITL gates once the decision contract works by hand.
How the stack actually works
Fetch state elsewhere → Jev (typed decide) → Claude (write/research) → Human approve → Send via approved tool
| Layer | Job | Not its job |
|---|---|---|
| Fetch (Sheets / export / Apify / Periodix / HeyReach webhook) | Supply profile text, post text, ICP fields | Judging fit |
Jev (POST /v1/systemone) |
noul / choice / score with probabilities |
Writing copy, browsing, sending |
| Claude (Claude Code + TypeSafe skill) | Glue code, research summaries, draft posts/replies | Final “yes ship this DM” |
| Human / HITL | Approve high-consequence sends | Rubber-stamping paraphrases |
| Send (HeyReach, native LinkedIn UI, CRM task) | Actually deliver | Inventing the ICP |
Third-party operators publish LinkedIn “radar” tutorials built this way. Treat those as industry anecdotes, not TypeSafe case studies and not Octacer performance claims.
Step 1: Get TypeSafe access and prove Jev answers
- Sign in at typesafe.ai → open the dashboard → create an API key.
- Export it in your shell (or Claude Code env):
export TYPESAFE_API_KEY="ts_..." # never commit this
- Run the official smoke shape (docs: Quick start):
curl -sS -X POST https://api.typesafe.ai/v1/systemone \
-H "Authorization: Bearer $TYPESAFE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"state": "VP Sales at a 80-person B2B SaaS. Posted: looking for a lightweight approval layer before AI agents write to HubSpot.",
"model": "jev-latest",
"questions": {
"icp_fit": {
"type": "noul",
"instructions": "Is this person a plausible buyer for governed AI ops / HITL automation in mid-market B2B?"
},
"lane": {
"type": "choice",
"instructions": "Which outreach lane fits best?",
"criteria": {
"radar_engage": "Public post worth a thoughtful comment",
"outbound_dm": "Direct outreach candidate",
"nurture": "Interesting but not now",
"skip": "Wrong ICP or noise"
}
},
"priority": {
"type": "score",
"instructions": "How hot is this lead for a discovery call this month?",
"criteria": ["Cold", "Warm", "Hot"]
}
}
}'
- Confirm the JSON returns
answers.icp_fit.noul,answers.lane.choice, andanswers.priority.scoreplususage.input_tokens. - Optional SDK installs:
pip install typesafe-sdk
# or
npm install @typesafe-ai/sdk
Step 2: Install the Claude Code skill (Claude writes, Jev decides)
Jev is not a Claude chat model swap. The verified Claude path is TypeSafe’s agent skill/plugin, which teaches Claude Code how to compose System One calls.
claude plugin marketplace add typesafe-ai/skills
claude plugin install typesafe@typesafe-ai
Alternative (Codex / other agents via skills.sh):
npx skills add typesafe-ai/skills --skill typesafe-ai
Then in Claude Code:
- Restart or
/reload-pluginsif needed. - Invoke
/typesafe:typesafe-aior say “use the TypeSafe skill.” - Prompt something like:
Use the TypeSafe skill. Build a small Python CLI that reads rows from a CSV
(state text + url), calls Jev with my ICP questions (noul + choice + score),
and writes tier/confidence/token usage to an output CSV. Pin model jev-1.13.0.
Do not send LinkedIn messages. Ask me for the exact ICP criteria before coding.
Step 3: Write your ICP decision contract (version it)
Create icp-questions.json (or a Sheet tab) you can diff in Git. Example for Octacer-shaped B2B automation buyers: edit hard for your niche:
{
"icp_fit": {
"type": "noul",
"instructions": "Buyer-side ops/RevOps/IT leader at B2B software or services, 20–500 staff, who cares about approvals before AI writes to CRM/ERP."
},
"persona": {
"type": "choice",
"instructions": "Best-fit persona",
"criteria": {
"revops": "Revenue ops / CRM owner",
"it_ops": "IT / platform / automation owner",
"founder": "Founder/CEO still in the weeds",
"other": "Not a fit or unclear"
}
},
"intent": {
"type": "score",
"instructions": "Strength of buying/intent signal in the supplied text",
"criteria": ["No intent", "Soft curiosity", "Active evaluation"]
}
}
Calibration drill (do this before bulk runs):
- Label 30–50 real rows yourself (Hot / Warm / Cold or Skip).
- Score them with Jev; log
choice, probabilities,confidence, and input tokens. - Set thresholds in code (e.g. Hot only if
icp_fit.noul >= 0.75andintent.score >= 1.5and confidence above your floor). - Fail closed on low confidence →
needs_humanqueue.
Step 4: Stage 1 live: LinkedIn Radar (niche posts)
Goal: every morning, a short list of posts worth engaging: scored, not doom-scrolled.
- Ingest into Sheets (pick one documentable path):
- Manual: paste post URL + copied text into
raw_state. - Export: LinkedIn / Sales Nav CSV your account is allowed to download → Claude Code normalizes columns.
- Connector: n8n + Apify LinkedIn/profile actors, or Periodix Actions (LinkedIn post search patterns exist as n8n templates), writing authors + post text into the same Sheet.
- For each new row, build
stateas plain text: headline, company, post body, your niche keyword, date (date logic stays in code). - Call Jev with questions such as:
worth_comment(noul),angle(choice: product story / founder lesson / hiring / noise),priority(score). - Code routes:
worth_comment >= threshold→ Radar Hot tab; else Cold/Archive. - Claude (batch or per-row) drafts one thoughtful comment for Hot rows only, still not posted.
- You approve in Sheet checkbox or Slack HITL; then you (or an approved outreach tool) post manually.
Step 5: Stage 2 live: Lead scoring lane
Goal: connection requests, CSV dumps, and event attendees become tiered queues.
- Put profile blobs in
raw_state(About + experience + recent post titles is enough; strip emails you do not need). - Reuse the ICP contract; add a
outbound_readynoul: “Is a short, non-spammy connection note justified this week?” - Write results to columns:
tier(Hot/Warm/Cold/Skip),persona,intent_score,confidence,input_tokens,model. - Only Hot (+ maybe Warm) go to Claude for a personalized note draft stored in
draft_note. - Human approves; send via native LinkedIn UI or a tool you already pay for (e.g. HeyReach campaign add via n8n: HeyReach documents an n8n key + nodes). Jev never sends.
Worked token math (official price $0.042 / 1M input tokens, output free):
| Volume | Assumed input tokens / decision | Jev $ |
|---|---|---|
| 1,000 leads | 800 | ≈ $0.03 |
| 10,000 leads | 800 | ≈ $0.34 |
| 40,000 decisions / month | 800 | ≈ $1.34 |
Step 6: Stage 3 live: Content engine
Goal: a week of niche posts without posting slop.
- Collect inputs in a
content_inboxSheet: customer quotes, release notes, war stories, competitor public moves (facts you can defend). - Claude drafts 3–5 post variants (hook + body + CTA) into
drafts. - Jev scores each draft with a caller-defined rubric, for example:
on_brand(noul)format(choice: story / how-to / opinion / soft CTA)ship_readiness(score: Needs work / Almost / Ship)
- Auto-reject drafts below threshold; Claude revises losers once; winners enter
#content-approvals. - Human picks the final; schedule in your usual publisher (native LinkedIn, Buffer, etc.).
Do not ask Jev to “write a LinkedIn post.” Ask it to judge drafts Claude already wrote.
Step 7: Stage 4 live: Reply desk / hot DMs
Goal: never leave money (or landmines) sitting in Unibox.
- Ingest inbound comments/DMs via export, HeyReach Unibox/webhook (documented with n8n), or manual paste into
inbox_raw. - One Jev call per message:
needs_human_now(noul): legal, pricing commitment, angry customerintent(choice: buy / partner / spam / support / unclear)tone_risk(score: Safe / Careful / Escalation)
- Code routing:
- Escalation or
needs_human_nowhigh → Slack@ownerimmediately, no auto-draft send - buy/partner mid confidence → Claude drafts reply → HITL approve → human sends
- spam → archive
- Log every decision with model version + tokens for audit.
Step 8: Optional: wire Sheets + n8n so it runs while you sleep
Once Steps 1–7 work manually:
- Schedule an n8n workflow: cron → read Sheet rows with
status=new→ HTTP Request tohttps://api.typesafe.ai/v1/systemonewithTYPESAFE_API_KEY→ Code node applies thresholds → update Sheet + Slack message. - Put Human review in front of any node that adds leads to a HeyReach campaign or posts externally (HITL playbook).
- Keep Claude drafting in a second lane (Claude Code batch job or n8n Anthropic node) after Jev says the row is worth it, saves writer tokens.
Go-live checklist
- [ ] Smoke cURL returns typed
answers+usage.input_tokens - [ ]
TYPESAFE_API_KEYonly in env/secret store - [ ] Claude Code TypeSafe skill installed; agent can generate a correct System One call
- [ ] ICP questions checked into Git; 30+ labeled rows used to set thresholds
- [ ] Model pinned (
jev-1.13.0) after calibration - [ ] Radar Hot tab reviews clean for one week of niche keywords
- [ ] Lead scoring writes tiers without sending messages
- [ ] Content drafts gated by Jev rubric before publish
- [ ] Reply desk escalations hit a human; no auto-send on low confidence
- [ ] Token usage logged; monthly Jev $ matches the math above (plus separate Claude/connector bills)
- [ ] Legal/privacy review done for LinkedIn data path and TypeSafe processing terms
Pitfalls
- Treating Jev like Claude: it will not browse LinkedIn or write essays; it answers your schema.
- “Zero hallucination” marketing: schema is bounded; judgments can still be wrong. Validate locally.
- Cookie scrapers as the default: prefer exports and vendors whose docs you can show counsel; respect LinkedIn terms.
- Thresholds without labels: you will over-message or starve the pipeline.
- Stuffing huge states: burns tokens and hits the 32k state/question guidance; summarize in code first.
- Auto-approve outreach: breaks the whole point of a decision stack.
- Claiming vanity metrics you did not earn: keep Octacer copy about the system, not third-party impression screenshots.
FAQ
Is this a native LinkedIn + Claude product from TypeSafe?
No. Official pieces are Jev (System One API), SDKs, and the Claude Code skill. LinkedIn data and send paths are third-party or manual.
Can I call Jev from Vercel AI SDK?
Vercel documents typesafe-ai/jev via AI Gateway / experimental_evaluate as an evaluation-model path, useful in apps, still not a LinkedIn integration.
What about free credits?
Promotional credits are account-specific; do not plan production budgets on unverified “$5 free” rumors. Use dashboard balance + the $0.042/1M math.
Where do Make.com or chatbots fit?
If your team already lives in Make, use it as the scheduler/Sheet glue the same way as n8n. For customer-facing FAQ bots, keep a separate governed chatbot lane, see related playbooks below.
Next step
Add hard gates on anything that writes or sends: n8n Human-in-the-Loop Tool Gates. For broader ops agents on your own metal: Self-Host n8n AI Ops Agent. For Sheets/CRM tool wiring into Claude: Business MCP Starter Pack.
Build a Governed Radar
Need a RevOps approvals matrix or a custom radar for a regulated niche? See Solutions, Architecture, or contact Octacer.
Keep going
More playbooks
Want it running on your stack?
We implement this playbook for clients, tailored to your stack, your data, and your team's workflow, and handed over documented.