Interactive task fulfillment tool for macOS.
- Fulfillment plans - Shows execution plan before taking action
- Structured plan with steps showing what will be done
- Interactive confirmation before executing (unless dry-run or plan-json mode)
- JSON output option with
--plan-jsonflag - Highlights manual steps that require user action
- Skips confirmation for safe/read-only commands
- Configuration directory - Creates
~/.config/want/if missing - Download GitHub release assets -
want https://github.com/owner/repo/releases/tag/v1.0.0- Auto-detects platform (OS and architecture)
- Works with both public and private repositories (with GITHUB_TOKEN)
- Downloads to
~/.local/bin/and makes executable - Shows plan and asks for confirmation
- Install from mono repository -
want mono <project>@<version>- List all releases for a project:
want mono printpdf --list - Install specific version:
want mono printpdf@main.1 - Supports main branch releases
- List all releases for a project:
- Install tools via mise - Request and install tools using
want <tool>- Shows plan including mise installation if needed
- Asks for confirmation before installation
- Install mise itself -
want miseinstalls mise and detects shell config needs - Check if tools are already available - Detects existing installations
- Shell configuration detection - Detects if mise activation is configured
- Dry-run mode - Preview actions with
--dry-runflag (no confirmation prompt) - JSON plan output - Output fulfillment plan as JSON with
--plan-jsonflag - Compound commands with parameters - Transform and execute commands
-
want json <command>- Convert command output to JSON usingjc -
want md <url>- Convert URL to markdown usingmarkitdownorpure.md -
want excalifont- Download and install Excalifont font
-
- Basic CLI interface - Help, version, and command structure
- Command stubs -
list,check,forgetcommands (not functional yet)
- Clone git repositories -
want github.com/user/reponot working yet - Track requirements - No persistence of what you've requested
- List tracked items -
want listshows placeholder message - Check status -
want checkshows placeholder message - Forget requirements -
want forgetshows placeholder message - Multiple provider support - Only mise is supported; no Homebrew, GitHub releases, etc.
- Interactive prompts - No interactive selection when multiple options exist
- Preference learning - No storage of user preferences
- Configuration persistence - Configuration data is not stored yet
want helps you get things you need on your system through CLI commands. It's an interactive assistant that respects your preferences.
want jujutsu # Install a tool via mise (asks for confirmation)
want --dry-run jujutsu # Preview what would be done (no confirmation)
want --plan-json jujutsu # Output fulfillment plan as JSON
want json ps # Get process list as JSON (installs jc if needed)
want md https://example.com # Convert URL to markdown
want excalifont # Download and install Excalifont font
want mono printpdf --list # List all releases of printpdf from mono
want mono printpdf@main.1 # Install printpdf version main.1 from mono
want https://github.com/org/repo/releases/tag/v1.0.0 # Download GitHub release
want github.com/user/repo # Clone a repository (NOT YET IMPLEMENTED)
want list # Show what you have (NOT YET IMPLEMENTED)cd want
go buildInstall using mise with the Go backend:
mise use -g go:github.com/neongreen/mono/want@mainOr add to your .mise.toml:
[tools]
"go:github.com/neongreen/mono/want" = "main"The want mono command now supports the same fulfillment plan machinery as other want commands, including --dry-run and --plan-json flags.
# List all available releases and open PRs for a project
want mono printpdf --list
# Install a specific version
want mono printpdf@main.1
# Build from the latest commit on main branch
want mono printpdf@main
# Build from a specific branch
want mono dissect@feature-refactor
# Build from a specific commit SHA
want mono want@abc1234
# Preview what would be done without confirmation
want mono --dry-run printpdf@main.1
# Get the fulfillment plan as JSON
want mono --plan-json printpdf@main.1
# Preview building from a branch (builds locally if no release)
want mono --dry-run dissect@main
# Install from a branch with plan output as JSON
want mono --plan-json dissect@mainThe tool will:
- Build a fulfillment plan showing all steps before execution
- Execute automatically without asking for confirmation (use --dry-run to preview)
- Fetch all releases from neongreen/mono repository
- Filter releases for the specified project
- For version strings:
- If it matches a release tag (e.g.,
main.1): download the pre-built binary - If it's a branch name (e.g.,
main,feature-xyz): build from the latest commit on that branch - If it's a commit SHA (7-40 hex chars): build from that specific commit
- If it matches a release tag (e.g.,
- Download the binary matching your platform (OS and architecture)
- Install to
~/.local/bin/ - Make it executable
- Notify you if
~/.local/bin/is not in your PATH
Example output for listing releases:
$ want mono printpdf --list
Fetching releases for printpdf from neongreen/mono...
Available releases for printpdf:
main.5
main.4
main.3
To install a specific version:
want mono printpdf@<version>
Examples:
want mono printpdf@main.5Example using dry-run mode:
$ want mono --dry-run dissect@main
Building dissect from main branch...
Fulfillment plan:
Step 1: Fetch main branch information from GitHub
$ GET https://api.github.com/repos/neongreen/mono/branches/main
Step 2: Clone neongreen/mono repository (main branch)
$ git clone --depth=1 --branch main https://github.com/neongreen/mono.git <tmpdir>
Step 3: Build dissect from source
$ go build -o /home/user/.local/bin/dissect .
Step 4: Make binary executable
$ chmod +x /home/user/.local/bin/dissectWhen installing from a branch without a release:
$ want mono dissect@main
No release found for main (would be tagged as dissect--main)
Building from main branch instead...
Fulfillment plan:
Step 1: Fetch main branch information from GitHub
$ GET https://api.github.com/repos/neongreen/mono/branches/main
Step 2: Clone neongreen/mono repository (PR branch)
$ git clone --depth=1 --branch <pr-branch> https://github.com/neongreen/mono.git <tmpdir>
Step 3: Build dissect from source
$ go build -o /home/user/.local/bin/dissect .
Step 4: Make binary executable
$ chmod +x /home/user/.local/bin/dissect
PR #100: Add support for new syntax
Branch: feature-branch
Cloning neongreen/mono (branch: feature-branch)...
[clone output]
Building dissect...
[build output]
✓ Built and installed dissect from PR #100 to: ~/.local/bin/dissect
✓ Binary is available in your PATH as: dissectWhen building from a branch or commit:
$ want mono printpdf@main
No release found for main (would be tagged as printpdf--main)
Building from latest commit on main branch instead...
Fulfillment plan:
Step 1: Clone neongreen/mono repository (latest commit on main branch)
$ git clone --depth=1 --branch main https://github.com/neongreen/mono.git <tmpdir>
Step 2: Build printpdf from source
$ go build -o /home/user/.local/bin/printpdf .
Step 3: Make binary executable
$ chmod +x /home/user/.local/bin/printpdf
Cloning neongreen/mono (latest commit on main branch)...
[clone output]
Building printpdf...
[build output]
✓ Built and installed printpdf from latest commit on main branch to: ~/.local/bin/printpdf
✓ Binary is available in your PATH as: printpdf# Download from a release tag (auto-detects platform)
want https://github.com/neongreen/mono/releases/tag/want--main.3
# Download specific asset
want https://github.com/neongreen/mono/releases/download/want--main.3/want-main.3-darwin-arm64
# Preview what would be downloaded
want --dry-run https://github.com/neongreen/mono/releases/tag/want--main.3
# Show the fulfillment plan as JSON
want --plan-json https://github.com/neongreen/mono/releases/tag/want--main.3The tool will:
- Show a fulfillment plan with all steps
- Ask for confirmation before proceeding
- Fetch the release information from GitHub
- Find the asset matching your platform (OS and architecture)
- Download it to
~/.local/bin/ - Make it executable
- Notify you if
~/.local/bin/is not in your PATH
For private repositories, set GITHUB_TOKEN environment variable.
want jujutsu # Install jujutsu via mise (asks for confirmation)
want mise # Install mise itself (special case)
want --plan-json jujutsu # Show installation plan as JSONThe tool will:
- Build a fulfillment plan showing all required steps
- Ask for confirmation before proceeding
- Execute the installation steps
If the tool is already available (installed via brew, apt, or any other method), want will detect it and skip installation:
$ want jq
✓ jq is already available
Location: /usr/bin/jqExample of interactive installation:
$ want jujutsu
Fulfillment plan:
Step 1 (MANUAL): Install mise (required for tool installation)
$ want mise
Step 2: Install jujutsu via mise
$ mise use -g jujutsu
Proceed with this plan? [Y/n]: yWhen installing mise itself, want will:
- Show a fulfillment plan with all steps
- Download and install mise using the official installation script
- Detect if mise activation is needed in your shell config (.bashrc, .zshrc, etc.)
- Provide instructions for adding the activation line
Example JSON output:
$ want --plan-json mise
{
"requirement": "mise",
"steps": [
{
"type": "install",
"description": "Download and run mise installation script",
"command": "curl https://mise.run | sh",
"automatic": true
},
{
"type": "configure",
"description": "Add mise activation to /home/user/.bashrc",
"command": "echo 'eval \"$(mise activate bash)\"' >> /home/user/.bashrc",
"automatic": true
},
{
"type": "configure",
"description": "Activate mise in current shell (or restart shell)",
"command": "eval \"$(mise activate bash)\"",
"automatic": false
}
]
}Every operation now uses a fulfillment plan that shows what will be done. You can:
- View the plan interactively - Default mode shows the plan and asks for confirmation
- Preview with dry-run - Use
--dry-runto see the plan without executing or prompting - Get JSON output - Use
--plan-jsonto get the plan as structured JSON
# Interactive mode (shows plan and asks for confirmation)
want jujutsu
# Dry-run mode (shows plan, no execution, no prompt)
want --dry-run jujutsu
# JSON output mode (outputs plan as JSON)
want --plan-json jujutsuPlans highlight manual steps that require user action:
- Manual steps are marked with (MANUAL)
- Automatic steps have no label (executed by want)
For safe/read-only commands (like want json ps), confirmation is skipped automatically.
Transform command output or URLs using specialized tools:
# Convert command output to JSON
want json ps # Get running processes as JSON
want json ls -la # Get directory listing as JSON
want json df -h # Get disk usage as JSON
# Convert URLs to markdown
want md https://example.com # Convert webpage to markdown
want md https://news.ycombinator.com
# Install Excalifont font
want excalifont # Download and install ExcalifontHow it works:
want json <command>shows a plan to installjcvia mise if needed, asks for confirmation, then runsjc <command>want md <url>builds a plan using the best available method to runmarkitdown:- Prefers
uvx(runs in isolated environment without installation) - Falls back to
misefor installation - If neither available, suggests installing
uv - Final fallback to
pure.mdweb service
- Prefers
want excalifontdownloads Excalifont Regular from excalidraw.com, converts woff2 to ttf using fontTools (via uv), and opens it in Font Book (macOS)- All commands support
--dry-runand--plan-jsonflags
want github.com/user/repo # Clone a repository - NOT WORKING YET
want list # View tracked requirements - NOT WORKING YET
want check # Check status of requirements - NOT WORKING YET
want forget <requirement> # Remove from tracking - NOT WORKING YETEvery want operation builds a fulfillment plan consisting of steps. Each step has:
- type - The type of operation:
install,download,execute, orconfigure - description - Human-readable description of what the step does
- command - The command that will be executed (or a description for complex operations)
- automatic - Boolean indicating if the step is automatic (true) or requires manual action (false)
The plan is presented to the user for confirmation before execution (unless using --dry-run or --plan-json).
Example JSON plan:
{
"requirement": "jujutsu",
"steps": [
{
"type": "install",
"description": "Install mise (required for tool installation)",
"command": "want mise",
"automatic": false
},
{
"type": "install",
"description": "Install jujutsu via mise",
"command": "mise use -g jujutsu",
"automatic": true
}
]
}- CLI-first interaction (not YAML editing)
- Shows fulfillment plans before taking action
- Asks for confirmation before executing (unless dry-run or plan-json mode)
- Presents multiple options when available (future feature)
- Learns your preferences over time (future feature)
- Doesn't reset existing work
Configuration will be stored at ~/.config/want/.
See DESIGN.md for complete design.