Technical Analyst
tradermonty/claude-trading-skills
This skill should be used when analyzing weekly price charts for stocks, stock indices, cryptocurrencies, or forex pairs.
Agent skill
by growthenginenowoslawski in growthenginenowoslawski/coldoutboundskills
Produces a copy-ready clause about a company adding people to one specific department in the last 6 months, plus the department-level headcount counts that drive the segment gate.
$ npx skills add growthenginenowoslawski/coldoutboundskills --skill playbook-hiring-surge -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install growthenginenowoslawski/coldoutboundskills playbook-hiring-surge --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/growthenginenowoslawski/coldoutboundskills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/playbooks/playbook-hiring-surge .claude/skills/playbook-hiring-surge && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "playbook-hiring-surge" agent skill from https://github.com/growthenginenowoslawski/coldoutboundskills/tree/main/skills/playbooks/playbook-hiring-surge into .claude/skills/playbook-hiring-surge/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "playbook-hiring-surge", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/growthenginenowoslawski/coldoutboundskills/tree/main/skills/playbooks/playbook-hiring-surgeType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add growthenginenowoslawski/coldoutboundskills --skill playbook-hiring-surge -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install growthenginenowoslawski/coldoutboundskills playbook-hiring-surge --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/growthenginenowoslawski/coldoutboundskills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/playbooks/playbook-hiring-surge .agents/skills/playbook-hiring-surge && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "playbook-hiring-surge" agent skill from https://github.com/growthenginenowoslawski/coldoutboundskills/tree/main/skills/playbooks/playbook-hiring-surge into .agents/skills/playbook-hiring-surge/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "playbook-hiring-surge", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add growthenginenowoslawski/coldoutboundskills --skill playbook-hiring-surge -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install growthenginenowoslawski/coldoutboundskills playbook-hiring-surge --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/growthenginenowoslawski/coldoutboundskills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/playbooks/playbook-hiring-surge .cursor/skills/playbook-hiring-surge && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "playbook-hiring-surge" agent skill from https://github.com/growthenginenowoslawski/coldoutboundskills/tree/main/skills/playbooks/playbook-hiring-surge into .cursor/skills/playbook-hiring-surge/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "playbook-hiring-surge", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/growthenginenowoslawski/coldoutboundskills.git --path skills/playbooks/playbook-hiring-surge--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add growthenginenowoslawski/coldoutboundskills --skill playbook-hiring-surge -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install growthenginenowoslawski/coldoutboundskills playbook-hiring-surge --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/growthenginenowoslawski/coldoutboundskills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/playbooks/playbook-hiring-surge .gemini/skills/playbook-hiring-surge && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "playbook-hiring-surge" agent skill from https://github.com/growthenginenowoslawski/coldoutboundskills/tree/main/skills/playbooks/playbook-hiring-surge into .gemini/skills/playbook-hiring-surge/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "playbook-hiring-surge", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install growthenginenowoslawski/coldoutboundskills playbook-hiring-surgeInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add growthenginenowoslawski/coldoutboundskills --skill playbook-hiring-surge -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/growthenginenowoslawski/coldoutboundskills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/playbooks/playbook-hiring-surge .github/skills/playbook-hiring-surge && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "playbook-hiring-surge" agent skill from https://github.com/growthenginenowoslawski/coldoutboundskills/tree/main/skills/playbooks/playbook-hiring-surge into .github/skills/playbook-hiring-surge/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "playbook-hiring-surge", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add growthenginenowoslawski/coldoutboundskills --skill playbook-hiring-surge -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install growthenginenowoslawski/coldoutboundskills playbook-hiring-surge --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/growthenginenowoslawski/coldoutboundskills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/playbooks/playbook-hiring-surge .opencode/skills/playbook-hiring-surge && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "playbook-hiring-surge" agent skill from https://github.com/growthenginenowoslawski/coldoutboundskills/tree/main/skills/playbooks/playbook-hiring-surge into .opencode/skills/playbook-hiring-surge/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "playbook-hiring-surge", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
playbook-hiring-surgeProduces a copy-ready clause about a company adding people to one specific department in the last 6 months, plus the department-level headcount counts that drive the segment gate.
Playbook Hiring Surge is an agent skill from growthenginenowoslawski/coldoutboundskills. Produces a copy-ready clause about a company adding people to one specific department in the last 6 months, plus the department-level headcount counts that drive the segment gate. Triggers on "they're hiring", "hiring surge", "growing their sales team", "scaling the team", "headcount growth", "who added SDRs", "companies that just built a marketing team". Outputs hiringsurgeline, a lowercase second-person clause that completes "Noticed <line."
Its SKILL.md is about 6.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `clay-table.md` and `clay-workflow.md`).
It sits in Business, Finance & HR. The repository describes itself as: Open-source Claude Code skills for cold email and outbound sales. Grade campaigns, export Prospeo searches, scrape Google Maps — all from Claude Code. The licence is MIT.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 25c5d85. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
linkedin.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Playbook Hiring Surge loads about 6.2k tokens when it runs. Until then it costs about 118 tokens; SKILL.md has 3,327 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from growthenginenowoslawski/coldoutboundskills at commit 25c5d85, republished under its MIT licence (© growthenginenowoslawski). 3,327 words, ~6,171 tokens.
.claude/skills/playbook-hiring-surge/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.All rules here are best practice, not law. Override any of them when the campaign calls for it; note the best practice once and move on.
Use when: the angle is "you are scaling this team right now".
Do not use when: you want the job ad itself (playbook-job-posting-language), the person who
just started (playbook-new-in-role), or money rather than people (playbook-fundraising).
One-line output: hiring_surge_line = "your sales team has 8 people who started new roles in the last six months"
started new roles; never hired, added, brought on.role_starts >= 2 && dept_total >= 4. This cuts
the qualifying segment from 14.6% to 5.2%, so plan roughly 96,000 source rows per
5,000-lead campaign. Do not loosen it to hit volume; source more rows.A hiring surge is a department-level fact, not a company-level one. "This company grew from 200 to 260 people" is almost useless in copy, because the reader cannot tell whether it means anything to them. "Your sales team has 8 people who started new roles in the last six months" is specific, checkable, and implies a budget owner. This playbook produces the second kind.
The whole signal comes from one Clay table action, Find Employee Headcount by Criteria, which
is free on every Clay plan. It counts how many people currently at a company match a filter
set, and it accepts a recency filter (current_role_max_months_since_start_date), so running it
twice per department gives you the department total and the department's last-6-months intake in
one pass. No other vendor does department-sliced recency counts at zero marginal cost. That is why
this playbook has exactly one source and no expensive fallback.
The filter counts people whose current role started in the last 6 months. That set includes external hires, internal promotions, title changes and lateral moves. LinkedIn also generates a new role start date when someone merely edits or re-titles an existing position.
your sales team has 8 people who started new roles in the last six monthsyou added 8 people to the sales team in the last six monthsThe second sentence is a factual claim about the reader's own team that they can disprove instantly if three of those eight were promotions, and cold copy does not survive that.
The over-count rate is measured: 28.3%. Of 276 people whose current role started inside a six-month window across 18 companies, 78 were already working at that company before the window opened. Sliced by title: sales-titled 24.4%, marketing-titled 34.6%. And that is a lower bound — the detector only sees a prior role that started 7+ months ago, so a February joiner promoted in July counts as a joiner. Real examples from the audit: a Business Development Representative who became a Mid-Market Account Executive; a Manager of Customer Success who became a Senior Manager; a Project Manager II who became a Project Manager III.
On one company in the audit, 5 of the 7 recent sales starters were internal moves — "you hired 3 people for sales" would have been wrong about most of the evidence behind it.
Treat every count as an upper bound on hires. Roughly 1 reply in 4 has a right to say "nobody joined my team, I was promoted", and the locked prompt is written so that reply contradicts nothing you sent. If a client insists on "you hired", show them the 28.3% first. That is an operator sign-off, not a default.
Re-measuring the confound on a new ICP is free (about 40 searches). Per company, run two people
searches: one for current_role_max_months_since_start_date: 6 (the population the gate counts),
one for everyone already there before the window (include_past_experiences: true with a
role_range_end_month of YYYY-MM). Intersect on the LinkedIn profile URL: anyone in both started
a new role at a company they already worked at.
| Field | Type | Source | Required? |
|---|---|---|---|
company_linkedin_url | string | your intake payload, as a free formula column | yes when present — this is the preferred and free identifier |
company_domain (fallback) | string, bare lowercase, no www | your list, via Normalize a Domain | yes when no LinkedIn URL, which on a measured intake is 83.6% of rows |
The action prefers a LinkedIn company URL — it is the identifier the underlying people dataset is keyed on. A bare domain forces a resolution step that can silently land on a different company, so the name-collision guard in §7 is mandatory on those rows.
The identifier waterfall, in order:
Stated plainly: on the 83.6% bare-domain rows the identifier is weaker and some counts will land on the wrong company. That is the right trade at 8 credits a row, but nobody has measured how much the bare-domain path degrades the 0.28% cell error rate — every measurement below was taken on rows identified by a purchased URL. Measure it if you run a large batch.
| Field | Type | Example | Null allowed? |
|---|---|---|---|
sales_headcount_total | integer | 28 | no, 0 when nobody matches |
sales_hires_6mo | integer | 8 | no, 0 |
marketing_headcount_total | integer | 15 | no, 0 |
marketing_hires_6mo | integer | 2 | no, 0 |
hiring_surge_dept | string | sales | yes, "" when the gate says NO |
hiring_surge_hires | integer | 8 | yes, 0 when the gate says NO |
hiring_surge_line | string | see above, max 90 chars | yes |
hiring_surge_hires counts role starts, not hires. Nothing downstream may relabel it —
including a copywriter editing the sequence by hand.
Abstain value: "" for the line and the department, 0 for the count. The counts themselves
never abstain: a company with no sales team returns 0, which is a real answer.
Measured on 3,964 distinct companies:
| Metric | 98-row sample | 3,964 companies |
|---|---|---|
| Sales roster resolved (1+ person) | 52% | 35.1% |
| Marketing roster resolved | 61% | 45.3% |
| Either department resolved | 71% | 52.9% |
| Ratio gate = YES | 17% | 14.6% |
| Gate = YES with the absolute floors | not measured | 5.2% |
| Action cell error rate | not measured | 0.28% (11 of 4,000) |
Note how optimistic the 98-row sample was. Plan list size on 5.2%, not 17%. Filling a 5,000-lead campaign takes roughly 96,000 source rows.
The floors delete 64% of the gated segment, and that is the price of the precision they buy: on 20 held-out companies the gate with floors scores 17/20 (85%) against 10/20 (50%) without them. The rows they delete are the ones that would tell a two-person law firm its marketing team is scaling.
Noticed {{hiring_surge_line}}.If hiring_surge_line is empty: exclude the row from this campaign. This is one of the few
playbooks where empty means exclusion rather than a spintax drop, because the entire campaign
premise is the surge. Route excluded rows to a fallback campaign.
| # | Source | Cost | What it does | Stop rule |
|---|---|---|---|---|
| 0 | Company-wide growth pre-filter (list build only) | FREE | POST /search-company with company_headcount_growth: {min:50} | optional and marginal. Only when your TAM is 4x+ oversized |
| 0b | Department contact-count pre-filter (list build only) | FREE | a contacts search/count endpoint filtered by job function | drop companies with no department at all before they reach Clay |
| 1 | Free LinkedIn URL from intake | FREE | formula column | 16.35% fill |
| 2 | Bare domain from Normalize a Domain | FREE | the fallback identifier | covers the other 83.6% |
| 3 | Clay Find Employee Headcount by Criteria x4 columns | FREE | the engine | only advance if the action is removed or made paid |
| 4 | Model phrasing pass, gated rows only | CHEAP | see §6 | only when Hiring Surge Dept is non-empty |
| 5 | A people-data-vendor employee-count action | METERED (~5 credits/row, charged even on a miss) | fallback | only if step 3 is unavailable and the operator signed off |
Cost summary, per 1,000 source rows: four FREE columns plus about $0.0135 of model spend at the 14.6% gate rate, or $0.0048 at the floors' 5.2%. That is the entire cost. There are no enrichment credits in this chain. What remains is Clay table run time, which is why the free pre-filters are still worth running on a large intake.
§1 argues company-level growth is nearly useless as a signal, and step 0 filters on exactly that. It was measured by taking companies whose gate outcome was already known and asking which sit inside the growth pool:
| Sample | In the headcount_growth >= 50 pool |
|---|---|
| 200 gate-YES | 48 (24.0%) |
| 200 gate-NO | 44 (22.0%) |
| at 200 vs 200 | 2.0 points, z = 0.47, p = 0.64, nothing |
| 579 gate-YES | 158 of 575 (27.5%) |
| 579 gate-NO | 127 of 578 (22.0%) |
| at 579 vs 579 | 5.5 points, z = 2.17, p = 0.03 |
Converted to what matters against a 14.6% base rate: 17.6% inside the pool clear the gate against
13.7% outside. A 1.28x relative lift bought with about 76% of your TAM. Use it only when the
TAM is at least 4x oversized. A min:200 variant showed 9.0% vs 12.0%, pointing the wrong way — do
not use it.
The method is reusable and worth stealing. You do not need to run the expensive step on 400 new companies to answer "does this pre-filter predict my gate". Take companies whose outcome you already have, send their domains to the filter in batches of 200 to 500, and read the total count with and without it. Four calls instead of four hundred.
NO_RESULTS on all three test companies while the unfiltered
company query returned 53, 351 and 45 people. The title filter does not compose with the company
filter the way you would expect, so a department count means paging the whole roster and regexing
titles yourself. Fine for verification, far too slow for production.company_headcount_by_department filter. The name is accepted but every inner shape tried
returned INVALID_FILTERS. Shape unknown; worth a support ticket, since it would give a free
department-level TAM pre-filter.VERDICT: PASS 17/20 (85%) on held-out companies. The floors were benched, not fitted: 17/20 with them, 10/20 without, on 20 companies drawn blind from a batch created after the floors were written.
The one miss was a wrong abstain in financial services — see §7.
clay-table.md — the full column build. This is the primary path: the whole chain runs in
Clay, because the headcount action has no API surface anywhere and exists only as a table
action. Read clay-playbooks/clay-table-harness.md first.clay-workflow.md — a CLI-buildable approximation, for the parts that do have workflow
actions. Read clay-playbooks/clay-cli-harness.md first.⚠️ Both are unbuilt specifications.
Model choice, with the arithmetic. Measured on 10 gated rows per model. The prompt is 502 tokens as sent.
| Model and params | Clean JSON | p50 latency | Completion tokens | Reasoning tokens | Per 1,000 source rows at 5.2% |
|---|---|---|---|---|---|
gpt-4o-mini, max_tokens=300 | 10/10 | 0.93s | 28 | 0 | $0.0048 |
gpt-5-nano, 1200 tokens, default effort | 0/10 | 9.58s | 1200 (capped) | 1200 | unusable |
gpt-5-nano, 3000 tokens, default effort | 3/3 | 11.6s | 1445 | 1408 | $0.031 |
gpt-5-nano, reasoning_effort="minimal" | 1/1 | 2.70s | 37 | 0 | $0.0021 |
Two things matter here:
A small reasoning model at default effort returns empty content on this prompt. Ten of ten rows
came back finish_reason=length with an empty message after burning the entire 1,200-token budget
on reasoning. reasoning_effort="minimal" is the fix and makes it both reliable and the cheapest
option in the table.
Inside Clay, ship gpt-4o-mini. Clay's AI column does not expose reasoning_effort, so inside
Clay the nano-class model is the default-effort row above: 6.5x more expensive than mini and empty
on every row at 1,200 tokens. Outside Clay, use the nano-class model with minimal effort, which
is 2.3x cheaper than mini.
Params: max_completion_tokens=1200 (never max_tokens on a reasoning model) plus
reasoning_effort="minimal", no temperature, flex tier for batch outside Clay.
STATIC PREFIX (byte-identical across calls, keep first)
You write one short clause for a cold email. The clause tells a company that we noticed people on one of their teams recently started new roles.
You are given a department name and how many people on that team started their current role in the last 6 months. The number is already verified. Your only job is wording.
IMPORTANT: the number counts people who STARTED A NEW ROLE. Some of them were hired from outside and some were promoted or moved internally. You cannot tell which. So never say the company hired, added, brought on, recruited, or grew by those people. Say that those people started new roles, or are new in their roles, or joined that team.
Return JSON only, no prose, no code fence:
{"hiring_surge_line": "...", "confidence": "high|low"}
Rules:
- The clause must read correctly inside this sentence: "Noticed <hiring_surge_line>."
- Write it in second person, about "you" or "your team". Never write the company name.
- Start with a lowercase letter. No trailing period. No em dashes. 5th grade reading level.
- Use the exact number you are given. Never invent a number, a job title, a person, or a date.
- Say "in the last six months" or "over the past six months". Never a specific month or date.
- Never claim the company hired anyone. Say people started new roles.
- Keep it under 90 characters.
- confidence is "high" when the number is 3 or more, otherwise "low".
Examples:
Input: {"department":"sales","role_starts_last_6_months":8}
Output: {"hiring_surge_line":"your sales team has 8 people who started new roles in the last six months","confidence":"high"}
Input: {"department":"marketing","role_starts_last_6_months":3}
Output: {"hiring_surge_line":"on your marketing team, 3 people started new roles in the past six months","confidence":"high"}
Input: {"department":"sales","role_starts_last_6_months":2}
Output: {"hiring_surge_line":"you have 2 people on the sales team who started new roles in the last six months","confidence":"low"}
PER-ROW DATA (appended last)
{"department":"{{Hiring Surge Dept}}","role_starts_last_6_months":{{Hiring Surge Hires}}}Notice what the prompt refuses to let the model say: that anyone was hired. The input field is
named role_starts_last_6_months rather than hires for the same reason, so a future editor
cannot casually reintroduce the claim.
Notice what is not in this prompt: the abstain decision, the department choice, and the company name. All three were in v1 and all three caused failures. The abstain and department logic moved into deterministic formulas; the company name was removed from the output shape entirely.
Cache note. At ~460 tokens this sits below the 1,024-token prompt-cache floor, so measured
cached_tokens was 0 on every call. Expected and fine at this size. Keep the static prefix first
anyway — if a client variant grows it past 1,024 the discount switches on for free.
Verifier pass: not needed, and this is the rare playbook where that is genuinely true. The number is copied from a deterministic count the model is told not to change, and the only date reference is a fixed six-month phrase. There is no free-text claim to fabricate. What can go wrong is upstream — wrong company matched, stale data, the promotion confound — and a second model call sees none of that, because it only sees the same number. Spend the effort on the §7 identity checks instead.
Truncation guard: finish_reason == "length" with empty content means retry at 3,000 tokens,
never abstain. Setting reasoning_effort="minimal" takes the truncation rate to zero and is the
shipped fix; keep the retry ladder as a second line of defence, not as the plan.
| Symptom | Cause | Fix |
|---|---|---|
| Prospect replies "nobody joined my team, I was promoted" | 28.3% of role starts are internal moves | The locked prompt says "started new roles", true of promotions and joins alike, so the reply contradicts nothing. Never ship a hire claim |
| A 45,000-person enterprise fires the gate on below-average churn | The roleCount > 6 absolute override has no upper bound. Observed: a 1,896-person sales function with 95 six-month role starts — 5.3%, below normal churn. 1.0% of gated companies | ⚠️ Unvalidated guard: require the ratio clause (not the >6 override) on any department with 200+ people, or drop the override entirely. Bench it on a fresh blind draw before shipping, exactly as the floors were benched |
| An agency fires the sales gate on client-service staff | At marketing and creative agencies, Account Executive and Account Manager are client service, and the Sales function counts them | ⚠️ Unvalidated guard: exclude those titles when the industry is Marketing Services, Advertising or Design, or route agencies through job_title_keywords instead |
| A financial-services company abstains when it should not | In finance and professional services the sellers are titled Principal, Business Development or Client Relationship, which job_functions=["Sales"] does not catch. This was the only miss in the bench | Add a third department column bound to job_title_keywords: ["business development","client relationship","partnerships"] for those ICPs |
| Every row returns "No Role Found" for a department | job_functions got a value outside the enum. A wrong enum value does not error, it silently returns zero | Only "Sales" and "Marketing and Public Relations" are confirmed. Test any new value on 10 known-good companies first, or use free-text job_title_keywords |
| Copy reads "silktide added 8 people" with a lowercase company name | v1 allowed the company name in a clause that also required a lowercase first letter | v2 removes the company name entirely. Never put a company name in a clause with a lowercase-first rule |
| A 4-person marketing team that added 1 person is flagged YES | The raw percentage check has no absolute floor: 1/(4-1) is 33%, over the 15% threshold | The hires >= 2 && total >= 4 floors |
Growth percent shows Infinity | The whole department started inside the window, so total - recent == 0. This is a real surge, not an error | The check treats "Infinity" as YES on purpose. Leave it |
| Counts belong to a different company with the same short name | Two different companies can share a short name, and a bare domain invites the collision. This is the identifier on ~83.6% of rows | Mandatory guard: sanity-check the returned count against your list's known headcount, abstain when a department count exceeds the company's known total, and abstain on any company whose name is a short generic token |
A LinkedIn URL contains a raw & | Observed: https://www.linkedin.com/company/cr&t | Percent-encode company URLs before any bulk URL operation |
Model returns empty with finish_reason=length | Reasoning overrun. Happens when the prompt asks the model to make a judgment call rather than just phrase something | Retry once at 3,000 tokens. If it still empties, the prompt is the problem: move the decision into a formula |
| A growth filter seems not to filter | An unrecognized inner key is silently ignored rather than rejected | Always sanity-check a filter by comparing total counts with and without it before trusting it |
| A company record's AI-generated description describes a completely different business | Observed on a real record | Never use a vendor's AI description field for copy. Use the human-written description |
| 47% of companies resolve no department at all | Small, non-US or LinkedIn-thin companies genuinely have no visible department roster. This is a correct abstain, not a failure | Plan around the 5.2% rate. Do not "fix" it by loosening the gate. Pre-filter with the free count in step 0b so these rows never consume Clay run time |
| Counts look plausible but no second vendor confirms the recency half | Contact-database snapshots lag, so their recency counts run about a third low (observed 3 vs 6, 8 vs 23) | Verify the recency half against the same people dataset that produced it, which returns names, titles and role start dates |
Find Employee Headcount by Criteria is a free Clay action, but a similarly named
third-party Get Employee Count by Criteria costs 5 credits even when it finds nothing.
Check which one your column is bound to.playbook-new-in-role,
the push gate must exclude people who personally just started, or the same person gets two
different sequences from you.© growthenginenowoslawski, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 2 other files in skills/playbooks/playbook-hiring-surge of growthenginenowoslawski/coldoutboundskills.
Open the folder on GitHubat commit 25c5d85
Playbook Hiring Surge next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Playbook Hiring Surge this skillgrowthenginenowoslawski/coldoutboundskills | 753 | — | ~6.2k | Automated safety check: Pass | MIT | |
| Technical Analysttradermonty/claude-trading-skills | 3k | 4 repos | ~4.6k | Automated safety check: Pass | MIT | |
| Theme Detectortradermonty/claude-trading-skills | 3k | 2 repos | ~4.9k | Automated safety check: Pass | MIT | |
| Creating Financial ModelsChen-zexi/open-ptc-agent | 729 | 3 repos | ~1.3k | Automated safety check: Pass | MIT | |
| Stock APIzhangxiangliang/stock-api | 2k | — | ~507 | Automated safety check: Pass | MIT | |
| Itr Walakaranb192/itr-wala | 871 | — | ~3.6k | Automated safety check: Pass | MIT |
tradermonty/claude-trading-skills
This skill should be used when analyzing weekly price charts for stocks, stock indices, cryptocurrencies, or forex pairs.
tradermonty/claude-trading-skills
Detect and analyze trending market themes across sectors. An agent skill from tradermonty/claude-trading-skills.
Chen-zexi/open-ptc-agent
This skill provides an advanced financial modeling suite with DCF analysis, sensitivity testing, Monte Carlo simulations, and scenario planning for investment decisions
zhangxiangliang/stock-api
Fetch real-time stock quotes, K-line (candlestick) history, and search symbols for China A-shares, Hong Kong, and US markets.
karanb192/itr-wala
File Indian income tax returns (ITR) for FY 2025-26 / AY 2026-27.
zillionare/zillionare
面向中文自然语言的 Tushare 数据研究技能。用于把“看看这只股票最近怎么样”“帮我查财报趋势”“最近哪个板块最强”“北向资金在买什么”“给我导出一份行情数据”这类请求,转成可执行的数据获取、清洗、对比、筛选、导出与简要分析流程。适用于 A 股、指数、ETF/基金、财务、估值、资金流、公告新闻、板块概念与宏观数据等研究场景。
growthenginenowoslawski/coldoutboundskills
Diagnostic audit for a running cold email program. An agent skill from growthenginenowoslawski/coldoutboundskills.
growthenginenowoslawski/coldoutboundskills
Conversational intake for cold email campaigns. An agent skill from growthenginenowoslawski/coldoutboundskills.
growthenginenowoslawski/coldoutboundskills
META skill — build the largest possible qualified lead list for any request, end to end.
growthenginenowoslawski/coldoutboundskills
Autonomous cold email campaign launcher. An agent skill from growthenginenowoslawski/coldoutboundskills.
growthenginenowoslawski/coldoutboundskills
Use the Blitz API to find decision-makers at specific companies when you already have a list of company domains.
growthenginenowoslawski/coldoutboundskills
Compare reply rates, bounce rates, and positive reply rates broken down by inbox type (SMTP / Gmail / Outlook) for a Smartlead account.
Categories
Produces a copy-ready clause about a company adding people to one specific department in the last 6 months, plus the department-level headcount counts that drive the segment gate. Playbook Hiring Surge is an agent skill from growthenginenowoslawski/coldoutboundskills. Produces a copy-ready clause about a company adding people to one specific department in the last 6 months, plus the department-level headcount counts that drive the segment gate.
Playbook Hiring Surge fits situations like: growing their sales team; scaling the team; headcount growth; companies that just built a marketing team.
Run `npx skills add growthenginenowoslawski/coldoutboundskills --skill playbook-hiring-surge -a claude-code`. Or copy the skill folder (skills/playbooks/playbook-hiring-surge in growthenginenowoslawski/coldoutboundskills) into .claude/skills/playbook-hiring-surge in your project. Claude Code loads it when a task matches its description.
Run `npx skills add growthenginenowoslawski/coldoutboundskills --skill playbook-hiring-surge -a codex`. Or copy the skill folder (skills/playbooks/playbook-hiring-surge in growthenginenowoslawski/coldoutboundskills) into .agents/skills/playbook-hiring-surge in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add growthenginenowoslawski/coldoutboundskills --skill playbook-hiring-surge -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/playbook-hiring-surge, .gemini/skills/playbook-hiring-surge, .github/skills/playbook-hiring-surge and .opencode/skills/playbook-hiring-surge in your project.
SKILL.md names no scripts, command-line tools or credentials: Playbook Hiring Surge is instructions for the agent only.
SKILL.md names 1 domain. In commands or code: linkedin.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Playbook Hiring Surge is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 6.2k tokens (SKILL.md is roughly 25k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Playbook Hiring Surge: Technical Analyst (tradermonty/claude-trading-skills, 3k stars), Theme Detector (tradermonty/claude-trading-skills, 3k stars), Creating Financial Models (Chen-zexi/open-ptc-agent, 729 stars) and Stock API (zhangxiangliang/stock-api, 2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
growthenginenowoslawski (a GitHub user) maintains it in growthenginenowoslawski/coldoutboundskills, which has 753 GitHub stars. The repository holds 49 skills in this directory. The repository was last updated on October 5, 2026.
Source: growthenginenowoslawski/coldoutboundskills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.