From career
Cost-routing helper. Reads RESEARCH_MODEL from config and decides whether a bulk-research call should run on Claude or be delegated to a cheaper model (DeepSeek Pro/Flash via OpenRouter). Reserves Claude for ground-truth, meeting-prep, draft-outreach, recommendation engine. Skills that produce many cheap research artifacts (discovery, ecosystem, financials briefs) call this first.
npx claudepluginhub danielrosehill/claude-code-plugins --plugin careerThis skill is limited to using the following tools:
Most career-os work is reasoning over user-specific context — Claude is right. But bulk web-shaped research (domain enumeration, ecosystem mapping, public-financials briefs) is cost-dominated. This skill is the routing decision: should *this* call use Claude, or hand off to a cheaper model.
Guides Next.js Cache Components and Partial Prerendering (PPR): 'use cache' directives, cacheLife(), cacheTag(), revalidateTag() for caching, invalidation, static/dynamic optimization. Auto-activates on cacheComponents: true.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Share bugs, ideas, or general feedback.
Most career-os work is reasoning over user-specific context — Claude is right. But bulk web-shaped research (domain enumeration, ecosystem mapping, public-financials briefs) is cost-dominated. This skill is the routing decision: should this call use Claude, or hand off to a cheaper model.
The skill itself doesn't call any model — it returns a routing decision the caller acts on.
$ARGUMENTS:
--task=<task-name> — the calling skill or task type (e.g. discover-by-domain, brief-company-financials, meeting-prep).--override=<model> — force a specific routing target.Read config.yaml (or workspace config). Keys:
RESEARCH_MODEL — claude (default) | deepseek-pro | deepseek-flash | auto.OPENROUTER_MCP — name of installed OpenRouter MCP, if any.If config missing, default to claude and note "no router configured."
Two sets:
Always Claude (high-context, user-specific reasoning):
ground-truth, meeting-prep, draft-outreach, suggest-companies, route-capture, weekly-plan, weekly-log, self-healing-context.Routable (bulk, web-shaped, structurally similar across runs):
discover-by-domain, discover-by-geography, discover-remote-friendly, companies-like-x, chunked-discovery.brief-company-financials, brief-recruitment-profile, brief-glassdoor-signal.find-conferences, find-communities, find-jobs-boards, find-hackathons, map-investors.salary-research, branding-assessment.| RESEARCH_MODEL | Always-Claude task | Routable task |
|---|---|---|
claude | claude | claude |
deepseek-pro | claude | deepseek-pro |
deepseek-flash | claude | deepseek-flash |
auto | claude | deepseek-flash if OPENROUTER_MCP set, else claude |
--override wins over the table.
Print one line:
route: <claude|deepseek-pro|deepseek-flash> via <claude|openrouter:<mcp>>
reason: task=<task> RESEARCH_MODEL=<value>
Caller reads stdout and dispatches accordingly.
RESEARCH_MODEL=deepseek-* but OPENROUTER_MCP not configured, downgrade to claude and warn.route: claude with reason: unknown task, defaulting to claude.