Yoker provides seven subcommands, auto-generated by Clevis from the config
dataclasses. When no subcommand is given, chat is assumed for backward
compatibility.
yoker --help # list all subcommands
yoker <subcommand> --help # show flags for a specific subcommandStart the interactive REPL. This is the default subcommand when no subcommand is given. Runs the bootstrap wizard on first use when no config file exists.
Usage:
yoker chat [OPTIONS]Key flags (all Config flags are available — see yoker chat --help for
the full list):
| Flag | Effect |
|---|---|
--ui-mode {interactive,batch} |
Select UI handler (default: interactive) |
--ui-show-thinking |
Show LLM reasoning trace |
--ui-show-tool-calls |
Show tool call details |
--ui-show-stats |
Show turn statistics |
--with <package> |
Load a plugin package (repeatable) |
--agents-definition <path> |
Load an agent definition file |
--backend-provider <name> |
LLM provider: ollama, openai, anthropic, gemini |
--backend-ollama-model <model> |
Ollama model name |
--backend-openai-model <model> |
OpenAI model name |
--backend-anthropic-model <model> |
Anthropic model name |
--backend-gemini-model <model> |
Gemini model name |
Examples:
yoker # same as `yoker chat`
yoker chat --ui-mode batch # batch mode for pipelines
yoker chat --with pkgq # load a plugin
yoker chat --agents-definition examples/agents/researcher.md
yoker chat --backend-ollama-model qwen3.5:cloudBatch mode: reads from stdin, writes response content to stdout. Thinking, tool calls, errors, and statistics go to stderr. Useful in pipelines:
printf "What is 2+2?\n" | yoker chat --ui-mode batchLoad a source and run it non-interactively. The source's agent.toml manifest
specifies which agent to use and what initial prompt to send.
Usage:
yoker run <source> [OPTIONS]Source types (auto-detected):
| Type | Example | Detection |
|---|---|---|
| Module | pkgq |
Fallback |
| GitHub URL | https://github.com/owner/repo |
URL with scheme |
| Folder | ./my-folder |
Existing directory |
| Zip file | ./my-package.zip |
.zip extension, is a file |
Key flags:
| Flag | Effect |
|---|---|
--agent <name> |
Override the manifest's agent |
--prompt <text> |
Override the manifest's prompt (max 10 KB) |
--dry-run |
Resolve and print manifest info without executing |
--persist |
Enable context persistence (saves session to JSONL) |
--session-id <id> |
Session ID for persistence |
--source <source> |
Source to run (positional alternative) |
All Config flags (backend, tools, permissions, etc.) are also available.
Examples:
yoker run pkgq # Python module
yoker run https://github.com/christophevg/pkgq # GitHub URL
yoker run ./my-folder # local folder
yoker run ./my-package.zip # zip file
yoker run pkgq --agent researcher --prompt "analyze" # override manifest
yoker run pkgq --dry-run # preview without executing
yoker run pkgq --persist --session-id my-run # persist sessionTrust gate: the source must be trusted before code is executed. See the Creating Agentic Packages guide for the trust model and how to trust a source.
Run an agentic package at intervals. The source is resolved, trusted, and loaded once; each iteration sends the same prompt through the agent.
Usage:
yoker loop <source> [OPTIONS]Key flags (in addition to all yoker run flags):
| Flag | Default | Effect |
|---|---|---|
--interval <seconds> |
300 | Seconds between iterations |
--max-iterations <n> |
100 | Stop after N iterations |
--max-duration <seconds> |
none | Stop after wall-clock time limit |
Examples:
yoker loop pkgq --interval 60 # run every 60 seconds
yoker loop pkgq --interval 60 --max-iterations 3 # stop after 3 runs
yoker loop pkgq --persist --session-id loop-1 # reuse context
yoker loop pkgq --max-duration 3600 # stop after 1 hourStopping: the loop stops on --max-iterations, --max-duration, 3
consecutive failures (with exponential backoff), or Ctrl+C (graceful
shutdown with a summary of completed iterations).
Display a human-readable report about a source without executing any code. No trust gate is required — safe to run on untrusted sources.
Usage:
yoker inspect <source>Flags:
| Flag | Effect |
|---|---|
--source <source> |
Source to inspect (positional alternative) |
Examples:
yoker inspect pkgq
yoker inspect ./my-folder
yoker inspect https://github.com/owner/repoReport contents:
- What it contains: skills (names), agent definitions (names), tools
(declared
tools_module— listed but not imported) - What it uses: dependencies from
pyproject.toml,tools_moduledeclaration - What it does: the agent and prompt from the manifest's
[run]section - Config overrides: any config fields the manifest overrides
For module sources, the Python __YOKER_MANIFEST__ cannot be discovered
without importing the package, so the report notes that trust is required.
Create a ~/.yoker.toml configuration file. Interactive mode runs the
bootstrap wizard; non-interactive mode writes a default config.
Usage:
yoker init [OPTIONS]Flags:
| Flag | Effect |
|---|---|
--no-interactive |
Write a default config without the wizard |
--path <path> |
Write to a custom location (default: ~/.yoker.toml) |
--force |
Overwrite an existing config file |
Examples:
yoker init # interactive wizard (default)
yoker init --no-interactive # write defaults without prompting
yoker init --path ./my-config.toml # write to a custom location
yoker init --force # overwrite an existing fileWritten files always have chmod 600 permissions. The --path flag rejects
forbidden system prefixes (e.g. /etc, /usr). When overwriting with
--force and stdin is a TTY, the user is asked to confirm.
Load the merged config (user TOML + project TOML + CLI args) and print it. API keys are masked by default.
Usage:
yoker config [OPTIONS]Key flags:
| Flag | Effect |
|---|---|
--json |
Output as JSON instead of TOML |
--show-path |
Print the config file paths that were found |
--reveal |
Show API key values in full (masked by default) |
All Config flags are also available, so CLI overrides are reflected in the output.
Examples:
yoker config # print config as TOML
yoker config --json # print config as JSON
yoker config --show-path # print config file paths
yoker config --reveal # show API keys unmasked
yoker config --backend-ollama-model qwen3.5:cloud # reflect CLI overrideGenerate a Dockerfile (or Containerfile for podman) and ignore file for running a yoker agentic package in a container.
Usage:
yoker container <source> [OPTIONS]Flags:
| Flag | Default | Effect |
|---|---|---|
--source <source> |
— | Source to containerize |
--engine {docker,podman} |
docker | Container engine |
--output-dir <path> |
. |
Where to write generated files |
--base-image <image> |
python:3.12-slim |
Base image |
--compose |
off | Also generate docker-compose.yml |
Examples:
yoker container pkgq # generate Dockerfile
yoker container pkgq --engine podman # generate Containerfile
yoker container pkgq --output-dir ./container/ # custom output directory
yoker container pkgq --compose # also generate docker-compose.yml
yoker container ./my-folder # containerize a folder
yoker container https://github.com/x/y # containerize a GitHub repoSecurity: the generated Dockerfile uses JSON-array form exclusively for
RUN/ENTRYPOINT (no shell-form injection risk), includes a non-root USER
directive (USER 1000), pins the yoker version (pip install yoker==<version>),
and does not copy ~/.yoker.toml or API keys into the image. A
.dockerignore/.containerignore is generated excluding secrets, .git,
__pycache__, etc. For GitHub sources, the Dockerfile pins to the resolved
commit SHA.
The --with <package> flag loads plugin packages. It is parsed before
subcommand dispatch and works from any subcommand position. Plugin packages
must be trusted in your config (see Plugins).
yoker --with pkgq chat
yoker chat --with pkgq
yoker run pkgq --with other-pluginWhen no subcommand is given, chat is inserted automatically:
yoker # -> yoker chat
yoker --backend-ollama-model X # -> yoker chat --backend-ollama-model XConfig files are auto-discovered in this order:
./yoker.toml(current directory)~/.yoker.toml(user home directory)- Built-in defaults
Subcommand-specific config sections are also supported. For example, a [chat]
section in yoker.toml applies only to yoker chat, and a [run] section
applies only to yoker run. If no subcommand section exists, root-level TOML
is used as-is.