Skip to main content

Lumagent CLI - a terminal coding agent

Project description

Terminal Coding Agent (Lumagent CLI)

Lumagent CLI Banner

A local terminal coding assistant with provider switching, tool-calling, and safety rails for file + command operations.

Features

  • Interactive chat loop with tool chaining
  • Provider support:
    • anthropic (/v1/messages)
    • openai (/v1/responses)
    • grok (xAI OpenAI-compatible chat/completions)
    • groq (OpenAI-compatible chat/completions)
  • Startup provider preference: anthropic -> openai -> grok -> groq
  • Curated model lists per provider (with OpenAI dynamic filtering against /v1/models)
  • Working indicator while model calls are in flight (Lumagent is working...)
  • Built-in malformed tool-call recovery (one automatic retry if JSON tool call is broken)

Current Model Sets

  • anthropic
    • claude-opus-4-6
    • claude-sonnet-4-6
    • claude-haiku-4-5-20251001 (default)
  • openai
    • gpt-4o-mini (default)
    • gpt-5-mini
  • grok
    • grok-4-1-fast-reasoning (default)
    • grok-code-fast-1
  • groq
    • llama-3.1-8b-instant (default)

Notes:

  • OpenAI model IDs are fetched from /v1/models and intersected with the allowlist above.
  • You can override the OpenAI allowlist with OPENAI_MODELS_ALLOWLIST (comma-separated IDs).
  • Codex models are not currently supported in v0.1.3.

Tooling

Tools available:

  • read_file
  • write_file
  • apply_diff
  • list_dir
  • make_dir
  • delete_path
  • run_cmd
  • git_cmd
  • search_code

Key behaviors:

  • File paths are restricted to the repo root (no absolute paths, no .. escape).
  • delete_path supports recursive directory deletion (default recursive=true).
  • write_file refuses to overwrite existing files unless overwrite=true.
  • apply_diff supports targeted edits using exact find/replace with optional replace_all=true.
  • apply_diff returns a unified diff summary (+/-) and stores the full last diff for terminal viewing.

Confirmations

Lumagent asks y/N confirmation before:

  • delete_path
  • apply_diff
  • write_file when overwrite=true
  • git push
  • git rm

CLI Commands

  • /models opens interactive provider/model picker
  • /apikeys opens API key setup/update flow

Project Layout

.
├─ .env.example
├─ pyproject.toml
├─ README.md
└─ baxter/
   ├─ __init__.py
   ├─ baxter_cli.py
   ├─ providers.py
   └─ tools/
      ├─ __init__.py
      ├─ registry.py
      ├─ safe_path.py
      ├─ read_file.py
      ├─ write_file.py
      ├─ apply_diff.py
      ├─ list_dir.py
      ├─ make_dir.py
      ├─ delete_path.py
      ├─ run_cmd.py
      ├─ git_cmd.py
      └─ search_code.py

Requirements

  • Python 3.10+
  • At least one API key:
    • ANTHROPIC_API_KEY
    • OPENAI_API_KEY
    • XAI_API_KEY
    • GROQ_API_KEY

Setup (Developer)

  1. Create and activate a virtual environment.

Windows (cmd):

python -m venv .venv
.venv\Scripts\activate.bat

Windows (PowerShell):

python -m venv .venv
.venv\Scripts\Activate.ps1

macOS/Linux:

python3 -m venv .venv
source .venv/bin/activate
  1. Install editable:
pip install -e .
  1. Create .env from .env.example and set keys:
GROQ_API_KEY=...
XAI_API_KEY=...
OPENAI_API_KEY=...
ANTHROPIC_API_KEY=...
# optional:
# OPENAI_MODELS_ALLOWLIST=gpt-4o-mini,gpt-5-mini

The CLI also loads user-level keys from ~/.lumagent/.env first, then applies project .env as an override.

Setup (User install via pip)

Current PyPI release: lumagent==0.1.3

  1. Install (or pin to this release):
pip install lumagent==0.1.3
  1. Upgrade later:
pip install -U lumagent
  1. Configure keys once per machine in:
  • Windows: %USERPROFILE%\.lumagent\.env
  • macOS/Linux: ~/.lumagent/.env

Example:

GROQ_API_KEY=...
XAI_API_KEY=...
OPENAI_API_KEY=...
ANTHROPIC_API_KEY=...
# optional:
# OPENAI_MODELS_ALLOWLIST=gpt-4o-mini,gpt-5-mini

If keys are missing on startup, Lumagent now offers an interactive one-time setup prompt and writes keys to ~/.lumagent/.env.

  1. Open any project folder and run:
lumagent

Environment Setup Smoke Test

Use this to verify first-run key loading and precedence.

  1. Missing keys path:
Remove-Item Env:OPENAI_API_KEY -ErrorAction SilentlyContinue
Remove-Item Env:ANTHROPIC_API_KEY -ErrorAction SilentlyContinue
Remove-Item Env:XAI_API_KEY -ErrorAction SilentlyContinue
Remove-Item Env:GROQ_API_KEY -ErrorAction SilentlyContinue
Remove-Item "$HOME\.lumagent\.env" -ErrorAction SilentlyContinue
lumagent

Expected: startup warning about missing keys.

  1. User-level key file path:
mkdir $HOME\.lumagent -Force
@"
OPENAI_API_KEY=your_real_key
"@ | Set-Content "$HOME\.lumagent\.env"
lumagent

Expected: no missing-key warning.

  1. Project-level override path:
@"
XAI_API_KEY=your_real_grok_key
GROQ_API_KEY=your_real_groq_key
"@ | Set-Content ".env"
lumagent

Expected: local .env values override user-level values for overlapping keys.

Run

lumagent

or:

python -m baxter.baxter_cli

Command Safety Model

run_cmd allowlist:

  • python
  • python3
  • pip
  • pip3
  • git
  • node
  • npm
  • npx
  • python.exe
  • pip.exe
  • git.exe
  • node.exe
  • npm.cmd
  • npx.cmd

run_cmd process behavior:

  • Use detach=true to start long-running commands (example: ["npm","run","dev"]) in the background.
  • Detached runs return pid and a background status message in the terminal UI.
  • To stop a detached process, call run_cmd with stop_pid (only PIDs started by this Lumagent session are stoppable).
  • On Windows, run_cmd automatically retries common shims (example: npm -> npm.cmd) if the bare binary is not found.

git_cmd subcommand allowlist:

  • status
  • log
  • diff
  • show
  • branch
  • switch
  • checkout
  • add
  • commit
  • push
  • pull
  • fetch
  • remote
  • rev-parse
  • restore
  • rm
  • mv
  • stash

Additional protections:

  • No shell execution for command tools
  • Path traversal/root escape blocked
  • Selected risky git flags blocked (--git-dir, --work-tree, -C, etc.)
  • Per-tool timeout bounds

Troubleshooting

  • Missing key error:
    • Verify .env has the expected API key and restart Lumagent.
  • OpenAI tool-call/JSON issues:
    • Lumagent now does one automatic repair retry for malformed tool-call JSON.
  • OpenAI model list too large:
    • Set OPENAI_MODELS_ALLOWLIST explicitly.
  • git not found on PATH:
    • Install Git and restart terminal.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lumagent-0.1.3.tar.gz (34.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lumagent-0.1.3-py3-none-any.whl (37.4 kB view details)

Uploaded Python 3

File details

Details for the file lumagent-0.1.3.tar.gz.

File metadata

  • Download URL: lumagent-0.1.3.tar.gz
  • Upload date:
  • Size: 34.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for lumagent-0.1.3.tar.gz
Algorithm Hash digest
SHA256 4cc7b0ad7319df986e9fc96acfd7b6b9caf2d8ce351f877729e2f881fcbc5ca0
MD5 93a641ff075ed22e3325f9e1225578a8
BLAKE2b-256 f199428998a73a5ce4cef6e0f9139b897c1ec060c2b490389e83cc3530eae03d

See more details on using hashes here.

File details

Details for the file lumagent-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: lumagent-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 37.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for lumagent-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 c44c7a254c3e56749031c2a463b7dd10a2f3460769773c224bd00801e74fa056
MD5 c37c4d4f3f9afc2a66fa5220ec544886
BLAKE2b-256 bb5a747b598c35ab180fc5542862fa1dc6de9f62e44b2344c87052018be20a9e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page