Rubber Ducky
Turn natural language into bash commands without leaving your terminal.
Rubber Ducky is an inline terminal companion that transforms your prompts into runnable shell commands. Paste multi-line context, get smart suggestions, and execute commands instantly.
Quick Start
# Install globally (recommended)
uv tool install rubber-ducky
# Run interactively
ducky
# Quick one-shot
ducky "list all files larger than 10MB in current directory"
# From CLI with options
ducky --model qwen3
ducky --directory src
ducky --local
# Or use uvx (requires -- separator)
uvx rubber-ducky -- --model qwen3
Both ducky and rubber-ducky executables work identically.
Requirements
- Ollama (running locally or using cloud models)
- Python 3.10+
Features
- Natural to Shell - Describe what you want, get the bash command
- Model Flexibility - Switch between local Ollama models and cloud models
- Crumbs - Save and reuse commands with argument substitution
- Piped Input - Pipe output from other commands directly to ducky
- Interactive REPL - Rich terminal experience with history and shortcuts
- Code Context - Preload project code for AI awareness
- Clipboard Support - Copy commands across macOS, Windows, and Linux
Key Concepts
REPL (Interactive Mode)
Launch ducky to start an inline session:
ducky
Key controls:
Enter- Submit promptCtrl+J- Insert newline (for multi-line prompts)Empty Enter- Rerun last command or explain shell outputCtrl+R- Re-run last suggested commandCtrl+S- Copy last command to clipboard!<cmd>- Run shell command immediatelyArrow keys- Browse historyCtrl+D- Exit
Models
Rubber Ducky supports both local and cloud models:
/model- Interactive model selection/local- List local models (localhost:11434)/cloud- List cloud models (ollama.com)- Last used model is saved automatically
Startup flags:
--local/-l- Use local Ollama with qwen3 default--model <name>/-m- Specify model directly
Crumbs
Crumbs are saved command shortcuts. Store frequently-used commands or complex workflows:
>> How do I list all running Python processes?
...
Suggested: ps aux | grep python | grep -v grep
>> /crumb pyprocs
Saved crumb 'pyprocs'!
Invoke crumb:
>> pyprocs
Crumb: pyprocs
Command: ps aux | grep python | grep -v grep
...
With argument substitution:
# Crumb command: git worktree add "../$var-$other" -b $var3
ducky at feature backend develop
# Executes: git worktree add "../feature-backend" -b develop
Usage Guide
Interactive Mode
Default mode. Perfect for development sessions.
ducky
Load code context for better suggestions:
ducky --directory src
Single-Shot Mode
Get one command suggestion and exit.
ducky "find all TODO comments in src/"
Copy to clipboard automatically:
ducky "build and run tests"
Piped Input
Process text from other commands:
cat error.log | ducky "what's wrong here?"
git diff | ducky "summarize these changes"
Run Without Confirmation
Auto-execute suggested commands:
ducky --yolo "restart the nginx service"
Crumbs Quick Reference
| Command | Description |
|---|---|
/crumbs |
List all saved crumbs |
/crumb <name> |
Save last command as crumb |
/crumb add <name> <cmd> |
Manually add crumb |
/crumb del <name> |
Delete crumb |
<name> |
Execute crumb |
/crumb help |
Detailed crumb help |
Argument Substitution:
Crumbs support ${VAR} and $var placeholder styles:
# Create crumb with placeholders
git worktree add "../$var-$other" -b $var3
# Invoke with arguments
ducky at feature backend develop
Both styles are interchangeable.
Command Reference
Inline Commands
| Command | Action |
|---|---|
/help |
Show all commands |
/clear / /reset |
Clear conversation history |
/model |
Select model (interactive) |
/local |
List local models |
/cloud |
List cloud models |
/run / :run |
Re-run last command |
/expand |
Show full output of last shell command |
CLI Flags
| Flag | Description |
|---|---|
--directory <path> / -d |
Preload code from directory |
--model <name> / -m |
Specify Ollama model |
--local / -l |
Use local Ollama (qwen3 default) |
--yolo / -y |
Auto-run without confirmation |
<prompt> |
Single prompt mode (copied to clipboard) |
Tips & Tricks
Efficient Workflows
# Preload project context
ducky --directory src
# Reuse complex commands with crumbs
docker ps | ducky "kill all containers"
>> /crumb killall
# Chain commands
!ls -la
ducksy "find large files"
# Use history
[↑] Recall previous prompts
[↓] Navigate command history
Keyboard Shortcuts Reference
| Key | Action |
|---|---|
Enter |
Submit prompt |
Ctrl+J |
Insert newline |
Empty Enter |
Rerun last command or explain |
Ctrl+R |
Re-run last suggested command |
Ctrl+S |
Copy to clipboard |
Ctrl+D |
Exit |
!cmd |
Run shell command directly |
Crumb Patterns
# Save after complex command
>> docker-compose up -d && wait && docker-compose logs
>> /crumb start-logs
# Manually add with arguments
>> /crumb add deploy-prod docker build -t app:latest && docker push app:latest
# Use for common workflows
>> ls -la
find . -type f -name "*.py" | xargs wc -l
>> /crumb count-py
Storage
Rubber Ducky stores data in ~/.ducky/:
| File | Purpose |
|---|---|
prompt_history |
readline-compatible history |
conversation.log |
JSON log of all interactions |
config |
User preferences (last model) |
crumbs.json |
Saved crumb shortcuts |
Delete the entire directory for a fresh start.
Development
# Clone and setup
git clone <repo>
cd ducky
uv sync
# Run
uv run ducky --help
uv run ducky
# Lint
uv run ruff check .
License
MIT © 2023 Parth Sareen
Metadata
Release files for rubber-ducky 1.6.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| rubber_ducky-1.6.7.tar.gz | 26.1 kB | With provenance | Details for rubber_ducky-1.6.7.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| rubber_ducky-1.6.7-py3-none-any.whl | Python 3 | none | any | Details for rubber_ducky-1.6.7-py3-none-any.whl |
Total release size: 51.8 kB
Release files / rubber_ducky-1.6.7.tar.gz
| Download URL | rubber_ducky-1.6.7.tar.gz |
|---|---|
| Size | 26.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
08913b7287a6b41db1c0a1d236597d720b53d1300963e21b1b04569e165ff9ee
|
|
BLAKE2b-256 checksum How to use checksums |
b752ab5f882cfab74c6a012ce3dccb23f7a4cd639ac85ab6323f000e786e9a66
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 4, 2026.
Transparency logRelease files / rubber_ducky-1.6.7-py3-none-any.whl
| Download URL | rubber_ducky-1.6.7-py3-none-any.whl |
|---|---|
| Size | 25.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
84034c6c615918b1c2edeeba61fee156814a89935abff3523c1e55f533882468
|
|
BLAKE2b-256 checksum How to use checksums |
5c8b818b7c99cd84633c86879831e1b428b990434f19e3ff76cbb7f86d9be65c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 4, 2026.
Transparency logSecurity for rubber-ducky 1.6.7
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for rubber_ducky-1.6.7.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 4, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.