DEV Community

Can Koylan
Can Koylan

Posted on

I Built 15 CLI Tools in One Day (And You Can Too)

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:

  1. Setting up new projects (dependencies, configs, boilerplate)
  2. Writing README files (boring but necessary)
  3. Generating .gitignore files (always look up the same patterns)
  4. Creating Docker Compose configurations
  5. Writing GitHub Actions workflows
  6. Managing environment variables across projects
  7. Analyzing log files
  8. Testing APIs without opening Postman
  9. Generating commit messages
  10. Code review before committing
  11. Finding GitHub bounties to work on
  12. Formatting JSON
  13. Managing API keys securely
  14. Initializing projects with best practices
  15. 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()
Enter fullscreen mode Exit fullscreen mode

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:

  1. Write a detailed specification (5 minutes)
  2. Generate core logic with AI assistance (10 minutes)
  3. Add error handling and edge cases (10 minutes)
  4. Write tests (10 minutes)
  5. 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
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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+
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Top comments (0)