I Built 15 CLI Tools in One Day (And You Can Too)
How I went from zero to a complete developer toolkit using AI-assisted development
The Challenge
Last week, I set myself an ambitious goal: build 15 useful CLI tools in a single day. Not toy projects. Not "hello world" scripts. Real tools that solve real problems developers face every day.
The result? 15 production-ready CLI tools, complete with documentation, installation scripts, and a unified distribution strategy.
Here's how I did it — and how you can replicate this approach for your own projects.
Why CLI Tools?
Command-line tools are the unsung heroes of developer productivity. They're:
- Fast: No GUI overhead, instant execution
- Composable: Pipe them together for complex workflows
- Automatable: Perfect for CI/CD pipelines
- Universal: Work on any platform with a terminal
But building 15 in one day? That sounds impossible. Unless you have a system.
The System: AI-Assisted Rapid Development
Phase 1: Problem Identification (30 minutes)
I started by listing every repetitive task that annoys me as a developer:
- Setting up new projects (dependencies, configs, boilerplate)
- Writing README files (boring but necessary)
- Generating .gitignore files (always look up the same patterns)
- Creating Docker Compose configurations
- Writing GitHub Actions workflows
- Managing environment variables across projects
- Analyzing log files
- Testing APIs without opening Postman
- Generating commit messages
- Code review before committing
- Finding GitHub bounties to work on
- Formatting JSON
- Managing API keys securely
- Initializing projects with best practices
- Reviewing code with AI assistance
Each of these became a tool.
Phase 2: Architecture Decisions (15 minutes)
To move fast, I needed consistency. Every tool follows the same pattern:
#!/usr/bin/env python3
"""Tool Name - One-line description."""
import argparse
import sys
from pathlib import Path
def main():
parser = argparse.ArgumentParser(description="Tool description")
parser.add_argument("--flag", help="What it does")
args = parser.parse_args()
# Tool logic here
if __name__ == "__main__":
main()
Key decisions:
- Python 3.8+ for universal compatibility
- Click for CLI frameworks (consistent UX)
- Single-file executables where possible
- pip-installable packages for complex tools
- MIT license for everything
Phase 3: Rapid Development (6 hours)
Here's where AI assistance becomes crucial. I used a structured approach:
For each tool:
- Write a detailed specification (5 minutes)
- Generate core logic with AI assistance (10 minutes)
- Add error handling and edge cases (10 minutes)
- Write tests (10 minutes)
- Create documentation (5 minutes)
Total per tool: ~40 minutes
Let me show you three examples from the toolkit:
Tool Showcase
1. DevSetup CLI - Project Initialization Made Easy
Problem: Every new project requires the same setup: virtual environment, git init, pre-commit hooks, initial commit.
Solution: One command does it all.
$ devsetup --python --node --git --pre-commit
✓ Created Python virtual environment
✓ Initialized git repository
✓ Installed pre-commit hooks
✓ Created initial commit
Project ready in 12 seconds
Key features:
- Auto-detects project type (Python, Node, Rust, Go)
- Sets up virtual environments
- Configures pre-commit hooks
- Creates sensible .gitignore
- Generates initial README
Code snippet:
def detect_project_type(path: Path) -> str:
"""Detect project type based on files present."""
if (path / "Cargo.toml").exists():
return "rust"
elif (path / "package.json").exists():
return "node"
elif (path / "requirements.txt").exists() or (path / "pyproject.toml").exists():
return "python"
elif (path / "go.mod").exists():
return "go"
return "unknown"
2. Code Review CLI - AI-Powered Pre-Commit Review
Problem: Bugs slip through code review. By the time someone catches them, they're already in the codebase.
Solution: AI review before every commit.
$ codereview --staged
🔍 Analyzing staged changes...
⚠️ Potential SQL Injection in auth.py:42
cursor.execute(f"SELECT * FROM users WHERE id = {user_id}")
Suggested fix:
cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,))
✓ No other issues found
Commit anyway? [y/N]: n
Key features:
- Analyzes staged changes before commit
- Detects security issues, bugs, and anti-patterns
- Integrates with pre-commit hooks
- CI/CD integration for automated review
- Supports custom rule sets
Real-world impact: This tool caught a potential SQL injection in my own code that would have cost hours to fix in production.
3. GitHub Bounty Hunter - Find Paid Issues Fast
Problem: Finding GitHub issues that pay bounties requires manual searching across multiple repositories.
Solution: Automated bounty discovery.
$ bounty-hunter --min-reward 50 --language python
🔍 Scanning for bounties...
Found 3 opportunities:
1. rustchain/rustchain #426
Reward: 50 RTC (~$5)
Issue: Miner Setup Wizard
Difficulty: medium
2. solfoundry/solfoundry #2303
Reward: 60 tokens
Issue: wRTC Bridge Dashboard
Difficulty: hard
3. illbnm/homelab-stack #14
Reward: $280 USDT
Issue: HomeLab Testing Suite
Difficulty: hard
Total potential earnings: $290+
Key features:
- Searches multiple bounty sources
- Filters by reward amount and difficulty
- Shows estimated time to complete
- Tracks your bounty submissions
- Exports to CSV for tracking
The Complete Toolkit
Here's the full list of 15 tools I built:
| Tool | Purpose | Time Saved |
|---|---|---|
| DevSetup CLI | Project initialization | 30 min/project |
| Code Review CLI | Pre-commit AI review | 2 hrs/bug caught |
| GitHub Bounty Hunter | Find paid issues | 1 hr/day |
| README Generator | Auto-generate READMEs | 20 min/project |
| .gitignore Generator | Smart .gitignore files | 5 min/project |
| Commit Generator | AI commit messages | 1 min/commit |
| Docker Compose Generator | Container configs | 15 min/setup |
| API Key Manager | Secure key storage | 10 min/rotation |
| GitHub Actions Generator | CI/CD workflows | 30 min/setup |
| Project Initializer | Full project scaffolding | 1 hr/project |
| API Tester | Terminal API testing | 5 min/test |
| Environment Manager | Env var management | 10 min/switch |
| Log Analyzer | Smart log parsing | 30 min/analysis |
| JSON Formatter | Web-based JSON tool | N/A (web) |
| AI Receptionist | Telegram bot template | 4 hrs/setup |
Total time saved per week: 10+ hours for active developers
Technical Deep Dive: How They Work
Shared Architecture
All tools share a common foundation:
python
# cli_base.py - Shared utilities
from pathlib import Path
import yaml
import json
from typing import Dict, Any
class CLITool:
"""Base class for all CLI tools."""
def __init__(self, name: str, version: str):
self.name = name
self.version = version
self.config_dir = Path.home() / ".config" / name
self.config_dir.mkdir(parents=True, exist_ok=True)
def load_config(self) -> Dict[str, Any]:
config_file = self.config_dir / "config.yaml"
if config_file.exists():
return yaml.safe_load(config_file.read_text())
return {}
def save_config(self, config: Dict[str, Any]):
config_file = self.config_dir / "config.yaml"
config_file.write
Top comments (0)