Free model triage
Skill Neeeophytee/ai-cost-cutter-skills/skills/free-model-triage
10 skills that cut your AI bill with proof instead of vibes. MIT, works in Claude Code, Codex, Cursor. Every skill's check is executed by CI.
npx -y skills add Neeeophytee/ai-cost-cutter-skills --skill free-model-triageAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
3 things to look at
- 24 days oldThe repository was created 24 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 16 stars16 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Route high-volume, low-stakes triage (reading piles, inbox summaries, needs-reply flags) to a free model with a strict output schema. Use when the user wants one-line summaries of many items cheaply, asks to triage email, articles, or reports with AI, or wants to decide what's worth reading without paying premium rates for it.
SKILL.md
3.7 KB, 846 tokens by cl100k_base, as published. Nobody here has run it
Triage is a free-model job
Deciding what to read is a cheaper problem than reading: a one-sentence summary plus a needs-reply flag per item. Skimming twenty long items by hand runs about an hour; reading twenty one-liners and opening only what earned it is about fifteen minutes. On a top-tier paid model that triage volume costs real money every month; on a gateway's free tier it costs nothing (OpenRouter free models, as of 2026-06: 20 requests/minute and 50/day, rising to 1,000/day once $10 of credit has ever been added). Your job is to wire the free lane with a schema strict enough that the output is usable, and to keep anything sensitive out of it.
Steps
- Confirm the pile fits the caps: daily item count vs. 50/day (or 1,000/day post-credit). Over the cap means batching across days or the cheapest paid model; still pennies.
- Point any OpenAI-compatible client at
https://openrouter.ai/api/v1with a model whose id ends in:free. That suffix is the contract; without it the "free" triage quietly bills. - Pin the output schema to exactly two fields: a string
summaryand a booleanneeds_reply. The boolean is what makes triage actionable: a summary alone still makes the user read everything to find what needs them. - Give it one standing instruction ("Summarize in one sentence and flag whether it needs a reply") and run the proof below to validate the config shape.
- Sort the results: needs-reply items first, everything else skimmable. The user opens what earned it.
Prove it
cat > triage.json <<'JSON'
{
"base_url": "https://openrouter.ai/api/v1",
"model": "deepseek/deepseek-r1:free",
"instruction": "Summarize this in one sentence and flag whether it needs a reply.",
"response_schema": {
"type": "object",
"properties": {
"summary": { "type": "string" },
"needs_reply": { "type": "boolean" }
},
"required": ["summary", "needs_reply"]
}
}
JSON
node -e '
const c = JSON.parse(require("fs").readFileSync("triage.json", "utf8"));
function bad(m) { console.error("BAD: " + m); process.exit(1); }
if (!String(c.base_url || "").includes("openrouter.ai")) bad("base_url does not point at OpenRouter");
if (!String(c.model || "").endsWith(":free")) bad("model id must end with :free, otherwise this quietly bills");
const props = (c.response_schema && c.response_schema.properties) || {};
if (!props.summary || props.summary.type !== "string") bad("schema missing a string summary");
if (!props.needs_reply || props.needs_reply.type !== "boolean") bad("schema missing a boolean needs_reply");
console.log("triage OK: free model " + c.model + " returns a one-line summary + needs_reply flag");
'
Guardrails
- Free models are the most likely to retain or train on what they're sent. Anything private (client email, unreleased work, health, legal) goes to a cheap paid model instead; the difference is pennies and the policy is better.
- Triage decides what to read; it does not replace reading. A one-line squeeze sometimes flattens the one detail that mattered, so the flagged items still get opened.
- Respect the caps in the design, not in the error handler: 20/minute and 50/day sized up front, per
free-tier-batch-plan, beats discovering the limit mid-pile.
<sub>Backed by a machine-verified recipe, re-checked by CI: Let a free model triage your reading</sub>