Skip to main content

Minimal contract-driven coding-agent runtime + CLI

Project description

Hexi v0.1.0

Hexi is a minimal, contract-driven (hexagonal) coding-agent runtime and CLI. It runs exactly one agent step per invocation against a local git repository.

Test Drive (5 Minutes)

Run this in any local git repo you can safely modify.

  1. Install Hexi:
pip install -e .

Optional OpenRouter support:

pip install -e ".[openrouter]"
  1. Initialize Hexi files:
hexi init
  1. Onboard provider/model and key:
hexi onboard

When prompted, pick any provider. For OpenRouter providers, install the optional extra and provide OPENROUTER_API_KEY.

  1. Verify setup:
hexi doctor

Expected: provider/model printed and Doctor check passed.

  1. Run one agent step:
hexi run "Add one tiny test for an existing function and run pytest"
  1. Inspect what changed:
hexi diff
tail -n 20 .hexi/runlog.jsonl
  1. If you want to switch providers later:
hexi onboard

Re-run onboarding to update .hexi/local.toml.

What it is

  • Python package (PyPI distribution): hexicodes
  • Core contracts in hexi.core
  • Side-effect adapters in hexi.adapters
  • One-step execution with structured event logging to .hexi/runlog.jsonl

What it is not

  • No daemon, no background workers, no web UI
  • No MCP server and no SQLite in v0.1.0
  • No multi-agent orchestration

Install

pip install -e .

OpenRouter support (optional)

  • HTTP adapter only (openrouter_http provider):
pip install -e ".[openrouter-http]"
  • SDK adapter only (openrouter_sdk provider):
pip install -e ".[openrouter-sdk]"
  • Both OpenRouter adapters:
pip install -e ".[openrouter]"

Dev/test dependencies:

pip install -e ".[dev]"

CLI

  • hexi --help or hexi help : show command help
  • hexi --version or hexi version : print installed version
  • hexi init : create .hexi/config.toml, .hexi/local.toml, .hexi/runlog.jsonl
  • hexi onboard : interactive setup for provider/model and optional local key paste
  • hexi new : scaffold a project from built-in Hexi templates (non-interactive by default)
  • hexi demo : fancy interactive flow with random/model-generated ideas and template scaffolding
  • hexi run "<task>" : execute one agent step and emit structured events
  • hexi diff : show current git diff
  • hexi doctor : verbose diagnostics; use --probe-model for live “What model are you?” check
  • hexi plan-check --file plan.json : validate/troubleshoot ActionPlan JSON directly

Documentation (MkDocs + Read the Docs)

Build docs locally:

pip install -e ".[docs]"
mkdocs serve

Read the Docs config is in .readthedocs.yml.

Configuration design choices

Hexi uses layered TOML configuration:

  1. .hexi/config.toml (repo defaults)
  2. .hexi/local.toml (local machine overrides)
  3. Environment variables (recommended for secrets)

For secrets, env vars are preferred. hexi onboard can write keys to .hexi/local.toml for local/testing convenience.

Config shape (.hexi/config.toml)

[model]
provider = "openai_compat" # openrouter_http | openrouter_sdk | openai_compat | anthropic_compat
model = "gpt-4o-mini"

[providers.openrouter_http]
base_url = "https://openrouter.ai/api/v1"
api_style = "openai" # openai | anthropic

[providers.openrouter_sdk]
base_url = "https://openrouter.ai/api/v1"

[providers.openai_compat]
base_url = "https://api.openai.com/v1"

[providers.anthropic_compat]
base_url = "https://api.anthropic.com"

[policy]
allow_commands = ["git status", "git diff", "pytest", "python -m pytest"]
max_diff_chars = 4000
max_file_read_chars = 4000

Local override example (.hexi/local.toml)

[model]
provider = "openrouter_http"
model = "anthropic/claude-sonnet-4-6"

[providers.openrouter_http]
api_style = "anthropic"

[secrets]
openrouter_api_key = "..."

Env vars

  • OPENROUTER_API_KEY for openrouter_http and openrouter_sdk
  • OPENAI_API_KEY for openai_compat
  • ANTHROPIC_API_KEY for anthropic_compat

Packaging

  • Distribution name: hexicodes
  • Console script: hexi
  • Optional extras:
    • openrouter-http
    • openrouter-sdk
    • openrouter
    • docs
    • dev

Included example projects

  • examples/todo_refiner : minimal CLI-wrapper agent integration
  • examples/embedded_step : direct embedded RunStepService usage
  • examples/policy_loop : multi-step user-gated loop using repeated hexi run

Included Hexi-native templates

  • templates/hexi-python-lib : tested library starter with Hexi wiring
  • templates/hexi-fastapi-service : FastAPI service starter with Hexi wiring
  • templates/hexi-typer-cli : Typer CLI starter with Hexi wiring
  • templates/hexi-data-job : data job starter with dry-run and Hexi wiring
  • templates/hexi-agent-worker : embedded Hexi runtime starter

Provenance

Made with ❤️ from 🇵🇪. El Perú es clave 🔑.

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

hexicodes-0.1.0.tar.gz (29.6 kB view details)

Uploaded Source

Built Distribution

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

hexicodes-0.1.0-py3-none-any.whl (27.6 kB view details)

Uploaded Python 3

File details

Details for the file hexicodes-0.1.0.tar.gz.

File metadata

  • Download URL: hexicodes-0.1.0.tar.gz
  • Upload date:
  • Size: 29.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.1

File hashes

Hashes for hexicodes-0.1.0.tar.gz
Algorithm Hash digest
SHA256 4dec5adaca8877c341f8d334af76281d3333c0556c293efabd20464e32f9ff59
MD5 aa8acb7be9acccd8b9ad61123f7a9427
BLAKE2b-256 dd5a65ec269b169fb13e6d508c4998640865844d5d0c097bd03fec81b7f2bdef

See more details on using hashes here.

File details

Details for the file hexicodes-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: hexicodes-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 27.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.1

File hashes

Hashes for hexicodes-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6623d44587670e8d6b45bd46816c96850c1ab57a1e1aa71f0342c466bb60ad38
MD5 5084b7f004b8fc986cc00eb926b9d6c4
BLAKE2b-256 41f9f447ac91d3e742a35772ba31717ae0a7b401c355884d7311057c9194fe8b

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