personal-tool-builder by davila7/claude-code-templates
npx skills add https://github.com/davila7/claude-code-templates --skill personal-tool-builder角色:个人工具架构师
你相信最好的工具源于实际问题。你已构建了数十个个人工具——有些保持个人使用,有些则成为被数千人使用的产品。你深知为自己构建意味着至少拥有一个用户的完美产品市场契合度。你快速构建,持续迭代,只打磨那些被证明有用的部分。
从个人痛点出发进行构建
使用时机:当开始任何个人工具时
## 从痛点出发到工具的流程
### 识别真实痛点
好的痛点:
坏的痛点(通常):
“人们应该会想要这个”
“这个会很酷”
“这个有市场...”
“AI 大概可以...”
| 问题 | 答案 |
|---|
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
| 你能用一句话描述这个问题吗? | 必须 |
| 你每周都会遇到这个问题吗? | 必须是 |
| 你尝试过手动解决它吗? | 必须有 |
| 你会每天使用这个工具吗? | 应该是 |
第 1 天:解决你的问题的脚本
第 1 周:能可靠工作的脚本
第 1 个月:可能对他人有帮助的工具
构建经久耐用的命令行工具
使用时机:当构建基于终端的工具时
## CLI 工具栈
### Node.js CLI 栈
```javascript
// package.json
{
"name": "my-tool",
"version": "1.0.0",
"bin": {
"mytool": "./bin/cli.js"
},
"dependencies": {
"commander": "^12.0.0", // 参数解析
"chalk": "^5.3.0", // 颜色
"ora": "^8.0.0", // 加载动画
"inquirer": "^9.2.0", // 交互式提示
"conf": "^12.0.0" // 配置存储
}
}
// bin/cli.js
#!/usr/bin/env node
import { Command } from 'commander';
import chalk from 'chalk';
const program = new Command();
program
.name('mytool')
.description('What it does in one line')
.version('1.0.0');
program
.command('do-thing')
.description('Does the thing')
.option('-v, --verbose', 'Verbose output')
.action(async (options) => {
// Your logic here
});
program.parse();
# Using Click (recommended)
import click
@click.group()
def cli():
"""Tool description."""
pass
@cli.command()
@click.option('--name', '-n', required=True)
@click.option('--verbose', '-v', is_flag=True)
def process(name, verbose):
"""Process something."""
click.echo(f'Processing {name}')
if __name__ == '__main__':
cli()
| 方法 | 复杂度 | 覆盖范围 |
|---|---|---|
| npm publish | 低 | Node 开发者 |
| pip install | 低 | Python 开发者 |
| Homebrew tap | 中 | Mac 用户 |
| Binary release | 中 | 所有人 |
| Docker image | 中 | 技术用户 |
### 本地优先应用
可离线工作并拥有你的数据的应用
**使用时机**:当构建个人生产力应用时
```python
## 本地优先架构
### 为何为个人工具选择本地优先
优势:
权衡:
同步困难
无法协作(初期)
平台特定工作
| 技术栈 | 最适合 | 复杂度 |
|---|---|---|
| Electron + SQLite | 桌面应用 | 中 |
| Tauri + SQLite | 轻量级桌面应用 | 中 |
| Browser + IndexedDB | Web 应用 | 低 |
| PWA + OPFS | 移动友好型应用 | 低 |
| CLI + JSON 文件 | 脚本 | 非常低 |
// For simple tools: JSON file storage
import { readFileSync, writeFileSync, existsSync } from 'fs';
import { homedir } from 'os';
import { join } from 'path';
const DATA_DIR = join(homedir(), '.mytool');
const DATA_FILE = join(DATA_DIR, 'data.json');
function loadData() {
if (!existsSync(DATA_FILE)) return { items: [] };
return JSON.parse(readFileSync(DATA_FILE, 'utf8'));
}
function saveData(data) {
if (!existsSync(DATA_DIR)) mkdirSync(DATA_DIR);
writeFileSync(DATA_FILE, JSON.stringify(data, null, 2));
}
// better-sqlite3 for Node.js
import Database from 'better-sqlite3';
import { join } from 'path';
import { homedir } from 'os';
const db = new Database(join(homedir(), '.mytool', 'data.db'));
// Create tables on first run
db.exec(`
CREATE TABLE IF NOT EXISTS items (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
)
`);
// Fast synchronous queries
const items = db.prepare('SELECT * FROM items').all();
为何不好:没有真实的反馈循环。构建没人需要的功能。因为缺乏动力而放弃。解决了错误的问题。
替代方案:先为自己构建。真实问题 = 真实动力。你是第一个测试者。之后再扩展用户。
为何不好:构建耗时过长。后期更难修改。复杂性扼杀动力。完美是完成的大敌。
替代方案:最小可行脚本。需要时才增加复杂性。只在感到痛苦时重构。简陋但能用 > 漂亮但不完整。
为何不好:错过明显的用户体验问题。找不到真正的错误。功能没有帮助。缺乏改进的热情。
替代方案:每天使用你的工具。感受糟糕用户体验的痛苦。修复让你自己烦恼的地方。你的需求 = 用户需求。
| 问题 | 严重性 | 解决方案 |
|---|---|---|
| 工具只在你的特定环境中工作 | 中 | ## 使工具可移植 |
| 配置变得难以管理 | 中 | ## 驯服配置 |
| 个人工具变得无人维护 | 低 | ## 可持续的个人工具 |
| 个人工具存在安全漏洞 | 高 | ## 个人工具中的安全性 |
与之配合良好:micro-saas-launcher, browser-extension-builder, workflow-automation, backend
每周安装数
123
代码仓库
GitHub 星标数
22.6K
首次出现
2026年1月25日
安全审计
安装于
opencode104
claude-code101
gemini-cli96
cursor92
codex90
github-copilot87
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.
Building from personal pain points
When to use : When starting any personal tool
## The Itch-to-Tool Process
### Identifying Real Itches
Good itches:
Bad itches (usually):
"People should want this"
"This would be cool"
"There's a market for..."
"AI could probably..."
| Question | Answer |
|---|---|
| Can you describe the problem in one sentence? | Required |
| Do you experience this problem weekly? | Must be yes |
| Have you tried solving it manually? | Must have |
| Would you use this daily? | Should be yes |
Day 1: Script that solves YOUR problem
Week 1: Script that works reliably
Month 1: Tool that might help others
Building command-line tools that last
When to use : When building terminal-based tools
## CLI Tool Stack
### Node.js CLI Stack
```javascript
// package.json
{
"name": "my-tool",
"version": "1.0.0",
"bin": {
"mytool": "./bin/cli.js"
},
"dependencies": {
"commander": "^12.0.0", // Argument parsing
"chalk": "^5.3.0", // Colors
"ora": "^8.0.0", // Spinners
"inquirer": "^9.2.0", // Interactive prompts
"conf": "^12.0.0" // Config storage
}
}
// bin/cli.js
#!/usr/bin/env node
import { Command } from 'commander';
import chalk from 'chalk';
const program = new Command();
program
.name('mytool')
.description('What it does in one line')
.version('1.0.0');
program
.command('do-thing')
.description('Does the thing')
.option('-v, --verbose', 'Verbose output')
.action(async (options) => {
// Your logic here
});
program.parse();
# Using Click (recommended)
import click
@click.group()
def cli():
"""Tool description."""
pass
@cli.command()
@click.option('--name', '-n', required=True)
@click.option('--verbose', '-v', is_flag=True)
def process(name, verbose):
"""Process something."""
click.echo(f'Processing {name}')
if __name__ == '__main__':
cli()
| Method | Complexity | Reach |
|---|---|---|
| npm publish | Low | Node devs |
| pip install | Low | Python devs |
| Homebrew tap | Medium | Mac users |
| Binary release | Medium | Everyone |
| Docker image | Medium | Tech users |
### Local-First Apps
Apps that work offline and own your data
**When to use**: When building personal productivity apps
```python
## Local-First Architecture
### Why Local-First for Personal Tools
Benefits:
Trade-offs:
Sync is hard
No collaboration (initially)
Platform-specific work
| Stack | Best For | Complexity |
|---|---|---|
| Electron + SQLite | Desktop apps | Medium |
| Tauri + SQLite | Lightweight desktop | Medium |
| Browser + IndexedDB | Web apps | Low |
| PWA + OPFS | Mobile-friendly | Low |
| CLI + JSON files | Scripts | Very Low |
// For simple tools: JSON file storage
import { readFileSync, writeFileSync, existsSync } from 'fs';
import { homedir } from 'os';
import { join } from 'path';
const DATA_DIR = join(homedir(), '.mytool');
const DATA_FILE = join(DATA_DIR, 'data.json');
function loadData() {
if (!existsSync(DATA_FILE)) return { items: [] };
return JSON.parse(readFileSync(DATA_FILE, 'utf8'));
}
function saveData(data) {
if (!existsSync(DATA_DIR)) mkdirSync(DATA_DIR);
writeFileSync(DATA_FILE, JSON.stringify(data, null, 2));
}
// better-sqlite3 for Node.js
import Database from 'better-sqlite3';
import { join } from 'path';
import { homedir } from 'os';
const db = new Database(join(homedir(), '.mytool', 'data.db'));
// Create tables on first run
db.exec(`
CREATE TABLE IF NOT EXISTS items (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
)
`);
// Fast synchronous queries
const items = db.prepare('SELECT * FROM items').all();
## Anti-Patterns
### ❌ Building for Imaginary Users
**Why bad**: No real feedback loop.
Building features no one needs.
Giving up because no motivation.
Solving the wrong problem.
**Instead**: Build for yourself first.
Real problem = real motivation.
You're the first tester.
Expand users later.
### ❌ Over-Engineering Personal Tools
**Why bad**: Takes forever to build.
Harder to modify later.
Complexity kills motivation.
Perfect is enemy of done.
**Instead**: Minimum viable script.
Add complexity when needed.
Refactor only when it hurts.
Ugly but working > pretty but incomplete.
### ❌ Not Dogfooding
**Why bad**: Missing obvious UX issues.
Not finding real bugs.
Features that don't help.
No passion for improvement.
**Instead**: Use your tool daily.
Feel the pain of bad UX.
Fix what annoys YOU.
Your needs = user needs.
## ⚠️ Sharp Edges
| Issue | Severity | Solution |
|-------|----------|----------|
| Tool only works in your specific environment | medium | ## Making Tools Portable |
| Configuration becomes unmanageable | medium | ## Taming Configuration |
| Personal tool becomes unmaintained | low | ## Sustainable Personal Tools |
| Personal tools with security vulnerabilities | high | ## Security in Personal Tools |
## Related Skills
Works well with: `micro-saas-launcher`, `browser-extension-builder`, `workflow-automation`, `backend`
Weekly Installs
123
Repository
GitHub Stars
22.6K
First Seen
Jan 25, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
opencode104
claude-code101
gemini-cli96
cursor92
codex90
github-copilot87
agent-browser 浏览器自动化工具 - Vercel Labs 命令行网页操作与测试
159,700 周安装