一键导入
cold-triage
Pull unread inbox replies from FoxReach, surface interested ones, draft responses per cold.md
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Pull unread inbox replies from FoxReach, surface interested ones, draft responses per cold.md
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Run per-lead web research on a candidates CSV, write one bundle.md per lead, and emit assignments.json splitting leads into A/B arms for experiments. Uses parallel sub-agents for batches of 10. Spawned by cold-experiment when the experiment design has personalization as the variable, or by the user saying "research these leads", "personalize this list", "build per-lead bundles".
Import a CSV of leads, score each against icp.md, drop misaligned ones, optionally enrich with per-lead web research, then push the survivors into FoxReach as a campaign. Replaces the v0 stub. Use when the user says "import leads", "score these prospects", "filter to my ICP", "build a campaign from this CSV".
Read the active experiment's results from FoxReach, run the statistical test, and propose a cold.md diff (or auto-commit if trust earned). Computes interested-reply rate per variant via foxreach inbox categorize-stats, applies a two-proportion z-test, checks guards (bounce rate, not-interested rate), and either writes .cold/proposed-diff.patch or applies it directly. Use 7+ days after /cold send when an experiment is active. Updates beliefs.md and decisions.md. Use when the user says "read the experiment", "/cold learn", "what did we learn", or "is the test done yet".
Push the active campaign to FoxReach — creates sequences, registers variants from cold-draft output, runs pre-flight checks (banned-phrase lint, audience check, plan-limit math, bounce-rate guard), and starts the campaign. Use after /cold leads + /cold draft. Replaces v0 stub.
Generate a digest of cold outreach performance - deliverability, replies, booked calls, domain health. Use when the user asks for a report, digest, summary, weekly recap, performance check, or asks "how did my campaigns do". Reads live metrics from the FoxReach API. Designed to be called by cron (daily or weekly) and post results to Slack or email. Part of the cold.md suite.
Print the current state of the autoresearch loop — what we've learned, what's being tested, what's pending review, what's next. Reads everything in .cold/ and outputs a one-screen dashboard. Use anytime to orient. No FoxReach calls — purely local read.
| name | cold-triage |
| description | Pull unread inbox replies from FoxReach, surface interested ones, draft responses per cold.md |
Step 5 of the cold.md autoresearch suite — keeps the inbox sorted and drafts responses to interested replies.
0 9 * * * (9am local)cold.md — for ## Objections (drafted-response patterns) and ## Voice.cold/last-send.json — current campaign id.cold/config.json — research settings (we may need to pull lead enrichment)FOXREACH_API_KEYfoxreach inbox list --filter unread --json > /tmp/unread.json
COUNT=$(jq 'length' /tmp/unread.json)
[ "$COUNT" = "0" ] && { echo "No unread replies. ✓"; exit 0; }
FoxReach already auto-categorizes incoming replies (it has its own AI step). Each thread has a .category of: interested | not_interested | out_of_office | bounce | uncategorized | unknown | warmup.
We trust FoxReach's categorization for routine actions; we re-categorize uncategorized ones with our own pass.
| Category | Action |
|---|---|
interested | Surface to user with a drafted response |
not_interested | Mark read, move on |
out_of_office | Snooze for OOO-end-date if parseable, else mark read |
bounce | Already handled by FoxReach's bounce engine — mark read, no action |
uncategorized | Re-categorize via Claude using cold.md ## Objections patterns |
unknown | Surface to user — needs human eyes |
warmup | Skip entirely (warmup traffic) |
For each interested thread:
foxreach inbox conversation <reply_id> --jsoncold.md ## Objections for the response patterns.cold/research/lead-personalization/<email-hash>.mdcold.md ## Voice rules (banned phrases, voice dos/don'ts).cold/drafts/replies/<reply_id>.md:---
replyId: rpl_abc123
leadEmail: jane@acme.io
category: interested
draftedAt: 2026-04-29T...
---
# Suggested response to <jane>
> Their reply: "Yeah send the deck, what's the price band?"
## Drafted response
Hi Jane,
Deck attached. Pricing depends on volume — we typically run $X-$Y/mo
for <vertical>. Quick call to see if there's a fit?
[calendar link]
— Usama
## Why this response
- Objection pattern: "asking for pricing" → answer with band, ask for call
- Voice: short, direct, no em dashes
- Banned check: passes
For each thread with category: uncategorized, run Claude:
Given this cold.md ## Objections section:
<objections>
And this incoming reply:
<reply body>
Output strictly:
{ "category": "interested|not_interested|out_of_office|unknown",
"reason": "<one sentence>" }
Update FoxReach:
foxreach inbox update <reply_id> --json '{"category": "<new>"}'
For not_interested, out_of_office, bounce (after surfacing to user if any new ones):
foxreach inbox bulk-update --json '{"ids": [...], "isRead": true}'
Triage complete (4 unread → 0):
✓ Interested: 2 — drafts in .cold/drafts/replies/
✓ Not interested: 1 — marked read
✓ OOO: 0
✓ Bounce: 0
✓ Re-categorized: 1 (was uncategorized → interested)
Review interested replies:
cat .cold/drafts/replies/rpl_*.md
Send a drafted response:
foxreach inbox reply <reply_id> --body @./draft.md
Or skip and reply manually in the FoxReach inbox UI.
Same CLI → curl → docs pattern.
curl -H "X-API-Key: $FOXREACH_API_KEY" "https://api.foxreach.io/api/v1/inbox/threads?category=uncategorized"WebFetch https://docs.foxreach.io/api-reference/inbox/list-threadsbounce replies — FoxReach's bounce engine handles them.cold.md ## Banned in drafted responses..cold/decisions.md for the user to review..cold/drafts/replies/<reply_id>.md (drafted responses to interested replies)