Installation
Requirements
Section titled “Requirements”- Bun >= 1.1
Quick install
Section titled “Quick install”Published package
Section titled “Published package”Install the CLI with your package manager, then run the installer once to
create ~/.tallow/ and choose extensions and themes:
bun add -g @dungle-scrubs/tallowtallow installFrom source
Section titled “From source”Clone the repository, build it, then run the installer:
git clone https://github.com/dungle-scrubs/tallow.gitcd tallowbun installbun run buildnode dist/install.jsThe installer walks you through:
- Scope — install everything or pick individual extension groups and themes.
- Extension groups — Core Tools, Agent & Delegation, Developer Tools, and UI & Experience. Each group can be enabled or disabled as a unit.
- Themes — choose which of the 34 built-in themes to include and pick a default.
When finished the installer creates ~/.tallow/ with your
settings.json, a sessions/ directory, and an extensions/
directory for any custom extensions you add later.
The installer manages
~/.tallow/. Installing or upgrading thetallowbinary itself is handled by your package manager, or by rebuilding the repo when running from source.
Non-interactive install
Section titled “Non-interactive install”For CI, scripts, or headless setup, pass --yes (or -y):
tallow install --yes
# From a source checkoutnode dist/install.js --yesIn non-interactive mode, the installer:
- copies any newly bundled template files into
~/.tallow/agents/and~/.tallow/commands/, skipping files that already exist - only changes settings or auth values when you pass explicit flags or env vars
For headless auth bootstrapping, provide credentials via env vars (not CLI args):
TALLOW_API_KEY=sk-ant-... tallow install --yes --default-provider anthropicTALLOW_API_KEY_REF=op://Services/Anthropic/api-key tallow install --yes --default-provider anthropicFor a first-time headless setup, pass at least one configuration
flag. If you also want to seed provider auth, pair
--default-provider with TALLOW_API_KEY or TALLOW_API_KEY_REF.
Upgrading
Section titled “Upgrading”Updating tallow has two separate parts:
- Update the CLI/package using the same method you used to install it.
- Re-run the installer only if you want new starter templates or want to change installer-managed settings.
Update the CLI/package
Section titled “Update the CLI/package”# Global installbun add -g @dungle-scrubs/tallow@latest
# From sourcecd /path/to/tallowgit pullbun installbun run buildRe-run the installer
Section titled “Re-run the installer”If tallow is already set up, tallow install offers these flows:
| Option | What it actually does |
|---|---|
| Refresh starter templates | Copies any newly bundled template files into ~/.tallow/agents/ and ~/.tallow/commands/. Existing settings stay untouched. |
| Reconfigure | Re-runs extension/theme selection using your current selections as defaults. Updates installer-managed settings (theme and disabledExtensions) while preserving sessions, auth, hooks, packages, custom extensions, and other settings keys. |
| Fresh install | Re-runs the same selection flow from default installer choices instead of your current selections. It still preserves ~/.tallow/ data and only rewrites installer-managed settings. |
For scripted refreshes, use:
tallow install --yes
# From a source checkoutnode dist/install.js --yesAdd --default-provider, --default-model, --theme, or
--thinking to change only those specific values.
After installation
Section titled “After installation”# Verifytallow --version
# Run in any project directorytallowConfiguration
Section titled “Configuration”User configuration lives in ~/.tallow/. Project-local
configuration lives in .tallow/ within your project directory.
| Path | Purpose |
|---|---|
~/.tallow/settings.json | Global settings (theme, disabled extensions, packages) |
~/.tallow/.env | Environment variables loaded at startup (supports op:// refs) |
~/.tallow/.env.cache | Auto-generated cache of resolved op:// secrets (1h TTL) |
~/.tallow/auth.json | Provider auth references (not raw keys — see SECURITY.md) |
~/.tallow/sessions/ | Conversation history |
~/.tallow/extensions/ | Custom user extensions |
~/.tallow/agents/ | Custom user agents |
~/.tallow/skills/ | Custom user skills |
~/.tallow/prompts/ | Custom user prompts/commands |
.tallow/settings.json | Project-local settings (deep-merged over global) |
.tallow/extensions/ | Project-local extensions |
.tallow/agents/ | Project-local agents |
.tallow/skills/ | Project-local skills |
.tallow/prompts/ | Project-local prompts/commands |
CLI reference
Section titled “CLI reference”tallow Interactive modetallow -p "Fix the tests" Single-shot print modeecho "prompt" | tallow Piped stdin as promptcat file.md | tallow -p "Review" Piped stdin + explicit prompttallow --continue Continue most recent sessiontallow --session-id my-run Start or continue a named sessiontallow --resume <id> Resume a specific session (fails if not found)tallow --fork-session <id> Fork from an existing sessiontallow --list List available sessionstallow extensions List extensions (table view)tallow extensions --json List extensions as JSONtallow extensions <id> Show metadata for one extensiontallow --model claude-sonnet Use a specific modeltallow --thinking high Set thinking leveltallow --no-session In-memory only (no persistence)tallow --no-extensions Disable all extensionstallow -e ./my-ext Load additional extensiontallow --mode rpc RPC mode (for external integrations)tallow --home Print the tallow home directorytallow install Run the interactive installer--api-key is intentionally unsupported to avoid leaking secrets in
process arguments. Use TALLOW_API_KEY or TALLOW_API_KEY_REF.
Piped input
Section titled “Piped input”Pipe file contents or command output directly into tallow:
# Stdin becomes the promptecho "What is 2+2?" | tallow
# Stdin as context + explicit promptcat src/main.ts | tallow -p "Find bugs in this code"
# Pipe command outputgit log --oneline -20 | tallow -p "Summarize recent changes"
# Works with JSON mode toocat data.json | tallow --mode json -p "Parse this"When stdin is piped (not a TTY), tallow reads the full stream and
enters print mode automatically. If both stdin and -p are
provided, stdin content is prepended as context before the prompt.
Piped input is capped at 10 MB to prevent memory exhaustion.
Session targeting (headless / CI)
Section titled “Session targeting (headless / CI)”For deterministic session management in CI/CD pipelines and SDK consumers:
# Named session — creates on first use, continues on subsequent callstallow -p "step 1" --session-id my-pipeline-runtallow -p "step 2" --session-id my-pipeline-run
# Strict resume — fails with exit code 1 if session doesn't existtallow -p "continue" --resume my-pipeline-run
# Fork — branch from an existing session into a new onetallow -p "explore alternative" --fork-session my-pipeline-run
# Session ID is emitted to stderr for programmatic chainingtallow -p "hello" --session-id run-1 2>session.txt--session-id, --resume, --fork-session, and --continue are mutually exclusive.
--no-session takes highest priority and disables all persistence.
Session discovery is project-scoped: --list and default resume flows read
sessions for the current working directory only, not a global cross-project pool.