Help us shape the future of Go! Take the 2026 Go Developer Survey

asimi

command module
v0.6.0-rc.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 14, 2026 License: MIT Imports: 61 Imported by: 0

README ΒΆ

Asimi CLI

Tests

A safe, opinionated coding agent

Asimi is an opinionated, safe & fast coding agent for the terminal

Asimi Demo

✨ Features

  • πŸ“¦ Integrated Podman Sandboxes - Agent's shell runs in its own container
  • 🎨 vi mimicry - Asimi is based on the fittest dev tool and its reincarnations vim and neovim
  • πŸ€– Multiple AI Providers - Support for Ollama, Claude Pro/Max and OpenAI API v1 compatible services
  • 🧹 Less Clutter - Asimi's special files are under .agents directory and TOML is used for .conf
  • πŸ”§ Fast Shell - Asimi's shell runs in a container and is >100 times faster than the others
  • πŸ“Š Context Awareness - Smart token counting and context visualization
  • 🎯 Session Management - Save and resume your coding sessions

πŸš€ Quick Start

First, there are two great tools required on your system:

  • Podman for the sandbox: like docker but safer
  • Just to collect all the scripts in a Justfile

Then, choose your installer flavor:

curl -fsSL https://asimi.dev/installer | bash

Or with wget:

wget -qO- https://asimi.dev/installer | bash

Options:

  • ASIMI_INSTALL_DIR=/path/to/dir - Custom installation directory
  • ASIMI_VERSION=v0.1.0 - Install a specific version
brew
brew tap afittestide/tap
brew install asimi
Go
go install github.com/afittestide/asimi@latest
Binaries

Download the binary from your platform from latest releases and copy to your favorite bin directory e.g, /usr/local/bin.

First Steps

To start Asimi in interactive mode, type asimi.

  1. Initialize your repo: :init - Creates AGENTS.md and Justfile if missing, and prepares the sandbox image

  2. Check your container: :!uname -a - Runs shell commands in a persistent, containerized bash :!pwd - Should be the same path as on your host

🏝️ The Sandbox

Asimi uses podman to run the agent's shell in its own container. podman is compatible with docker so there's no need to learn new commands. Asimi uses it instead of docker because it's more secure - on linux it doesn't require a daemon.

The sandbox is based on .agents/sandbox/Dockerfile which is created by the init command. To build the image run just build-sandbox for an image named as in: asimi-sandbox-afittestide-asimi-cli. Asimi will launch a container based on this image the first time the model calls the shell tool. The container will stay up as long as the program is running. Once the program exits, the container is shutdown and removed.

Some commands, like gh, can't run in the sandbox. For these commands you can add a special exception in the config file.

To run commands in the container use :!<shell command>.

Configuration Options

The sandbox can be configured in .agents/asimi.conf (project-level) or ~/.config/asimi/asimi.conf (user-level).

[run_shell_command]
# Regex patterns for commands to run on the host (requires user approval)
run_on_host = ['^gh\s', '^podman\s']
# Regex patterns for commands to run on the host WITHOUT approval (safe, read-only)
safe_run_on_host = ['^gh\s+(issue|pr)\s+(view|list)', '^git\s+status']

[container]
# Custom container image name (default: asimi-sandbox-<project-name>:latest)
image_name = "localhost/my-custom-sandbox:latest"

# Additional mount points for the container
# Useful for mounting secrets, caches, or other project directories
[[container.additional_mounts]]
source = "/path/to/host/dir"
destination = "/path/in/container"

[[container.additional_mounts]]
source = "/another/host/path"
destination = "/another/container/path"

Environment Variables:

You can also configure the sandbox using environment variables:

  • ASIMI_CONTAINER_IMAGE_NAME - Override the container image name
  • ASIMI_CONTAINER_ADDITIONAL_MOUNTS - JSON string of additional mounts (e.g., [{"source":"/host","destination":"/container"}])

⌨️ vi FTW

Asimi mimics the vi/vim/neovim interface and extends the traditional modes:

Traditional Modes
  • Insert Mode For typing your prompts
  • Normal Mode Navigation and editing the prompt
  • Command Mode Entering agents commands
    • :help - Show help
    • :context - View token usage and context
    • :new - Start a new conversation
    • :resume - resume an old session
New Modes
  • Scroll Mode Use CTRL-B to enter the mode and scroll with your keys
  • Select Mode For choosing a session to resume, a model to connect to, etc.

πŸ—ΊοΈ Roadmap

Asimi is just starting out. It's been used to develop itself since version 0.1.0, well over a month now and it rarely breaks πŸͺ¬πŸͺ¬πŸͺ¬

Feature Description
#56 - MCP Support Model Context Protocol integration
#110 - Streaming Improvements Better streaming response handling
#24 - Sub-agents & Roles Task delegation with orchestrator role
#8 - Git Integration :branch command and tighter git workflows
A few directories While flat is better than nested, there comes a time for dirs

πŸ’‘ Have a feature request? Open an issue!

πŸ› οΈ Development

Contributor Installation

To develop Asimi itself:

  1. Fork and clone:

    gh repo fork afittestide/asimi-cli --clone
    cd asimi-cli
    
  2. Install dependencies:

    just bootstrap    # Installs golangci-lint, goimports
    
  3. Build and run:

    just build        # Build binary
    just run          # Run with debug logging to ./asimi.log
    
  4. Initialize sandbox (first run):

    just build-sandbox
    
  5. Run tests:

    just test
    

Principles

  • Before the πŸ¦™ comes the dev
  • Mimicking is better than innovation
  • ex/vi/vim/neovim are the best TUI ever made
  • User's host is sacred and πŸ¦™ access should be as restricted
  • Integrations are great, let's have more of these
Prerequisites
  • Go 1.25 or higher
  • just bootstrap
Common Tasks

We're using a Justfile to collect all our scripts. If you need a new script please add a recipe in the Justfile.

# List recipes
just

# run Asimi
just run

# Run tests
just test

# measure shell's  performance
just measure
Project Structure

Flat. Please refrain from adding directories and files.

πŸ“¦ Libraries

πŸ”’ Security

Asimi takes security seriously:

  • API keys are stored securely in your system keyring
  • No data is sent to third parties except your chosen AI provider
  • Shell commands are executed in a containerized sandbox

🀝 Contributing

We welcome contributions! Here are some ways you can help:

  1. Report bugs - Open an issue with details
  2. Suggest features - Share your ideas
  3. Submit PRs - Fix bugs or add features
Commit Message Style

We use present progressive tense for commit messages:

# Good
git commit -m "feat: adding markdown support"
git commit -m "bug: fixing context overflow bug"

# Avoid
git commit -m "added markdown support"
git commit -m "fixed context overflow bug"

πŸ“ Configuration

Asimi stores its configuration in ~/.config/asimi/asimi.conf (user-level) or .agents/asimi.conf (project-level). After first run the user's file is loaded with all the defaults.

Environment Variables
General Configuration

All configuration options can be set via environment variables using the ASIMI_ prefix. The variable name should match the config path with underscores instead of dots. For example:

  • ASIMI_LLM_PROVIDER=anthropic sets llm.provider
  • ASIMI_LLM_MODEL=claude-sonnet-4-20250514 sets llm.model
  • ASIMI_UI_MARKDOWN_ENABLED=true sets ui.markdown_enabled
System Variables
  • EDITOR - Preferred text editor for :export commands (default: system default)
  • SHELL - Shell to use in container sessions (default: /bin/bash)
API Keys & Authentication
  • ANTHROPIC_API_KEY - API key for Anthropic Claude models (alternative to OAuth)
  • ANTHROPIC_OAUTH_TOKEN - OAuth token for Anthropic API (takes priority over keyring). Supports three formats:
    • Raw access token: sk-ant-...
    • JSON format: {"access_token":"...", "refresh_token":"...", "expiry":"...", "provider":"anthropic"}
    • Base64-encoded JSON (useful if copying from keychain)
  • ANTHROPIC_BASE_URL - Custom base URL for Anthropic API (e.g., for proxy or custom endpoint)
  • OPENAI_API_KEY - API key for OpenAI GPT models
  • GEMINI_API_KEY - API key for Google Gemini models
OAuth Configuration (Advanced)

For custom OAuth setups, you can override the default OAuth endpoints:

Google/Gemini:

  • GOOGLE_CLIENT_ID - OAuth client ID
  • GOOGLE_CLIENT_SECRET - OAuth client secret
  • GOOGLE_AUTH_URL - Authorization URL (optional, default: https://accounts.google.com/o/oauth2/v2/auth)
  • GOOGLE_TOKEN_URL - Token URL (optional, default: https://oauth2.googleapis.com/token)
  • GOOGLE_OAUTH_SCOPES - Comma-separated list of scopes (optional, default: generative-language scope)

OpenAI:

  • OPENAI_CLIENT_ID - OAuth client ID
  • OPENAI_CLIENT_SECRET - OAuth client secret
  • OPENAI_AUTH_URL - Authorization URL
  • OPENAI_TOKEN_URL - Token URL
  • OPENAI_OAUTH_SCOPES - Comma-separated list of scopes (optional)

Anthropic:

  • ANTHROPIC_CLIENT_ID - OAuth client ID
  • ANTHROPIC_CLIENT_SECRET - OAuth client secret
  • ANTHROPIC_AUTH_URL - Authorization URL
  • ANTHROPIC_TOKEN_URL - Token URL
  • ANTHROPIC_OAUTH_SCOPES - Comma-separated list of scopes (optional)
Development & Testing
  • ASIMI_KEYRING_SERVICE - Override keyring service name (default: asimi-cli)
  • ASIMI_SKIP_GIT_STATUS - Skip git status checks (set to any value to enable)
  • ASIMI_VERSION - Override version string for testing

Logs are rotated and stored in ~/.local/share/asimi/. When running with --debug, logs are instead written to asimi.log in the project root for quick inspection.

πŸ™ Acknowledgments

  • Built with ❀️ using Go
  • Inspired by vi and his great grandchildren - the coding agents
  • Special thanks to the Bubble Tea and LangChainGo communities

Documentation ΒΆ

Overview ΒΆ

Package main provides the main entry point and CLI for asimi.

Asimi - AI coding agent governed by a εΉ•εΊœ of six ministers and a sage

Directories ΒΆ

Path Synopsis
config
Package config provides configuration loading and management for asimi.
Package config provides configuration loading and management for asimi.
keyring
Package keyring provides OS keyring access for credential storage.
Package keyring provides OS keyring access for credential storage.
rpc
Package rpc implements the symmetric MessagePack RPC used between the shogunate daemon and the TUI.
Package rpc implements the symmetric MessagePack RPC used between the shogunate daemon and the TUI.
shogunateapi
Package shogunateapi defines the interface the TUI uses to talk to the Shogunate coordinator.
Package shogunateapi defines the interface the TUI uses to talk to the Shogunate coordinator.
types
Package types contains shared type definitions used across packages, breaking import cycles between rpc, shogunate, and shogunateapi.
Package types contains shared type definitions used across packages, breaking import cycles between rpc, shogunate, and shogunateapi.
utils
Package utils provides shared utility functions for message formatting.
Package utils provides shared utility functions for message formatting.
wire
Package wire defines helpers for the standard msgpack-RPC wire format used between the shogunate daemon and the TUI over a unix socket.
Package wire defines helpers for the standard msgpack-RPC wire format used between the shogunate daemon and the TUI over a unix socket.
Package shogunate contains the core ministers and orchestration logic.
Package shogunate contains the core ministers and orchestration logic.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL