{"id":"079d09e0-fd59-48d8-8b37-84eec417f99f","shortId":"9bjaax","kind":"skill","title":"personal-tool-builder","tagline":"Expert in building custom tools that solve your own problems first.","description":"# Personal Tool Builder\n\nExpert in building custom tools that solve your own problems first. The best products\noften start as personal tools - scratch your own itch, build for yourself, then\ndiscover others have the same itch. Covers rapid prototyping, local-first apps,\nCLI tools, scripts that grow into products, and the art of dogfooding.\n\n**Role**: Personal Tool Architect\n\nYou believe the best tools come from real problems. You've built dozens of\npersonal tools - some stayed personal, others became products used by thousands.\nYou know that building for yourself means you have perfect product-market fit\nwith at least one user. You build fast, iterate constantly, and only polish\nwhat proves useful.\n\n### Expertise\n\n- Rapid prototyping\n- CLI development\n- Local-first architecture\n- Script automation\n- Problem identification\n- Tool evolution\n\n## Capabilities\n\n- Personal productivity tools\n- Scratch-your-own-itch methodology\n- Rapid prototyping for personal use\n- CLI tool development\n- Local-first applications\n- Script-to-product evolution\n- Dogfooding practices\n- Personal automation\n\n## Patterns\n\n### Scratch Your Own Itch\n\nBuilding from personal pain points\n\n**When to use**: When starting any personal tool\n\n## The Itch-to-Tool Process\n\n### Identifying Real Itches\n```\nGood itches:\n- \"I do this manually 10x per day\"\n- \"This takes me 30 minutes every time\"\n- \"I wish X just did Y\"\n- \"Why doesn't this exist?\"\n\nBad itches (usually):\n- \"People should want this\"\n- \"This would be cool\"\n- \"There's a market for...\"\n- \"AI could probably...\"\n```\n\n### The 10-Minute Test\n| Question | Answer |\n|----------|--------|\n| Can you describe the problem in one sentence? | Required |\n| Do you experience this problem weekly? | Must be yes |\n| Have you tried solving it manually? | Must have |\n| Would you use this daily? | Should be yes |\n\n### Start Ugly\n```\nDay 1: Script that solves YOUR problem\n- No UI, just works\n- Hardcoded paths, your data\n- Zero error handling\n- You understand every line\n\nWeek 1: Script that works reliably\n- Handle your edge cases\n- Add the features YOU need\n- Still ugly, but robust\n\nMonth 1: Tool that might help others\n- Basic docs (for future you)\n- Config instead of hardcoding\n- Consider sharing\n```\n\n### CLI Tool Architecture\n\nBuilding command-line tools that last\n\n**When to use**: When building terminal-based tools\n\n## CLI Tool Stack\n\n### Node.js CLI Stack\n```javascript\n// package.json\n{\n  \"name\": \"my-tool\",\n  \"version\": \"1.0.0\",\n  \"bin\": {\n    \"mytool\": \"./bin/cli.js\"\n  },\n  \"dependencies\": {\n    \"commander\": \"^12.0.0\",    // Argument parsing\n    \"chalk\": \"^5.3.0\",          // Colors\n    \"ora\": \"^8.0.0\",            // Spinners\n    \"inquirer\": \"^9.2.0\",       // Interactive prompts\n    \"conf\": \"^12.0.0\"           // Config storage\n  }\n}\n\n// bin/cli.js\n#!/usr/bin/env node\nimport { Command } from 'commander';\nimport chalk from 'chalk';\n\nconst program = new Command();\n\nprogram\n  .name('mytool')\n  .description('What it does in one line')\n  .version('1.0.0');\n\nprogram\n  .command('do-thing')\n  .description('Does the thing')\n  .option('-v, --verbose', 'Verbose output')\n  .action(async (options) => {\n    // Your logic here\n  });\n\nprogram.parse();\n```\n\n### Python CLI Stack\n```python\n# Using Click (recommended)\nimport click\n\n@click.group()\ndef cli():\n    \"\"\"Tool description.\"\"\"\n    pass\n\n@cli.command()\n@click.option('--name', '-n', required=True)\n@click.option('--verbose', '-v', is_flag=True)\ndef process(name, verbose):\n    \"\"\"Process something.\"\"\"\n    click.echo(f'Processing {name}')\n\nif __name__ == '__main__':\n    cli()\n```\n\n### Distribution\n| Method | Complexity | Reach |\n|--------|------------|-------|\n| npm publish | Low | Node devs |\n| pip install | Low | Python devs |\n| Homebrew tap | Medium | Mac users |\n| Binary release | Medium | Everyone |\n| Docker image | Medium | Tech users |\n\n### Local-First Apps\n\nApps that work offline and own your data\n\n**When to use**: When building personal productivity apps\n\n## Local-First Architecture\n\n### Why Local-First for Personal Tools\n```\nBenefits:\n- Works offline\n- Your data stays yours\n- No server costs\n- Instant, no latency\n- Works forever (no shutdown)\n\nTrade-offs:\n- Sync is hard\n- No collaboration (initially)\n- Platform-specific work\n```\n\n### Stack Options\n| Stack | Best For | Complexity |\n|-------|----------|------------|\n| Electron + SQLite | Desktop apps | Medium |\n| Tauri + SQLite | Lightweight desktop | Medium |\n| Browser + IndexedDB | Web apps | Low |\n| PWA + OPFS | Mobile-friendly | Low |\n| CLI + JSON files | Scripts | Very Low |\n\n### Simple Local Storage\n```javascript\n// For simple tools: JSON file storage\nimport { readFileSync, writeFileSync, existsSync } from 'fs';\nimport { homedir } from 'os';\nimport { join } from 'path';\n\nconst DATA_DIR = join(homedir(), '.mytool');\nconst DATA_FILE = join(DATA_DIR, 'data.json');\n\nfunction loadData() {\n  if (!existsSync(DATA_FILE)) return { items: [] };\n  return JSON.parse(readFileSync(DATA_FILE, 'utf8'));\n}\n\nfunction saveData(data) {\n  if (!existsSync(DATA_DIR)) mkdirSync(DATA_DIR);\n  writeFileSync(DATA_FILE, JSON.stringify(data, null, 2));\n}\n```\n\n### SQLite for More Complex Tools\n```javascript\n// better-sqlite3 for Node.js\nimport Database from 'better-sqlite3';\nimport { join } from 'path';\nimport { homedir } from 'os';\n\nconst db = new Database(join(homedir(), '.mytool', 'data.db'));\n\n// Create tables on first run\ndb.exec(`\n  CREATE TABLE IF NOT EXISTS items (\n    id INTEGER PRIMARY KEY AUTOINCREMENT,\n    name TEXT NOT NULL,\n    created_at DATETIME DEFAULT CURRENT_TIMESTAMP\n  )\n`);\n\n// Fast synchronous queries\nconst items = db.prepare('SELECT * FROM items').all();\n```\n\n### Script to Product Evolution\n\nGrowing a script into a real product\n\n**When to use**: When a personal tool shows promise\n\n## Evolution Path\n\n### Stage 1: Personal Script\n```\nCharacteristics:\n- Only you use it\n- Hardcoded values\n- No error handling\n- Works on your machine\n\nTime: Hours to days\n```\n\n### Stage 2: Shareable Tool\n```\nAdd:\n- README explaining what it does\n- Basic error messages\n- Config file instead of hardcoding\n- Works on similar machines\n\nTime: Days\n```\n\n### Stage 3: Public Tool\n```\nAdd:\n- Installation instructions\n- Cross-platform support\n- Proper error handling\n- Version numbers\n- Basic tests\n\nTime: Week or two\n```\n\n### Stage 4: Product\n```\nAdd:\n- Landing page\n- Documentation site\n- User support channel\n- Analytics (privacy-respecting)\n- Payment integration (if monetizing)\n\nTime: Weeks to months\n```\n\n### Signs You Should Productize\n| Signal | Strength |\n|--------|----------|\n| Others asking for it | Strong |\n| You use it daily | Strong |\n| Solves $100+ problem | Strong |\n| Others would pay | Very strong |\n| Competition exists but sucks | Strong |\n| You're embarrassed by it | Actually good |\n\n## Sharp Edges\n\n### Tool only works in your specific environment\n\nSeverity: MEDIUM\n\nSituation: Script fails when you try to share it\n\nSymptoms:\n- Works on my machine\n- Scripts failing for others\n- Path not found errors\n- Command not found errors\n\nWhy this breaks:\nHardcoded absolute paths.\nRelies on your installed tools.\nAssumes your OS/shell.\nUses your auth tokens.\n\nRecommended fix:\n\n## Making Tools Portable\n\n### Common Portability Issues\n| Issue | Fix |\n|-------|-----|\n| Hardcoded paths | Use ~ or env vars |\n| Specific shell | Declare shell in shebang |\n| Missing deps | Check and prompt to install |\n| Auth tokens | Use config file or env |\n| OS-specific | Test on other OS or use cross-platform libs |\n\n### Path Portability\n```javascript\n// Bad\nconst dataFile = '~/data.json';\n\n// Good\nimport { homedir } from 'os';\nimport { join } from 'path';\nconst dataFile = join(homedir(), '.mytool', 'data.json');\n```\n\n### Dependency Checking\n```javascript\nimport { execSync } from 'child_process';\n\nfunction checkDep(cmd, installHint) {\n  try {\n    execSync(`which ${cmd}`, { stdio: 'ignore' });\n  } catch {\n    console.error(`Missing: ${cmd}`);\n    console.error(`Install: ${installHint}`);\n    process.exit(1);\n  }\n}\n\ncheckDep('ffmpeg', 'brew install ffmpeg');\n```\n\n### Cross-Platform Considerations\n```javascript\nimport { platform } from 'os';\n\nconst isWindows = platform() === 'win32';\nconst isMac = platform() === 'darwin';\nconst isLinux = platform() === 'linux';\n\n// Path separator\nimport { sep } from 'path';\n// Use sep instead of hardcoded / or \\\n```\n\n### Configuration becomes unmanageable\n\nSeverity: MEDIUM\n\nSituation: Too many config options making the tool unusable\n\nSymptoms:\n- Config file is huge\n- Users confused by options\n- You forget what options exist\n- Every bug fix adds a flag\n\nWhy this breaks:\nAdding options instead of opinions.\nFear of making decisions.\nEvery edge case becomes an option.\nConfig file larger than the tool.\n\nRecommended fix:\n\n## Taming Configuration\n\n### The Config Hierarchy\n```\nBest to worst:\n1. Smart defaults (no config needed)\n2. Single config file\n3. Environment variables\n4. Command-line flags\n5. Interactive prompts\n\nUse sparingly:\n6. Config directory with multiple files\n7. Config inheritance/merging\n```\n\n### Opinionated Defaults\n```javascript\n// Instead of 10 options, pick reasonable defaults\nconst defaults = {\n  outputDir: join(homedir(), '.mytool', 'output'),\n  format: 'json',  // Not a flag, just pick one\n  maxItems: 100,   // Good enough for most\n  verbose: false\n};\n\n// Only expose what REALLY needs customization\n// \"Would I want to change this?\" - not \"Could someone?\"\n```\n\n### Config File Pattern\n```javascript\n// ~/.mytool/config.json\n// Keep it minimal\n{\n  \"apiKey\": \"xxx\",       // Actually needed\n  \"defaultProject\": \"main\"  // Convenience\n}\n\n// Don't do this:\n{\n  \"outputFormat\": \"json\",\n  \"outputIndent\": 2,\n  \"outputColorize\": true,\n  \"logLevel\": \"info\",\n  \"logFormat\": \"pretty\",\n  \"logTimestamp\": true,\n  // ... 50 more options\n}\n```\n\n### When to Add Options\n| Add option if... | Don't add if... |\n|------------------|-----------------|\n| Users ask repeatedly | You imagine someone might want |\n| Security/auth related | It's a \"nice to have\" |\n| Fundamental behavior change | It's a micro-preference |\n| Environment-specific | You can pick a good default |\n\n### Personal tool becomes unmaintained\n\nSeverity: LOW\n\nSituation: Tool you built is now broken and you don't want to fix it\n\nSymptoms:\n- Script hasn't run in months\n- Don't remember how it works\n- Dependencies outdated\n- Workflow has changed\n\nWhy this breaks:\nBuilt for old workflow.\nDependencies broke.\nLost interest.\nNo documentation for yourself.\n\nRecommended fix:\n\n## Sustainable Personal Tools\n\n### Design for Abandonment\n```\nAssume future-you won't remember:\n- Why you built this\n- How it works\n- Where the data is\n- What the dependencies do\n\nBuild accordingly:\n- README with WHY, not just WHAT\n- Simple architecture\n- Minimal dependencies\n- Data in standard formats\n```\n\n### Minimal Dependency Strategy\n| Approach | When to Use |\n|----------|-------------|\n| Zero deps | Simple scripts |\n| Core deps only | CLI tools |\n| Lock versions | Important tools |\n| Bundle deps | Distribution |\n\n### Self-Documenting Pattern\n```javascript\n#!/usr/bin/env node\n/**\n * WHAT: Converts X to Y\n * WHY: Because Z process was manual\n * WHERE: Data in ~/.mytool/\n * DEPS: Needs ffmpeg installed\n *\n * Last used: 2024-01\n * Still works as of: 2024-01\n */\n\n// Tool code here\n```\n\n### Graceful Degradation\n```javascript\n// When things break, fail helpfully\ntry {\n  await runMainFeature();\n} catch (err) {\n  console.error('Tool broken. Error:', err.message);\n  console.error('');\n  console.error('Data location: ~/.mytool/data.json');\n  console.error('You can manually access your data there.');\n  process.exit(1);\n}\n```\n\n### When to Let Go\n```\nSigns to abandon:\n- Haven't used in 6+ months\n- Problem no longer exists\n- Better tool now exists\n- Would rebuild differently\n\nHow to abandon gracefully:\n- Archive in clear state\n- Note why abandoned\n- Export data to standard format\n- Don't delete (might want later)\n```\n\n### Personal tools with security vulnerabilities\n\nSeverity: HIGH\n\nSituation: Your personal tool exposes sensitive data or access\n\nSymptoms:\n- API keys in source code\n- Tool accessible on network\n- Credentials in git history\n- Personal data exposed\n\nWhy this breaks:\n\"It's just for me\" mentality.\nCredentials in code.\nNo input validation.\nAccidental exposure.\n\nRecommended fix:\n\n## Security in Personal Tools\n\n### Common Mistakes\n| Risk | Mitigation |\n|------|------------|\n| API keys in code | Use env vars or config file |\n| Tool exposed on network | Bind to localhost only |\n| No input validation | Validate even your own input |\n| Logs contain secrets | Sanitize logging |\n| Git commits with secrets | .gitignore config files |\n\n### Credential Management\n```javascript\n// Never in code\nconst API_KEY = 'sk-xxx'; // BAD\n\n// Environment variable\nconst API_KEY = process.env.MY_API_KEY;\n\n// Config file (gitignored)\nimport { readFileSync } from 'fs';\nconst config = JSON.parse(\n  readFileSync(join(homedir(), '.mytool', 'config.json'))\n);\nconst API_KEY = config.apiKey;\n```\n\n### Localhost-Only Servers\n```javascript\n// If your tool has a web UI\nimport express from 'express';\nconst app = express();\n\n// ALWAYS bind to localhost for personal tools\napp.listen(3000, '127.0.0.1', () => {\n  console.log('Running on http://localhost:3000');\n});\n\n// NEVER do this for personal tools:\n// app.listen(3000, '0.0.0.0') // Exposes to network!\n```\n\n### Before Sharing\n```\nChecklist:\n[ ] No hardcoded credentials\n[ ] Config file is gitignored\n[ ] README mentions credential setup\n[ ] No personal paths in code\n[ ] No sensitive data in repo\n[ ] Reviewed git history for secrets\n```\n\n## Validation Checks\n\n### Hardcoded Absolute Paths\n\nSeverity: MEDIUM\n\nMessage: Hardcoded absolute path - use homedir() or environment variables.\n\nFix action: Use os.homedir() or path.join for portable paths\n\n### Hardcoded Credentials\n\nSeverity: CRITICAL\n\nMessage: Potential hardcoded credential - use environment variables or config file.\n\nFix action: Move to process.env.VAR or external config file (gitignored)\n\n### Server Bound to All Interfaces\n\nSeverity: HIGH\n\nMessage: Server exposed to network - bind to localhost for personal tools.\n\nFix action: Use '127.0.0.1' or 'localhost' instead of '0.0.0.0'\n\n### Missing Error Handling\n\nSeverity: MEDIUM\n\nMessage: Sync operation without error handling - wrap in try/catch.\n\nFix action: Add try/catch for graceful error messages\n\n### CLI Without Help\n\nSeverity: LOW\n\nMessage: CLI has no help - future you will forget how to use it.\n\nFix action: Add .description() and --help to CLI commands\n\n### Tool Without README\n\nSeverity: LOW\n\nMessage: No README - document for your future self.\n\nFix action: Add README with: what it does, why you built it, how to use it\n\n### Debug Console Logs Left In\n\nSeverity: LOW\n\nMessage: Debug logging left in code - remove or use proper logging.\n\nFix action: Remove debug logs or use a proper logger with levels\n\n### Script Missing Shebang\n\nSeverity: LOW\n\nMessage: Script missing shebang - won't execute directly.\n\nFix action: Add #!/usr/bin/env node (or python3) at top of file\n\n### Tool Without Version\n\nSeverity: LOW\n\nMessage: No version tracking - will cause confusion when updating.\n\nFix action: Add version to package.json and --version flag\n\n## Collaboration\n\n### Delegation Triggers\n\n- sell|monetize|SaaS|charge -> micro-saas-launcher (Productizing personal tool)\n- browser extension|chrome extension -> browser-extension-builder (Building browser-based tool)\n- automate|workflow|cron|trigger -> workflow-automation (Automation setup)\n- API|server|database|postgres -> backend (Backend infrastructure)\n- telegram bot -> telegram-bot-builder (Telegram-based tool)\n- AI|GPT|Claude|LLM -> ai-wrapper-product (AI-powered tool)\n\n### CLI Tool That Becomes Product\n\nSkills: personal-tool-builder, micro-saas-launcher\n\nWorkflow:\n\n```\n1. Build CLI for yourself\n2. Share with friends/colleagues\n3. Get feedback and iterate\n4. Add web UI (optional)\n5. Set up payments\n6. Launch publicly\n```\n\n### Personal Automation Stack\n\nSkills: personal-tool-builder, workflow-automation, backend\n\nWorkflow:\n\n```\n1. Identify repetitive task\n2. Build script to automate\n3. Add triggers (cron, webhook)\n4. Store results/logs\n5. Monitor and iterate\n```\n\n### AI-Powered Personal Tool\n\nSkills: personal-tool-builder, ai-wrapper-product\n\nWorkflow:\n\n```\n1. Identify task AI can help with\n2. Build minimal wrapper\n3. Tune prompts for your use case\n4. Add to daily workflow\n5. Consider sharing if useful\n```\n\n### Browser Tool to Extension\n\nSkills: personal-tool-builder, browser-extension-builder\n\nWorkflow:\n\n```\n1. Build bookmarklet or userscript\n2. Validate it solves the problem\n3. Convert to proper extension\n4. Add to Chrome/Firefox store\n5. Share with others\n```\n\n## Related Skills\n\nWorks well with: `micro-saas-launcher`, `browser-extension-builder`, `workflow-automation`, `backend`\n\n## When to Use\n- User mentions or implies: build a tool\n- User mentions or implies: personal tool\n- User mentions or implies: scratch my itch\n- User mentions or implies: solve my problem\n- User mentions or implies: CLI tool\n- User mentions or implies: local app\n- User mentions or implies: automate my\n- User mentions or implies: build for myself\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["personal","tool","builder","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding"],"capabilities":["skill","source-sickn33","skill-personal-tool-builder","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/personal-tool-builder","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34616 github stars · SKILL.md body (17,489 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-23T00:51:23.367Z","embedding":null,"createdAt":"2026-04-18T21:42:21.248Z","updatedAt":"2026-04-23T00:51:23.367Z","lastSeenAt":"2026-04-23T00:51:23.367Z","tsv":"'-01':1474,1480 '/.mytool':1466 '/.mytool/config.json':1247 '/.mytool/data.json':1506 '/bin/cli.js':385 '/data.json':1014 '/usr/bin/env':406,1450,1976 '0.0.0.0':1743,1851 '1':292,314,333,777,1056,1163,1516,2087,2126,2162,2204 '1.0.0':382,431 '10':250,1200 '100':884,1221 '10x':209 '12.0.0':388,402 '127.0.0.1':1729,1846 '2':683,799,1169,1265,2092,2130,2169,2209 '2024':1473,1479 '3':823,1173,2096,2135,2173,2215 '30':215 '3000':1728,1734,1742 '4':845,1176,2101,2140,2180,2220 '5':1181,2106,2143,2185,2225 '5.3.0':392 '50':1274 '6':1186,1528,2110 '7':1192 '8.0.0':395 '9.2.0':398 'abandon':1383,1523,1543,1551 'absolut':945,1779,1785 'access':1511,1578,1586 'accident':1611 'accord':1407 'action':446,1793,1816,1844,1867,1893,1915,1949,1974,1999 'actual':902,1253 'ad':1132 'add':323,802,826,847,1126,1279,1281,1286,1868,1894,1916,1975,2000,2102,2136,2181,2221 'ai':246,2060,2065,2069,2148,2158,2165 'ai-pow':2068,2147 'ai-wrapper-product':2064,2157 'alway':1720 'analyt':855 'answer':254 'api':1580,1623,1668,1677,1680,1698,2043 'apikey':1251 'app':58,525,526,541,592,602,1718,2287 'app.listen':1727,1741 'applic':166 'approach':1425 'architect':74 'architectur':138,352,545,1415 'archiv':1545 'argument':389 'art':68 'ask':874,1289,2334 'assum':952,1384 'async':447 'auth':957,988 'autoincr':733 'autom':140,175,2034,2040,2041,2114,2123,2134,2244,2292 'await':1493 'backend':2047,2048,2124,2245 'bad':230,1011,1673 'base':367,2032,2058 'basic':339,808,838 'becam':95 'becom':1096,1144,1324,2075 'behavior':1305 'believ':76 'benefit':553 'best':31,78,586,1160 'better':691,699,1534 'better-sqlite3':690,698 'bin':383 'bin/cli.js':405 'binari':513 'bind':1637,1721,1837 'bookmarklet':2206 'bot':2051,2054 'bound':1826 'boundari':2342 'break':943,1131,1363,1489,1598 'brew':1059 'broke':1369 'broken':1334,1499 'browser':599,2021,2026,2031,2190,2200,2239 'browser-bas':2030 'browser-extension-build':2025,2199,2238 'bug':1124 'build':7,21,42,103,120,181,353,364,538,1406,2029,2088,2131,2170,2205,2253,2298 'builder':4,18,2028,2055,2081,2120,2156,2198,2202,2241 'built':86,1331,1364,1393,1924 'bundl':1442 'capabl':145 'case':322,1143,2179 'catch':1048,1495 'caus':1994 'chalk':391,413,415 'chang':1238,1306,1360 'channel':854 'characterist':780 'charg':2013 'check':983,1031,1777 'checkdep':1039,1057 'checklist':1749 'child':1036 'chrome':2023 'chrome/firefox':2223 'clarif':2336 'claud':2062 'clear':1547,2309 'cli':59,133,160,350,369,373,454,464,493,610,1436,1874,1880,1899,2072,2089,2280 'cli.command':468 'click':458,461 'click.echo':486 'click.group':462 'click.option':469,474 'cmd':1040,1045,1051 'code':1482,1584,1607,1626,1666,1765,1942 'collabor':577,2007 'color':393 'come':80 'command':355,387,409,411,419,433,937,1178,1900 'command-lin':354,1177 'commit':1655 'common':964,1619 'competit':892 'complex':496,588,687 'conf':401 'config':344,403,811,991,1103,1110,1147,1158,1167,1171,1187,1193,1243,1631,1659,1682,1690,1753,1813,1822 'config.apikey':1700 'config.json':1696 'configur':1095,1156 'confus':1115,1995 'consid':348,2186 'consider':1065 'consol':1931 'console.error':1049,1052,1497,1502,1503,1507 'console.log':1730 'const':416,640,646,709,747,1012,1024,1071,1075,1079,1205,1667,1676,1689,1697,1717 'constant':123 'contain':1650 'conveni':1257 'convert':1453,2216 'cool':240 'core':1433 'cost':562 'could':247,1241 'cover':52 'creat':717,723,738 'credenti':1589,1605,1661,1752,1759,1802,1808 'criteria':2345 'critic':1804 'cron':2036,2138 'cross':830,1005,1063 'cross-platform':829,1004,1062 'current':742 'custom':8,22,1233 'daili':285,881,2183 'darwin':1078 'data':305,533,557,641,647,650,657,664,669,672,675,678,681,1400,1418,1464,1504,1513,1553,1576,1594,1768 'data.db':716 'data.json':652,1029 'databas':696,712,2045 'datafil':1013,1025 'datetim':740 'day':211,291,797,821 'db':710 'db.exec':722 'db.prepare':749 'debug':1930,1938,1951 'decis':1140 'declar':977 'def':463,480 'default':741,1165,1196,1204,1206,1321 'defaultproject':1255 'degrad':1485 'deleg':2008 'delet':1559 'dep':982,1430,1434,1443,1467 'depend':386,1030,1356,1368,1404,1417,1423 'describ':257,2313 'descript':423,437,466,1895 'design':1381 'desktop':591,597 'dev':502,507 'develop':134,162 'differ':1540 'dir':642,651,673,676 'direct':1972 'directori':1188 'discov':46 'distribut':494,1444 'do-th':434 'doc':340 'docker':517 'document':850,1373,1447,1909 'doesn':226 'dogfood':70,172 'dozen':87 'edg':321,905,1142 'electron':589 'embarrass':899 'enough':1223 'env':973,994,1628 'environ':912,1174,1314,1674,1790,1810,2325 'environment-specif':1313,2324 'err':1496 'err.message':1501 'error':307,788,809,834,936,940,1500,1853,1861,1872 'even':1645 'everi':217,311,1123,1141 'everyon':516 'evolut':144,171,757,774 'execsync':1034,1043 'execut':1971 'exist':229,727,893,1122,1533,1537 'existssync':629,656,671 'experi':266 'expert':5,19,2330 'expertis':130 'explain':804 'export':1552 'expos':1229,1574,1595,1634,1744,1834 'exposur':1612 'express':1714,1716,1719 'extens':2022,2024,2027,2193,2201,2219,2240 'extern':1821 'f':487 'fail':917,930,1490 'fals':1227 'fast':121,744 'fear':1137 'featur':325 'feedback':2098 'ffmpeg':1058,1061,1469 'file':612,624,648,658,665,679,812,992,1111,1148,1172,1191,1244,1632,1660,1683,1754,1814,1823,1983 'first':15,29,57,137,165,524,544,549,720 'fit':113 'fix':960,968,1125,1154,1341,1377,1614,1792,1815,1843,1866,1892,1914,1948,1973,1998 'flag':478,1128,1180,1216,2006 'forev':567 'forget':1119,1887 'format':1212,1421,1556 'found':935,939 'friend':608 'friends/colleagues':2095 'fs':631,1688 'function':653,667,1038 'fundament':1304 'futur':342,1386,1884,1912 'future-you':1385 'get':2097 'git':1591,1654,1772 'gitignor':1658,1684,1756,1824 'go':1520 'good':203,903,1015,1222,1320 'gpt':2061 'grace':1484,1544,1871 'grow':63,758 'handl':308,319,789,835,1854,1862 'hard':575 'hardcod':302,347,785,815,944,969,1093,1751,1778,1784,1801,1807 'hasn':1345 'haven':1524 'help':337,1491,1876,1883,1897,2167 'hierarchi':1159 'high':1569,1831 'histori':1592,1773 'homebrew':508 'homedir':633,644,706,714,1017,1027,1209,1694,1788 'hour':795 'huge':1113 'id':729 'identif':142 'identifi':200,2127,2163 'ignor':1047 'imag':518 'imagin':1292 'impli':2252,2259,2265,2272,2279,2285,2291,2297 'import':408,412,460,626,632,636,695,701,705,1016,1020,1033,1067,1085,1440,1685,1713 'indexeddb':600 'info':1269 'infrastructur':2049 'inheritance/merging':1194 'initi':578 'input':1609,1642,1648,2339 'inquir':397 'instal':504,827,950,987,1053,1060,1470 'installhint':1041,1054 'instant':563 'instead':345,813,1091,1134,1198,1849 'instruct':828 'integ':730 'integr':860 'interact':399,1182 'interest':1371 'interfac':1829 'islinux':1080 'ismac':1076 'issu':966,967 'iswindow':1072 'itch':41,51,153,180,196,202,204,231,2268 'itch-to-tool':195 'item':660,728,748,752 'iter':122,2100,2146 'javascript':375,619,689,1010,1032,1066,1197,1246,1449,1486,1663,1705 'join':637,643,649,702,713,1021,1026,1208,1693 'json':611,623,1213,1263 'json.parse':662,1691 'json.stringify':680 'keep':1248 'key':732,1581,1624,1669,1678,1681,1699 'know':101 'land':848 'larger':1149 'last':359,1471 'latenc':565 'later':1562 'launch':2111 'launcher':2017,2085,2237 'least':116 'left':1933,1940 'let':1519 'level':1959 'lib':1007 'lightweight':596 'limit':2301 'line':312,356,429,1179 'linux':1082 'llm':2063 'loaddata':654 'local':56,136,164,523,543,548,617,2286 'local-first':55,135,163,522,542,547 'localhost':1639,1702,1723,1733,1839,1848 'localhost-on':1701 'locat':1505 'lock':1438 'log':1649,1653,1932,1939,1947,1952 'logformat':1270 'logger':1957 'logic':450 'loglevel':1268 'logtimestamp':1272 'longer':1532 'lost':1370 'low':500,505,603,609,615,1327,1878,1905,1936,1964,1988 'mac':511 'machin':793,819,928 'main':492,1256 'make':961,1105,1139 'manag':1662 'mani':1102 'manual':208,278,1462,1510 'market':112,244 'match':2310 'maxitem':1220 'mean':106 'medium':510,515,519,593,598,914,1099,1782,1856 'mental':1604 'mention':1758,2250,2257,2263,2270,2277,2283,2289,2295 'messag':810,1783,1805,1832,1857,1873,1879,1906,1937,1965,1989 'method':495 'methodolog':154 'micro':1311,2015,2083,2235 'micro-prefer':1310 'micro-saas-launch':2014,2082,2234 'might':336,1294,1560 'minim':1250,1416,1422,2171 'minut':216,251 'miss':981,1050,1852,1961,1967,2347 'mistak':1620 'mitig':1622 'mkdirsync':674 'mobil':607 'mobile-friend':606 'monet':862,2011 'monitor':2144 'month':332,866,1349,1529 'move':1817 'multipl':1190 'must':270,279 'my-tool':378 'mytool':384,422,645,715,1028,1210,1695 'n':471 'name':377,421,470,482,489,491,734 'need':327,1168,1232,1254,1468 'network':1588,1636,1746,1836 'never':1664,1735 'new':418,711 'nice':1301 'node':407,501,1451,1977 'node.js':372,694 'note':1549 'npm':498 'null':682,737 'number':837 'off':572 'offlin':529,555 'often':33 'old':1366 'one':117,261,428,1219 'oper':1859 'opf':605 'opinion':1136,1195 'option':441,448,584,1104,1117,1121,1133,1146,1201,1276,1280,1282,2105 'ora':394 'os':635,708,996,1001,1019,1070 'os-specif':995 'os.homedir':1795 'os/shell':954 'other':47,94,338,873,887,932,2228 'outdat':1357 'output':445,1211,2319 'outputcolor':1266 'outputdir':1207 'outputformat':1262 'outputind':1264 'package.json':376,2003 'page':849 'pain':184 'pars':390 'pass':467 'path':303,639,704,775,933,946,970,1008,1023,1083,1088,1763,1780,1786,1800 'path.join':1797 'pattern':176,1245,1448 'pay':889 'payment':859,2109 'peopl':233 'per':210 'perfect':109 'permiss':2340 'person':2,16,36,72,89,93,146,158,174,183,192,539,551,770,778,1322,1379,1563,1572,1593,1617,1725,1739,1762,1841,2019,2079,2113,2118,2150,2154,2196,2260 'personal-tool-build':1,2078,2117,2153,2195 'pick':1202,1218,1318 'pip':503 'platform':580,831,1006,1064,1068,1073,1077,1081 'platform-specif':579 'point':185 'polish':126 'portabl':963,965,1009,1799 'postgr':2046 'potenti':1806 'power':2070,2149 'practic':173 'prefer':1312 'pretti':1271 'primari':731 'privaci':857 'privacy-respect':856 'probabl':248 'problem':14,28,83,141,259,268,297,885,1530,2214,2275 'process':199,481,484,488,1037,1460 'process.env.my':1679 'process.env.var':1819 'process.exit':1055,1515 'product':32,65,96,111,147,170,540,756,764,846,870,2018,2067,2076,2160 'product-market':110 'program':417,420,432 'program.parse':452 'promis':773 'prompt':400,985,1183,2175 'proper':833,1946,1956,2218 'prototyp':54,132,156 'prove':128 'public':824,2112 'publish':499 'pwa':604 'python':453,456,506 'python3':1979 'queri':746 'question':253 'rapid':53,131,155 're':898 'reach':497 'readfilesync':627,663,1686,1692 'readm':803,1408,1757,1903,1908,1917 'real':82,201,763 'realli':1231 'reason':1203 'rebuild':1539 'recommend':459,959,1153,1376,1613 'relat':1297,2229 'releas':514 'reli':947 'reliabl':318 'rememb':1352,1390 'remov':1943,1950 'repeat':1290 'repetit':2128 'repo':1770 'requir':263,472,2338 'respect':858 'results/logs':2142 'return':659,661 'review':1771,2331 'risk':1621 'robust':331 'role':71 'run':721,1347,1731 'runmainfeatur':1494 'saa':2012,2016,2084,2236 'safeti':2341 'sanit':1652 'savedata':668 'scope':2312 'scratch':38,150,177,2266 'scratch-your-own-itch':149 'script':61,139,168,293,315,613,754,760,779,916,929,1344,1432,1960,1966,2132 'script-to-product':167 'secret':1651,1657,1775 'secur':1566,1615 'security/auth':1296 'select':750 'self':1446,1913 'self-docu':1445 'sell':2010 'sensit':1575,1767 'sentenc':262 'sep':1086,1090 'separ':1084 'server':561,1704,1825,1833,2044 'set':2107 'setup':1760,2042 'sever':913,1098,1326,1568,1781,1803,1830,1855,1877,1904,1935,1963,1987 'share':349,922,1748,2093,2187,2226 'shareabl':800 'sharp':904 'shebang':980,1962,1968 'shell':976,978 'show':772 'shutdown':569 'sign':867,1521 'signal':871 'similar':818 'simpl':616,621,1414,1431 'singl':1170 'site':851 'situat':915,1100,1328,1570 'sk':1671 'sk-xxx':1670 'skill':2077,2116,2152,2194,2230,2304 'skill-personal-tool-builder' 'smart':1164 'solv':11,25,276,295,883,2212,2273 'someon':1242,1293 'someth':485 'sourc':1583 'source-sickn33' 'spare':1185 'specif':581,911,975,997,1315,2326 'spinner':396 'sqlite':590,595,684 'sqlite3':692,700 'stack':371,374,455,583,585,2115 'stage':776,798,822,844 'standard':1420,1555 'start':34,190,289 'state':1548 'stay':92,558 'stdio':1046 'still':328,1475 'stop':2332 'storag':404,618,625 'store':2141,2224 'strategi':1424 'strength':872 'strong':877,882,886,891,896 'substitut':2322 'success':2344 'suck':895 'support':832,853 'sustain':1378 'symptom':924,1109,1343,1579 'sync':573,1858 'synchron':745 'tabl':718,724 'take':213 'tame':1155 'tap':509 'task':2129,2164,2308 'tauri':594 'tech':520 'telegram':2050,2053,2057 'telegram-bas':2056 'telegram-bot-build':2052 'termin':366 'terminal-bas':365 'test':252,839,998,2328 'text':735 'thing':436,440,1488 'thousand':99 'time':218,794,820,840,863 'timestamp':743 'token':958,989 'tool':3,9,17,23,37,60,73,79,90,143,148,161,193,198,334,351,357,368,370,380,465,552,622,688,771,801,825,906,951,962,1107,1152,1323,1329,1380,1437,1441,1481,1498,1535,1564,1573,1585,1618,1633,1708,1726,1740,1842,1901,1984,2020,2033,2059,2071,2073,2080,2119,2151,2155,2191,2197,2255,2261,2281 'top':1981 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'track':1992 'trade':571 'trade-off':570 'treat':2317 'tri':275,920,1042,1492 'trigger':2009,2037,2137 'true':473,479,1267,1273 'try/catch':1865,1869 'tune':2174 'two':843 'ugli':290,329 'ui':299,1712,2104 'understand':310 'unmaintain':1325 'unmanag':1097 'unus':1108 'updat':1997 'use':97,129,159,188,283,362,457,536,767,783,879,955,971,990,1003,1089,1184,1428,1472,1526,1627,1787,1794,1809,1845,1890,1928,1945,1954,2178,2189,2248,2302 'user':118,512,521,852,1114,1288,2249,2256,2262,2269,2276,2282,2288,2294 'userscript':2208 'usual':232 'utf8':666 'v':442,476 'valid':1610,1643,1644,1776,2210,2327 'valu':786 'var':974,1629 'variabl':1175,1675,1791,1811 've':85 'verbos':443,444,475,483,1226 'version':381,430,836,1439,1986,1991,2001,2005 'vulner':1567 'want':235,1236,1295,1339,1561 'web':601,1711,2103 'webhook':2139 'week':269,313,841,864 'well':2232 'win32':1074 'wish':220 'without':1860,1875,1902,1985 'won':1388,1969 'work':301,317,528,554,566,582,790,816,908,925,1355,1397,1476,2231 'workflow':1358,1367,2035,2039,2086,2122,2125,2161,2184,2203,2243 'workflow-autom':2038,2121,2242 'worst':1162 'would':238,281,888,1234,1538 'wrap':1863 'wrapper':2066,2159,2172 'writefilesync':628,677 'x':221,1454 'xxx':1252,1672 'y':224,1456 'yes':272,288 'z':1459 'zero':306,1429","prices":[{"id":"7e96322c-73a9-4ffa-9837-16a69d80e638","listingId":"079d09e0-fd59-48d8-8b37-84eec417f99f","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:42:21.248Z"}],"sources":[{"listingId":"079d09e0-fd59-48d8-8b37-84eec417f99f","source":"github","sourceId":"sickn33/antigravity-awesome-skills/personal-tool-builder","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/personal-tool-builder","isPrimary":false,"firstSeenAt":"2026-04-18T21:42:21.248Z","lastSeenAt":"2026-04-23T00:51:23.367Z"}],"details":{"listingId":"079d09e0-fd59-48d8-8b37-84eec417f99f","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"personal-tool-builder","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34616,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-22T06:40:00Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"35abce909d20398338e3bd88571fdd9582603612","skill_md_path":"skills/personal-tool-builder/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/personal-tool-builder"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"personal-tool-builder","description":"Expert in building custom tools that solve your own problems first."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/personal-tool-builder"},"updatedAt":"2026-04-23T00:51:23.367Z"}}