---
slug: "cli-ify-plugin"
source_type: "readme"
source_url: "https://cdn.jsdelivr.net/gh/frankbria/cli-ify-plugin@main/README.md"
repo: "https://github.com/frankbria/cli-ify-plugin"
source_file: "README.md"
branch: "main"
---
# cli-ify

[![Follow on X](https://img.shields.io/twitter/follow/FrankBria18044?style=social)](https://x.com/FrankBria18044)

Convert Claude Code skills, commands, and agents into standalone CLI tools for Linux/Mac (Bash) and Windows (PowerShell).

## Why CLI-ify?

When building agent skills, there's tension between:
- **API-first design**: Great for programmatic use, hard to debug manually
- **GUI-first design**: Easy for humans, agents can't invoke them

**CLI-first design** solves this: a well-designed CLI is naturally dual-use—humans can invoke it from the terminal, and agents can invoke it via shell commands.

## Installation

### As a Claude Code Plugin

```bash
claude plugin add frankbria/cli-ify-plugin
```

### Manual Installation

```bash
# Clone the repo
git clone https://github.com/frankbria/cli-ify-plugin.git

# Copy skill to your skills directory
cp -r cli-ify-plugin/skills/cli-ifying ~/.claude/skills/
```

## Usage

### Mode 1: Convert Existing Capabilities

Convert an existing skill, command, or agent to a CLI:

```bash
# In Claude Code, ask:
"CLI-ify the validating-pre-commit skill for Linux and Windows"

# Or use natural invocation:
"Convert the fhb:update-readme command to a standalone CLI"
```

### Mode 2: Create from Prompt

Create a new CLI from a natural language description:

```bash
# In Claude Code:
"CLI-ify: Create a CLI that syncs all git repos in a directory"

# Claude will ask Socratic questions to scope the CLI properly
```

## Philosophy

The skill follows Unix philosophy for CLI design:

- **Do one thing well**: Each CLI has a single, focused purpose
- **Composability**: JSON output, meaningful exit codes, works with pipes
- **Dual-use**: Same interface works for humans and AI agents
- **Debuggable**: Run manually to test, inspect output

### CLI Design Principles

Generated CLIs include:
- `--help` documentation
- Subcommands for operations
- JSON output option (for scripting)
- Meaningful exit codes (for `&&` chaining)
- Environment variable configuration
- TTY detection (pretty output for humans, JSON for pipes)

## Example Output

The `examples/` directory contains sample CLIs generated by this skill, demonstrating the output format and design patterns:

### verify-impl

A CLI generated from the `verifying-implementation` skill. Scans codebases for incomplete implementations.

```bash
# Example usage
verify-impl src/

# Sample text output (TTY detected)
═══════════════════════════════════════════════════════════
  Implementation Verification Report
═══════════════════════════════════════════════════════════

Summary:
  ● Critical issues: 2
  ● TODO/FIXME markers: 5

Critical: NotImplementedError / Not Implemented
  → src/auth.py:45: raise NotImplementedError("OAuth flow")
  → src/payments.py:123: throw new Error("not implemented")

───────────────────────────────────────────────────────────
✗ NOT READY - Critical unimplemented functionality found
```

```bash
# Sample JSON output (piped or --output json)
{
  "summary": {
    "total": 7,
    "critical": 2,
    "todos": 5,
    "severity": "critical"
  },
  "findings": {
    "not_implemented": ["src/auth.py:45:...", "src/payments.py:123:..."],
    "todos": ["src/utils.py:12:// TODO: optimize", ...]
  }
}
```

**Exit codes:**
- `0`: Clean - ready to commit
- `1`: Warnings (TODOs, FIXMEs, skipped tests)
- `2`: Critical (NotImplementedError, fake implementations)
- `3`: Invalid arguments

To use this example CLI, copy it to your PATH:
```bash
cp examples/verify-impl ~/.local/bin/
chmod +x ~/.local/bin/verify-impl
```

## When NOT to CLI-ify

Some capabilities should remain as Claude skills:

| Keep as Skill | Why |
|---------------|-----|
| Code review | Requires semantic understanding |
| Explanation/mentoring | Requires language generation |
| Refactoring decisions | Requires judgment |
| Multi-turn workflows | Requires conversation |

The skill will push back and explain why when you try to CLI-ify something unsuitable.

## Repository Structure

```
cli-ify-plugin/
├── README.md
├── plugin.json
├── skills/
│   └── cli-ifying/
│       ├── SKILL.md                 # Main skill instructions
│       ├── references/              # Supporting documentation
│       │   ├── cli-design-principles.md
│       │   ├── conversion-examples.md
│       │   ├── socratic-discovery-patterns.md
│       │   └── suitability-assessment.md
│       └── templates/               # Script templates
│           ├── bash-template.sh
│           └── powershell-template.ps1
└── examples/                        # Example CLIs generated by this skill
    ├── verify-impl                  # Bash version
    └── verify-impl.ps1              # PowerShell version
```

## Contributing

1. Fork the repository
2. Create a feature branch
3. Add improvements to the skill or new example CLIs
4. Submit a pull request

## License

MIT
