oh-my-pi

(★ 26,234)

⌥ AI Coding agent for the terminal — hash-anchored edits, optimized tool harness, LSP, Python, browser, subagents, and more

File Explorer

Showing a partial file list — download the zip above to see everything.

  • .bazelignore
  • .bazelrc
  • .bazelversion
  • .dockerignore
  • .fallowrc.jsonc
  • .gitattributes
  • .gitignore
  • about.toml
  • AGENTS.md
  • biome.json
  • BUILD.bazel
  • bun.lock
  • bunfig.toml
  • Cargo.lock
  • Cargo.toml
  • CONTRIBUTING.md
  • deny.toml
  • Dockerfile
  • Dockerfile.dockerignore
  • Dockerfile.robomp
  • Dockerfile.robomp.dockerignore
  • flake.lock
  • flake.nix
  • LICENSE
  • MODULE.bazel
  • MODULE.bazel.lock
  • package.json
  • README.md
  • THIRD-PARTY-NOTICES.txt

# Installation Guide

node
Prerequisites

Setup Steps

bun install -g @oh-my-pi/pi-coding-agent

Install the package globally via Bun.

Key Commands

bun install -g @oh-my-pi/pi-coding-agent

Install pi-coding-agent globally.

omp completions zsh

Generate shell completion scripts.

On Alpine / musl, ensure libstdc++ and libgcc are installed.

# Use via CDN

jsDelivr

jsDelivr serves any public GitHub repository as a CDN with zero setup. Pick a version and a file to get a ready-to-paste link and snippet.

Showing a partial file list.

Release Timeline

Actively Maintained

Command Glossary

Commands referenced in this DOCs, explained below.

🔍

login

View Details ▼

Manage console and virtual line authentication.
Accessed in configuration mode under `line`.

login local

Use local username and password for authentication:

login {{user}}

Log in as a user:

login -f {{user}}

Log in as user without authentication if user is preauthenticated:

🔍

write

View Details ▼

Write data to memory.

write memory

Write current configuration to memory:

write {{username}} {{terminal_id}}

Send a message to a given user on a given terminal ID:

write {{username}} {{terminal_id}}

Send a message to a given user on a given terminal ID:

🔍

brave

View Details ▼

This command is an alias of `chromium`.

tldr chromium

View documentation for the original command:

🔍

brew install

View Details ▼

Install a Homebrew formula or cask.

brew install {{formula|cask}}

Install a formula/cask:

brew install {{[-s|--build-from-source]}} {{formula}}

Build and install a formula from source (dependencies will still be installed from bottles):

brew install {{[-n|--dry-run]}} {{formula|cask}}

Download the manifest, print what would be installed but don't actually install anything:

🔍

bun install

View Details ▼

Install JavaScript dependencies for a project from `package.json`.

bun {{[i|install]}}

Install all dependencies listed in `package.json`:

bun {{[i|install]}} {{package_name}}@{{version}}

Install a single package (this is an alias for `bun add`):

bun {{[i|install]}} {{[-g|--global]}} {{package_name}}

Install a package globally:

🔍

bun run

View Details ▼

Execute a JavaScript/TypeScript file, or a script from `package.json`.

bun run {{script_name}}

Run a script defined in `package.json`:

bun run {{path/to/file.ts}}

Run a JavaScript or TypeScript file directly:

bun run --watch {{path/to/file.ts}}

Run a file in "watch" mode (restarts automatically when the file changes):

🔍

bun

View Details ▼

JavaScript runtime and toolkit.
Includes a bundler, a test runner, and a package manager.

bun init

Create a new Bun project in the current directory:

bun run {{path/to/file|script_name}}

Run a JavaScript file or a `package.json` script:

bun test

Run unit tests:

🔍

bunx

View Details ▼

Execute a package binary (installed locally or fetched remotely).
Note: `bun x` can be used as an alias for `bunx`.

bunx {{package_name}} "{{command_argument}}"

Download and execute a package from the registry:

bunx {{package_name}} --version

Check the version of a locally installed package (if found):

bunx --bun {{package_name}}

Force an executable to run with the Bun runtime (instead of Node):

🔍

codex

View Details ▼

Natural language code assistant for the terminal, powered by OpenAI.
Reads and edits files in your current directory to fulfill requests.

codex

Start an interactive Codex session in the current directory:

codex "{{prompt}}"

Run a single Codex command using a prompt:

codex --sandbox workspace-write "{{prompt}}"

Run a prompt allowing Codex to edit files in the workspace:

🔍

edit

View Details ▼

A terminal-based text editor from Microsoft.

edit {{path/to/file}}

Open a file:

tldr run-mailcap

View documentation for the original command:

<Ctrl f>{{pattern}}<Enter>

Search for a pattern:

🔍

eval

View Details ▼

Execute arguments as a single command in the current shell and return its result.

eval "{{echo foo}}"

Call `echo` with the "foo" argument:

eval "{{foo=bar}}"

Set a variable in the current shell:

🔍

exa

View Details ▼

A modern replacement for `ls` (List directory contents).
Note: `exa` is no longer maintained. Use `eza` instead.
See also: `eza`.

exa {{[-1|--oneline]}}

List files one per line:

exa {{[-a|--all]}}

List all files, including hidden files:

exa {{[-l|--long]}} {{[-a|--all]}}

Long format list (permissions, ownership, size, and modification date) of all files:

🔍

fresh

View Details ▼

A fully-featured terminal-based text editor.

fresh {{path/to/file}}

Open a file:

<Ctrl f>{{search_pattern}}<Enter>

Search for a pattern:

<Ctrl r>{{search_pattern}}<Enter>{{replacement}}<Enter>

Replace a pattern:

🔍

gemini

View Details ▼

Launch an interactive prompt with Gemini AI.

gemini

Start a REPL session to chat interactively:

{{echo "Summarize the history of Rome"}} | gemini {{[-p|--prompt]}} -

Send the output of another command to Gemini and exit immediately:

gemini {{[-m|--model]}} {{model_name}}

Use a specific model (default: auto-gemini-3):

🔍

glob

View Details ▼

Glob patterns (`glob`) are patterns used to match and search text.
Note: `glob` isn't a command, but syntax to be used with other commands or the shell.
See also: `regex`.

*

Match zero or more of any characters:

?

Match any single character:

[{{abc}}]

Match one character in a set of characters:

🔍

hub

View Details ▼

A wrapper for Git that adds commands for working with GitHub-based projects.
If set up as instructed by `hub alias`, one can use `git` to run `hub` commands.

hub clone {{username}}/{{repo_name}}

Clone a repository using its slug (owners can omit the username):

hub fork

Create a fork of the current repository (cloned from another user) under your GitHub profile:

hub push {{remote_name}} && hub pull-request

Push the current local branch to GitHub and create a PR for it in the original repository:

🔍

mise

View Details ▼

Manage language runtimes like Node.js, Python, Ruby, Go, Java, etc and various tools.

mise plugins list-all

List all available plugins:

mise plugins add {{name}}

Install a plugin:

mise ls-remote {{name}}

List runtime versions available for install:

🔍

nix build

View Details ▼

Build a Nix expression (downloading from the cache when possible).
See also: `nix-build`, `nix flake`.

nix build {{nixpkgs#pkg}}

Build a package from nixpkgs, symlinking the result to `./result`:

nix build {{[-L|--print-build-logs]}} {{.#pkg}}

Build a package from a flake in the current directory, showing the build logs in the process:

nix build {{path/to/directory}}

Build the default package from a flake in some directory:

🔍

nix develop

View Details ▼

Run a Bash shell that provides the build environment of a derivation.

nix develop {{nixpkgs#pkg}}

Start a shell with all dependencies of a package from nixpkgs available:

nix develop

Start a development shell for the default package in a flake in the current directory:

configurePhase; buildPhase

In that shell, configure and build the sources:

🔍

nix profile

View Details ▼

Install, update, and remove packages from Nix profiles.

nix profile add {{nixpkgs#pkg1 nixpkgs#pkg2 ...}}

Install packages from nixpkgs into the default profile:

nix profile add {{github:owner/repo/pkg}} --profile {{path/to/directory}}

Install a package from a flake on GitHub into a custom profile:

nix profile list

List packages currently installed in the default profile:

🔍

nix run

View Details ▼

Run an application from a Nix flake.
See also: `nix flake`.

nix run

Run the default application in the flake in the current directory:

nix run nixpkgs#{{pkg}}

Run a command whose name matches the package name from nixpkgs (if you want a different command from that package, see `tldr nix shell`):

nix run nixpkgs#{{vim}} -- {{path/to/file}}

Run a command with provided arguments:

🔍

parallel

View Details ▼

Run commands on multiple CPU cores.
See also: `xargs`.

parallel gzip ::: {{path/to/file1 path/to/file2 ...}}

Gzip several files at once, using all cores:

ls *.txt | parallel {{[-j|--jobs]}} 4 gzip

Read arguments from `stdin`, run 4 jobs at once:

parallel convert {} {.}.png ::: *.jpg

Convert JPEG images to PNG using replacement strings:

🔍

ssh

View Details ▼

Secure Shell is a protocol used to securely log onto remote systems.
It can be used for logging or executing commands on a remote server.

ssh {{username}}@{{remote_host}}

Connect to a remote server:

ssh {{username}}@{{remote_host}} -i {{path/to/key_file}}

Connect to a remote server with a specific [i]dentity (private key):

ssh {{username}}@10.0.0.1 -p {{2222}}

Connect to a remote server with IP `10.0.0.1` and using a specific [p]ort (Note: `10.0.0.1` can be shortened to `10.1`):

🔍

task

View Details ▼

To-do list manager.

task add {{description}} due:{{tomorrow}}

Add a new task which is due tomorrow:

task {{task_id}} modify priority:{{H|M|L}}

Update a task's priority:

task {{task_id}} done

Complete a task:

🔍

tts

View Details ▼

Synthesize speech.

tts --text "{{text}}"

Run text-to-speech with the default models, writing the output to "tts_output.wav":

tts --list_models

List provided models:

tts --model_info_by_idx {{model_type/model_query_idx}}

Query info for a model by idx:

🔍

vibe

View Details ▼

Natural language code assistant for the terminal, powered by MistralAI.
Reads and edits files in your current directory to fulfill requests.

vibe

Start an interactive Mistral Vibe session in the current directory:

vibe {{[-c|--continue]}}

Resume the most recent Vibe session in the current directory:

vibe --setup

Start an interactive Vibe session to setup an API key then exit:

🔍

apk

View Details ▼

Alpine Linux package management tool.

apk upgrade {{[-U|--update-cache]}}

Update repository indexes and upgrade all packages:

apk update

Only update repository indexes:

apk add {{package}}

Install a new package:

// repository documentation