Skip to main content
The ollim-bot CLI is the primary entry point for running the bot and managing routines, reminders, Google Tasks, Google Calendar, and Gmail from the terminal. With no subcommand, it starts the Discord bot. With a subcommand, it runs the corresponding operation and exits.
Installing with uv tool install --editable . also installs a separate counterfactual command for replaying production transcripts with modified agent settings — it is a sibling entry point, not an ollim-bot subcommand.

Command overview

routine

Manage recurring routines stored as markdown files in ~/.ollim-bot/routines/.

routine add

Create a new routine with a cron schedule.
The --cron value must have exactly 5 space-separated fields. The command exits with code 1 if the expression is invalid.
When --background is set, additional options become available. See Background mode options.

routine list

List all routines. No arguments.
Output format:
Background routines display tags like [bg], [isolated], the model name, and thinking status.

routine cancel

Remove a routine by ID.
Exits with code 1 if the routine is not found.

reminder

Manage one-shot reminders stored as markdown files in ~/.ollim-bot/reminders/.

reminder add

Schedule a one-shot reminder that fires after a delay.
--foreground and --background are mutually exclusive — the command exits with an error if both are set.
Reminders run in the background by default, so background mode options are always available. See Background mode options.

reminder list

List all pending reminders. No arguments.
Output format:

reminder cancel

Remove a reminder by ID.
Exits with code 1 if the reminder is not found.

tasks

Manage Google Tasks. Requires Google integration setup. Every tasks subcommand accepts --list <id> to target a specific task list. When omitted, the google_task_list runtime config key is used (defaults to @default). See Google Tasks for details.

tasks list

List tasks from the configured task list.
Output format:
Tasks with notes display a [+] marker after the title.

tasks show

Show full details for a specific task — title, status, due date, notes, and ID.
Example output:

tasks add

Create a new task.

tasks done

Mark a task as completed.

tasks update

Update an existing task. At least one of --title, --due, or --notes is required.

tasks delete

Delete a task.

cal

Manage Google Calendar events. Requires Google integration setup. All times use the configured timezone (OLLIM_TIMEZONE, defaults to system local). Read commands (today, upcoming) query every calendar listed in the google_calendars runtime config key by default. Write commands (add, show, update, delete) target the first entry of google_calendars. Pass --calendar <id> on any command to override for that invocation. See Google Calendar for details.

cal today

Show today’s calendar events.
When more than one calendar is configured, events are merged and sorted client-side, and each line is tagged with its source calendar ID in brackets.

cal upcoming

Show upcoming events.

cal show

Show details for a specific event.

cal add

Create a calendar event.

cal update

Update an existing event. At least one of --summary, --start, --end, or --description is required.

cal delete

Delete a calendar event.

cal calendars

List every calendar your Google account can access. No arguments.
Output format — one line per calendar, ID first then display name:
Use this output to pick IDs for the google_calendars config key or the --calendar flag.

gmail

Read and search Gmail messages. Requires Google integration setup. Read-only access — no sending or modifying emails.

gmail unread

List unread emails.

gmail read

Read a specific email by ID. Message bodies longer than 3000 characters are truncated. Search emails using Gmail query syntax.

gmail labels

List all Gmail labels. No arguments.

chat

Talk to the agent directly from your terminal — no Discord required. Useful for debugging agent behavior, trying a local Ollama model, or driving the bot on a machine without a Discord account.
chat requires Claude authentication — run ollim-bot auth login first. The command exits with code 1 if you’re not logged in and ANTHROPIC_AUTH_TOKEN is not set.
Type a message at the you> prompt and press Enter. The agent streams its response to stdout. Tool activity prints as dim [tool] <label> lines, and any MCP tool that would normally send a Discord embed prints its title as [embed] <title>. Exit with Ctrl-D (EOF) or Ctrl-C — on exit the SDK client disconnects so the session transcript is flushed.

Session behavior

chat shares the main session with the Discord bot via ~/.ollim-bot/state/sessions.json. If a session ID is stored there, chat resumes it; otherwise a new one starts on the first message. When you switch between chat and Discord, each side picks up the other’s conversation — see session management for the underlying mechanism. chat runs with permission_mode="bypassPermissions", so the agent does not prompt for tool approvals while you’re at the terminal. This applies to the main session only — background forks spawned from chat still enforce the configured tool policy and ping budget.

Scope

Chat captures what the agent sends through its Discord channel duck type, but Discord-only UI elements are inert:
  • Visible — text responses, tool activity labels, and the titles of any embeds the agent sends
  • Not interactive — buttons and view components attached to embeds (for example, the save/report buttons on a fork exit embed) print no output and cannot be clicked
  • Not rendered — file attachments from send_file are recorded internally but not displayed in the terminal

eval

Run ADHD behavior evals that test whether the bot responds appropriately to users with ADHD. Each eval plays a simulated ADHD user (Haiku-powered proxy) against the real bot agent, then scores the transcript with an LLM judge.
eval run requires Claude authentication — run ollim-bot auth login first.

eval run

Run scenarios against the real agent. Runs all scenarios by default.
Each scenario reports per-criterion scores (1-5 scale), an overall score, and a PASS/FAIL status. A scenario passes when the overall score is at least 3.0 and no individual criterion scores below 2. Results are saved to a JSONL history file for regression tracking.

eval list

List available scenarios with their IDs and goals. No arguments.

eval results

Show past eval results from the JSONL history.

eval compare

Compare latest vs previous results for regression detection. Flags a regression when the overall score drops by more than 0.3.

auth

Manage Claude Code authentication. ollim-bot uses the Claude CLI bundled with the Agent SDK for OAuth — you don’t need to install Claude Code separately. At startup, the bot checks auth status automatically. If not logged in, it extracts an OAuth URL from the bundled CLI and DMs it to you via Discord. Click the link to sign in — the bot waits until authentication completes, then continues startup. The auth subcommands below are for manual use (pre-authenticating before enabling a service, checking status, or logging out).

auth login

Start the login flow. Suppresses the browser and prints an auth URL for you to visit manually.

auth status

Show current authentication status. No arguments.

auth logout

Log out from your Anthropic account. No arguments.

doctor

Run diagnostic checks across every layer of your installation — environment variables, data directory, timezone, routines, reminders, tool policy, state files, Claude CLI, and authentication. Each check reports PASS, WARN, or FAIL with an actionable message so you know exactly what to fix.
No subcommands or flags. The command loads your .env, runs all checks, prints results grouped by section, and exits with code 0 if everything passes or code 1 if any checks fail. Example output:
Run ollim-bot doctor after initial setup or whenever something feels off. It catches the most common issues — missing env vars, corrupt state files, invalid cron expressions — before they surface as confusing runtime errors.

counterfactual

counterfactual is a separate top-level command, not an ollim-bot subcommand. uv tool install --editable . installs both entry points.
Replay a real production transcript from a chosen point, apply an intervention (modified system prompt, tool restrictions, model swap, or alternate message), and print the agent’s new response alongside the original. Use it to evaluate prompt or configuration changes without waiting for the behavior to recur in production. See Counterfactual trajectory testing for when to reach for this tool.
The rewind_uuid must belong to a user message — assistant or tool-result UUIDs are rejected. Prefixes are accepted as long as they resolve to exactly one user message. The first record in a session cannot be a rewind point — there is no prior context to fork from.
The output shows the original response from the transcript, an optional baseline (same settings as the original, re-run fresh), and the variant (with the intervention). Each block includes the response text, tool calls, turn count, cost, and token usage.
The variant runs with bypassPermissions and the default --cwd is ~/.ollim-bot — tools like Bash, Write, and Edit can modify files anywhere under that directory. Discord MCP tools (ping_user, discord_embed) are not connected, so pick rewind points where the original response did not depend on them, or the comparison will not be meaningful.

Background mode options

routine add accepts these flags when --background is set. For reminder add, these options are always available since reminders run in the background by default.
The reminder add command also supports --allowed-tools for restricting which tools the background fork can use, and --skills for loading skills at fire time. Both accept one or more space-separated values.

--update-main-session modes

The --no-ping flag completely disables ping and embed tools. Even the critical bypass mechanism cannot override it.

Examples

Next steps

Routines

Learn about the routine file format and cron scheduling.

Reminders

One-shot reminders and follow-up chains.

Background forks

How background mode works under the hood.

Configuration reference

Environment variables and data directory layout.