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.
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.--background is set, additional options become available.
See Background mode options.
routine list
List all routines. No arguments.
[bg], [isolated], the model name, and thinking status.
routine cancel
Remove a routine by ID.
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.
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.
reminder cancel
Remove a reminder by ID.
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.
tasks show
Show full details for a specific task — title, status, due date, notes, and ID.
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.
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.
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.
gmail search
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.
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_fileare 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
Run scenarios against the real agent. Runs all scenarios by default.
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.
.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:
counterfactual
counterfactual is a separate top-level command, not an ollim-bot
subcommand. uv tool install --editable . installs both entry points.
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.
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
Examples
- Routines
- Reminders
- Google Services
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.
