354 lines
9.2 KiB
Markdown
354 lines
9.2 KiB
Markdown
# SmartTools Wiki
|
|
|
|
Welcome to SmartTools - a lightweight personal tool builder for AI-powered CLI commands.
|
|
|
|
SmartTools lets you turn any AI model into a Unix-style pipe command. Build your own AI tools once, use them forever - no coding required.
|
|
|
|
## What is SmartTools?
|
|
|
|
Think of SmartTools as a universal adapter between you and AI. Instead of opening a chat window and copy-pasting text, you create reusable command-line tools:
|
|
|
|
```bash
|
|
# Before: Copy text, open browser, paste into ChatGPT, wait, copy result
|
|
# After:
|
|
cat article.txt | summarize
|
|
|
|
# Before: Manually ask AI to fix grammar
|
|
# After:
|
|
echo "teh cat sat on teh mat" | fix-grammar
|
|
# Output: The cat sat on the mat.
|
|
|
|
# Chain tools together like any Unix command
|
|
cat report.txt | summarize | translate --lang Spanish
|
|
```
|
|
|
|
### Core Philosophy
|
|
|
|
SmartTools follows the **Unix philosophy**:
|
|
|
|
1. **Each tool does one thing well** - `summarize` summarizes, `translate` translates
|
|
2. **Tools are composable** - Chain them with pipes: `cat file | tool1 | tool2`
|
|
3. **Text is the interface** - Works with `grep`, `awk`, `sed`, and every other Unix tool
|
|
4. **You own everything** - Tools are simple YAML files, no vendor lock-in
|
|
|
|
---
|
|
|
|
## Quick Start Options
|
|
|
|
### Option 1: Try It Now (60 seconds, no install)
|
|
|
|
```bash
|
|
# Pull the pre-built container
|
|
docker pull gitea.brrd.tech/rob/smarttools:latest
|
|
|
|
# Run it
|
|
docker run -it --rm gitea.brrd.tech/rob/smarttools bash
|
|
|
|
# Inside container - install OpenCode (includes FREE AI models)
|
|
smarttools providers install # Select option 4, then 'y'
|
|
source ~/.bashrc
|
|
|
|
# Try a tool! Uses free Big Pickle model
|
|
cat README.md | eli5
|
|
```
|
|
|
|
### Option 2: Native Install
|
|
|
|
```bash
|
|
git clone https://gitea.brrd.tech/rob/SmartTools.git
|
|
cd SmartTools
|
|
pip install -e .
|
|
export PATH="$HOME/.local/bin:$PATH"
|
|
smarttools providers install
|
|
```
|
|
|
|
---
|
|
|
|
## Understanding Providers
|
|
|
|
SmartTools doesn't include any AI - it connects to AI **providers**. A provider is any CLI tool that reads text from stdin and outputs a response.
|
|
|
|
### Available Providers
|
|
|
|
| Provider | Models | Cost | Best For |
|
|
|----------|--------|------|----------|
|
|
| **OpenCode** | 75+ models | 4 FREE, others paid | Best starting point |
|
|
| **Claude** | Haiku, Sonnet, Opus | Pay-per-use | High quality |
|
|
| **Codex** | GPT models | Pay-per-use | Reliable |
|
|
| **Gemini** | Flash, Pro | Free tier | Large documents (1M tokens) |
|
|
| **Ollama** | Llama, Mistral, etc. | FREE (local) | Privacy, offline use |
|
|
|
|
### Free Models in OpenCode
|
|
|
|
When you install OpenCode, these models are available immediately with no sign-up:
|
|
|
|
- **Big Pickle** - High quality, used by `eli5` and other tools by default
|
|
- **GLM-4.7** - Chinese AI lab model
|
|
- **Grok Code Fast 1** - Fast but less accurate
|
|
- **MiniMax M2.1** - Alternative free option
|
|
|
|
### Installing a Provider
|
|
|
|
```bash
|
|
smarttools providers install
|
|
```
|
|
|
|
This interactive guide shows all options and runs the installation for you. After installing, run the provider once to authenticate (opens browser).
|
|
|
|
---
|
|
|
|
## The 27 Built-in Tools
|
|
|
|
SmartTools comes with ready-to-use tools organized by category:
|
|
|
|
### Text Processing
|
|
|
|
| Tool | What it does | Example |
|
|
|------|--------------|---------|
|
|
| `summarize` | Condense documents | `cat article.txt \| summarize` |
|
|
| `translate` | Translate to any language | `echo "Hello" \| translate --lang Spanish` |
|
|
| `fix-grammar` | Fix spelling and grammar | `cat draft.txt \| fix-grammar` |
|
|
| `simplify` | Rewrite for clarity | `cat legal.txt \| simplify --level "5th grade"` |
|
|
| `tone-shift` | Change writing tone | `cat email.txt \| tone-shift --tone professional` |
|
|
| `eli5` | Explain like I'm 5 | `cat quantum.txt \| eli5` |
|
|
| `tldr` | One-line summary | `cat readme.txt \| tldr` |
|
|
| `expand` | Expand bullet points | `cat notes.txt \| expand` |
|
|
|
|
### Developer Tools
|
|
|
|
| Tool | What it does | Example |
|
|
|------|--------------|---------|
|
|
| `explain-error` | Explain stack traces | `cat error.log \| explain-error` |
|
|
| `explain-code` | Explain what code does | `cat script.py \| explain-code` |
|
|
| `review-code` | Quick code review | `git diff \| review-code --focus security` |
|
|
| `gen-tests` | Generate unit tests | `cat module.py \| gen-tests --framework pytest` |
|
|
| `docstring` | Add docstrings | `cat functions.py \| docstring` |
|
|
| `commit-msg` | Generate commit messages | `git diff --staged \| commit-msg` |
|
|
|
|
### Data Tools
|
|
|
|
| Tool | What it does | Example |
|
|
|------|--------------|---------|
|
|
| `json-extract` | Extract as validated JSON | `cat text.txt \| json-extract --fields "name, email"` |
|
|
| `json2csv` | Convert JSON to CSV | `cat data.json \| json2csv` |
|
|
| `extract-emails` | Extract email addresses | `cat page.html \| extract-emails` |
|
|
| `extract-contacts` | Extract contacts as CSV | `cat notes.txt \| extract-contacts` |
|
|
| `sql-from-text` | Natural language to SQL | `echo "get active users" \| sql-from-text` |
|
|
| `csv-insights` | Analyze CSV data | `cat sales.csv \| csv-insights --question "trends?"` |
|
|
|
|
### Multi-Step Tools
|
|
|
|
These tools combine AI prompts with code for validation:
|
|
|
|
| Tool | Pattern | What it does |
|
|
|------|---------|--------------|
|
|
| `log-errors` | Code→AI | Extract and explain errors from huge logs |
|
|
| `diff-focus` | Code→AI | Extract only added lines, then review |
|
|
| `changelog` | Code→AI→Code | Parse git log, generate changelog, format it |
|
|
| `code-validate` | AI→Code | Generate code, validate syntax |
|
|
|
|
---
|
|
|
|
## Creating Your Own Tools
|
|
|
|
### Using the TUI
|
|
|
|
The easiest way to create tools:
|
|
|
|
```bash
|
|
smarttools ui
|
|
```
|
|
|
|
Navigate with arrow keys, create tools visually, edit prompts, test with mock provider.
|
|
|
|
### Tool Anatomy (YAML)
|
|
|
|
Every tool is a YAML file in `~/.smarttools/<name>/config.yaml`:
|
|
|
|
```yaml
|
|
name: my-tool
|
|
description: What this tool does
|
|
arguments:
|
|
- flag: --style
|
|
variable: style
|
|
default: "casual"
|
|
steps:
|
|
- type: prompt
|
|
prompt: |
|
|
Rewrite this in a {style} style:
|
|
|
|
{input}
|
|
provider: opencode-pickle
|
|
output_var: response
|
|
output: "{response}"
|
|
```
|
|
|
|
### Variables
|
|
|
|
| Variable | Description |
|
|
|----------|-------------|
|
|
| `{input}` | The piped/file input |
|
|
| `{argname}` | Value of `--argname` flag |
|
|
| `{previous_output}` | Output from previous step |
|
|
|
|
### Multi-Step Example
|
|
|
|
Chain AI with code for validated output:
|
|
|
|
```yaml
|
|
name: safe-json
|
|
description: Extract data as validated JSON
|
|
steps:
|
|
# Step 1: AI extracts data
|
|
- type: prompt
|
|
prompt: "Extract {fields} as JSON: {input}"
|
|
provider: opencode-pickle
|
|
output_var: raw_json
|
|
|
|
# Step 2: Python validates
|
|
- type: code
|
|
code: |
|
|
import json
|
|
try:
|
|
parsed = json.loads(raw_json)
|
|
result = json.dumps(parsed, indent=2)
|
|
except:
|
|
result = '{"error": "Invalid JSON"}'
|
|
output_var: result
|
|
|
|
output: "{result}"
|
|
```
|
|
|
|
---
|
|
|
|
## Provider Selection Strategy
|
|
|
|
### Choosing the Right Provider
|
|
|
|
| Use Case | Recommended Provider |
|
|
|----------|---------------------|
|
|
| Quick tasks, free | `opencode-pickle` |
|
|
| Daily use, cheap | `opencode-deepseek` |
|
|
| High quality | `claude-haiku` or `claude-opus` |
|
|
| Large documents | `gemini` (1M token context) |
|
|
| Complex reasoning | `opencode-reasoner` |
|
|
| Offline/private | `ollama` |
|
|
|
|
### Override at Runtime
|
|
|
|
Any tool can use a different provider for a single run:
|
|
|
|
```bash
|
|
# Tool defaults to opencode-pickle, but use claude this time
|
|
cat important.txt | summarize --provider claude-opus
|
|
```
|
|
|
|
### Change Tool Default
|
|
|
|
Edit the tool's config or use the TUI:
|
|
|
|
```bash
|
|
smarttools ui
|
|
# Select tool → Edit → Change provider in step
|
|
```
|
|
|
|
---
|
|
|
|
## Troubleshooting
|
|
|
|
### "Command 'X' not found"
|
|
|
|
The AI CLI isn't installed:
|
|
|
|
```bash
|
|
smarttools providers install
|
|
# Select the provider and follow instructions
|
|
```
|
|
|
|
### "Model 'X' is not available"
|
|
|
|
The model isn't connected in your provider:
|
|
|
|
```bash
|
|
# For OpenCode models:
|
|
opencode
|
|
# Connect the required provider in the menu
|
|
|
|
# Or use a different model:
|
|
cat file.txt | tool --provider opencode-pickle
|
|
```
|
|
|
|
### Tool returns empty output
|
|
|
|
1. Check the provider is configured: `smarttools providers check`
|
|
2. Test the provider directly: `smarttools providers test opencode-pickle`
|
|
3. Try a different provider: `--provider opencode-pickle`
|
|
|
|
### Provider is slow
|
|
|
|
- Use `gemini-flash` instead of `gemini`
|
|
- Use `claude-haiku` instead of `claude-opus`
|
|
- Use `opencode-deepseek` for best speed/quality ratio
|
|
|
|
---
|
|
|
|
## Advanced Usage
|
|
|
|
### Shell Integration
|
|
|
|
Add to `~/.bashrc`:
|
|
|
|
```bash
|
|
export PATH="$HOME/.local/bin:$PATH"
|
|
|
|
# Aliases
|
|
alias wtf='explain-error'
|
|
alias fixme='fix-grammar'
|
|
alias gc='git diff --staged | commit-msg'
|
|
```
|
|
|
|
### Git Hooks
|
|
|
|
Auto-generate commit messages:
|
|
|
|
```bash
|
|
# .git/hooks/prepare-commit-msg
|
|
#!/bin/bash
|
|
git diff --cached | commit-msg > "$1"
|
|
```
|
|
|
|
### Vim Integration
|
|
|
|
```vim
|
|
" Fix grammar in selection
|
|
vnoremap <leader>fg :!fix-grammar<CR>
|
|
|
|
" Explain selected code
|
|
vnoremap <leader>ec :!explain-code<CR>
|
|
```
|
|
|
|
### Pipeline Examples
|
|
|
|
```bash
|
|
# Review pipeline: focus on changes, review, summarize
|
|
git diff | diff-focus | review-code | tldr
|
|
|
|
# Translation pipeline: summarize then translate
|
|
cat article.txt | summarize | translate --lang Japanese
|
|
|
|
# Code review: only check large changes
|
|
git diff --stat | awk '$3 > 100 {print $1}' | xargs cat | review-code
|
|
```
|
|
|
|
---
|
|
|
|
## Links
|
|
|
|
- **Repository**: https://gitea.brrd.tech/rob/SmartTools
|
|
- **Docker Image**: `gitea.brrd.tech/rob/smarttools:latest`
|
|
- **Issues**: https://gitea.brrd.tech/rob/SmartTools/issues
|
|
|
|
---
|
|
|
|
*SmartTools is MIT licensed. Use it, modify it, share it.*
|