Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Expert in building custom tools that solve your own problems first. The best products often start as personal tools - scratch your own itch, build for yourself, then discover others have the same itch.
.claude/skills/sickn33-personal-tool-builder/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-12 | ✗→✓ | ▲ Improved | 227% | 0% |
| case-18 | ✗→✓ | ▲ Improved | 207% | 0% |
| case-07 | ✓→✓ | = Same ✓ | 211% | 0% |
| case-08 | ✓→✓ | = Same ✓ | 209% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 230% | 0% |
Expert in building custom tools that solve your own problems first. The best products often start as personal tools - scratch your own itch, build for yourself, then discover others have the same itch. Covers rapid prototyping, local-first apps, CLI tools, scripts that grow into products, and the art of dogfooding.
Role: Personal Tool Architect
You believe the best tools come from real problems. You've built dozens of personal tools - some stayed personal, others became products used by thousands. You know that building for yourself means you have perfect product-market fit with at least one user. You build fast, iterate constantly, and only polish what proves useful.
Read the detailed guide before executing this skill. It retains the complete procedure and reference material. Treat its safety, prerequisites, and validation requirements as mandatory. For focused work, load the relevant sections; for end-to-end work, read the guide completely.
| Risk | Mitigation | |------|------------| | API keys in code | Use env vars or config file | | Tool exposed on network | Bind to localhost only | | No input validation | Validate even your own input | | Logs contain secrets | Sanitize logging | | Git commits with secrets | .gitignore config files |
javascript// Never in code const leakedToken = '[redacted API key]'; // BAD // Environment variable const API_KEY = process.env.MY_API_KEY; // Config file (gitignored) import { readFileSync } from 'fs'; const config = JSON.parse( readFileSync(join(homedir(), '.mytool', 'config.json')) ); const API_KEY = config.apiKey;
javascript// If your tool has a web UI import express from 'express'; const app = express(); // ALWAYS bind to localhost for personal tools app.listen(3000, '127.0.0.1', () => { console.log('Running on http://localhost:3000'); }); // NEVER do this for personal tools: // app.listen(3000, '0.0.0.0') // Exposes to network!
Checklist:
[ ] No hardcoded credentials
[ ] Config file is gitignored
[ ] README mentions credential setup
[ ] No personal paths in code
[ ] No sensitive data in repo
[ ] Reviewed git history for secrets| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 17,996 | 14,837 | -18% | 1 | 1 | 0% | 3,451 | 7,454 | +116% | 0 | 0 | — |
case-07 | pass→pass | 12,972 | 12,797 | -1% | 1 | 1 | 0% | 2,201 | 6,841 | +211% | 0 | 0 | — |
case-08 | pass→pass | 11,354 | 9,023 | -21% | 1 | 1 | 0% | 2,114 | 6,531 | +209% | 0 | 0 | — |
case-02 | pass→pass | 10,153 | 8,821 | -13% | 1 | 1 | 0% | 1,891 | 6,246 | +230% | 0 | 0 | — |
case-03 | pass→pass | 9,458 | 7,502 | -21% | 1 | 1 | 0% | 1,656 | 5,944 | +259% | 0 | 0 | — |
case-04 | pass→pass | 11,542 | 7,539 | -35% | 1 | 1 | 0% | 2,280 | 6,095 | +167% | 0 | 0 | — |
case-05 | pass→pass | 13,458 | 11,019 | -18% | 1 | 1 | 0% | 2,426 | 6,748 | +178% | 0 | 0 | — |
case-06 | pass→pass | 11,812 | 7,854 | -34% | 1 | 1 | 0% | 2,245 | 6,125 | +173% | 0 | 0 | — |
case-09 | fail→fail | 14,979 | 10,658 | -29% | 1 | 1 | 0% | 2,555 | 6,589 | +158% | 0 | 0 | — |
case-10 | pass→pass | 14,386 | 12,693 | -12% | 1 | 1 | 0% | 2,540 | 6,976 | +175% | 0 | 0 | — |
case-11 | pass→pass | 11,915 | 7,564 | -37% | 1 | 1 | 0% | 2,013 | 5,897 | +193% | 0 | 0 | — |
case-12 | fail→pass | 10,589 | 6,980 | -34% | 1 | 1 | 0% | 1,795 | 5,873 | +227% | 0 | 0 | — |
case-17 | pass→pass | 13,646 | 9,239 | -32% | 1 | 1 | 0% | 2,358 | 6,301 | +167% | 0 | 0 | — |
case-13 | pass→pass | 11,518 | 8,617 | -25% | 1 | 1 | 0% | 1,999 | 6,172 | +209% | 0 | 0 | — |
case-14 | pass→pass | 15,723 | 12,508 | -20% | 1 | 1 | 0% | 2,880 | 7,080 | +146% | 0 | 0 | — |
case-15 | fail→fail | 15,913 | 14,247 | -10% | 1 | 1 | 0% | 2,565 | 7,386 | +188% | 0 | 0 | — |
case-16 | pass→pass | 10,088 | 9,418 | -7% | 1 | 1 | 0% | 1,615 | 6,403 | +296% | 0 | 0 | — |
case-18 | fail→pass | 13,336 | 11,991 | -10% | 1 | 1 | 0% | 2,126 | 6,523 | +207% | 0 | 0 | — |
case-19 | pass→pass | 9,196 | 6,683 | -27% | 1 | 1 | 0% | 1,734 | 5,780 | +233% | 0 | 0 | — |
case-20 | pass→pass | 22,516 | 12,694 | -44% | 1 | 1 | 0% | 3,968 | 6,911 | +74% | 0 | 0 | — |
case-21 | pass→pass | 9,328 | 8,538 | -8% | 1 | 1 | 0% | 1,663 | 6,046 | +264% | 0 | 0 | — |
case-22 | pass→pass | 18,111 | 14,761 | -18% | 1 | 1 | 0% | 3,356 | 7,088 | +111% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +9 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
The publisher has shipped newer versions since this run, so these numbers describe v1, not the version currently listed.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.