Terminal

The terminal is Omnigent's default interface: keyboard-first, with streaming output and real-time tool execution. If you already live in a terminal, this is the fastest way to work with your agent.

Every interface (terminal, web UI, mobile, and desktop) connects to the same persistent, shareable session, so you can start work in one place and keep going anywhere.

Omnigent terminal session

Start a session

The terminal interface requires tmux, so install it first if you don't have it:

# macOS
brew install tmux

# Debian / Ubuntu
apt install tmux

Then launch an agent:

omni claude                          # Claude Code
omni codex                           # Codex
omni goose                           # Goose (native TUI)
omni hermes                          # Hermes (native TUI)
omni run agent.yaml                  # custom omnigent
omni run ./my-agent/                 # directory with config.yaml

omni claude, omni codex, omni goose, and omni hermes launch a built-in coding agent with Omnigent's UI. No YAML needed. See the Coding Agent tutorial and the full harness list in Harnesses.

omni run starts a custom omnigent from a YAML config. See Custom Agents for how to write one.

A bare omni with no arguments does not launch an agent. On an interactive terminal it starts the local server / host in the background and returns; to launch an agent, name it (omni polly, omni claude, …) or use omni run. In a non-interactive shell (a pipe or CI, with no TTY), bare omni prints --help instead of blocking on a sign-in prompt.

CLI overrides

Override executor values at runtime without editing the YAML:

omni run agent.yaml --harness codex --model gpt-4.1-mini

The --harness and --model flags map directly to the executor block. This lets you reuse the same config across different LLM backends.

From here, the agent streams its output as it thinks and acts. Tool calls run in real time, so you watch file writes, shell commands, and API calls land as they happen. The session also stays in sync with the Web UI both ways: run the agent in your terminal and glance at the browser whenever you want file diffs or inline comments.

Sessions and conversations

A session is a conversation. Every message, tool call, and file change lives in one continuous thread. Sessions are the core unit of work in Omnigent, and three properties make them useful:

Customize automatic session titles

New sessions get an automatic title generated from your first message, so your session list stays readable without manual naming. You can steer the style or format of those titles with natural-language guidance in your Omnigent config:

omni config set --global \
  'session_title_instructions=Prefix titles with the current date as lowercase mon-dd. Use PR-number-short-name for pull requests, issue-number-short-description for issues, and a short snake_case activity otherwise.'

The isolated title generator receives the current date (as YYYY-MM-DD) and then applies your requirements to the first user message. Generated titles longer than 60 characters are rejected, leaving the first-message fallback title in place.

session_title_instructions is server-owned metadata configuration, not part of an agent's portable instructions, so it must be set with --global. Setting it as a project-local key (.omnigent/config.yaml) is rejected, and omni config list flags any project-local value as an ignored user-level-only setting. The setting takes effect for new sessions after the local Omnigent server restarts.

For longer instructions, edit ~/.omnigent/config.yaml directly and use a YAML block scalar:

session_title_instructions: |
  Prefix every title with the current date as lowercase mon-dd.
  For pull requests use mon-dd-PR-number-short-name.
  For issues use mon-dd-issue-number-short-description.
  For other work use mon-dd-short_snake_case_activity.

Deployed servers. On a shared server, an operator sets the same session_title_instructions key in the YAML passed to omni server --config; it then applies to every session on that server. Invalid values (non-string, or longer than 4,000 characters) are ignored and fall back to the default title prompt.

When to use the terminal

The terminal shines when you want to stay close to the command line: