{"id":33609314,"url":"https://github.com/afittestide/asimi-cli","last_synced_at":"2026-02-01T11:05:50.889Z","repository":{"id":319098880,"uuid":"1050205709","full_name":"afittestide/asimi-cli","owner":"afittestide","description":"An opinionated, safe \u0026 fast coding agent","archived":false,"fork":false,"pushed_at":"2026-01-26T10:19:18.000Z","size":80657,"stargazers_count":14,"open_issues_count":30,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-27T00:27:29.330Z","etag":null,"topics":["ai-agents","devtool","tui"],"latest_commit_sha":null,"homepage":"https://asimi.dev","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/afittestide.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-09-04T05:23:52.000Z","updated_at":"2026-01-08T19:16:52.000Z","dependencies_parsed_at":null,"dependency_job_id":"f2d4bae7-59cb-48eb-8517-4039d6c7fe9b","html_url":"https://github.com/afittestide/asimi-cli","commit_stats":null,"previous_names":["tuzig/asimi-cli","afittestide/asimi-cli"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/afittestide/asimi-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/afittestide%2Fasimi-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/afittestide%2Fasimi-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/afittestide%2Fasimi-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/afittestide%2Fasimi-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/afittestide","download_url":"https://codeload.github.com/afittestide/asimi-cli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/afittestide%2Fasimi-cli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28977317,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-01T09:57:52.632Z","status":"ssl_error","status_checked_at":"2026-02-01T09:57:49.143Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-agents","devtool","tui"],"created_at":"2025-11-30T19:02:04.844Z","updated_at":"2026-02-01T11:05:50.883Z","avatar_url":"https://github.com/afittestide.png","language":"Go","readme":"# Asimi CLI\n\n[![Tests](https://img.shields.io/github/actions/workflow/status/afittestide/asimi-cli/ci.yml?branch=main\u0026label=tests)](https://github.com/afittestide/asimi-cli/actions/workflows/ci.yml?query=branch%3Amain)\n\n\u003e A safe, opinionated coding agent\n\nAsimi is an opinionated, safe \u0026 fast coding agent for the terminal\n\n![Asimi Demo](demo.gif)\n\n## ✨ Features\n\n- 📦 **Integrated Podman Sandboxes** - Agent's shell runs in its own container\n- 🎨 **vi mimicry** - Asimi is based on the fittest dev tool and its reincarnations vim and neovim\n- 🤖 **Multiple AI Providers** - Support for Ollama, Claude Pro/Max and OpenAI API v1 compatible services\n- 🧹 **Less Clutter** - Asimi's special files are under `.agents` directory and TOML is used for .conf\n- 🔧 **Fast Shell** - Asimi's shell runs in a container and is \u003e100 times faster than the others\n- 📊 **Context Awareness** - Smart token counting and context visualization\n- 🎯 **Session Management** - Save and resume your coding sessions\n\n## 🚀 Quick Start\n\nFirst, there are two great tools required on your system:\n\n- [Podman](https://podman.io/docs/installation) for the sandbox: like `docker` but safer\n- [Just](https://github.com/casey/just) to collect all the scripts in a Justfile\n\n\nThen, choose your installer flavor:\n\n### One-liner (Recommended)\n\n```bash\ncurl -fsSL https://asimi.dev/installer | bash\n```\n\nOr with wget:\n```bash\nwget -qO- https://asimi.dev/installer | bash\n```\n\n**Options:**\n- `ASIMI_INSTALL_DIR=/path/to/dir` - Custom installation directory\n- `ASIMI_VERSION=v0.1.0` - Install a specific version\n\n### brew\n\n```bash\nbrew tap afittestide/tap\nbrew install asimi\n```\n\n### Go\n\n```bash\ngo install github.com/afittestide/asimi@latest\n```\n\n### Binaries\n\nDownload the binary from your platform from [latest releases](https://github.com/afittestide/asimi-cli/releases/latest) and copy to your favorite bin directory e.g, `/usr/local/bin`.\n\n### First Steps\n\nTo start Asimi in interactive mode, type `asimi`.\n\n1. **Initialize your repo:**\n    `:init` - Creates `AGENTS.md` and `Justfile` if missing, and prepares the sandbox image\n\n2. **Check your container:**\n    `:!uname -a` - Runs shell commands in a persistent, containerized bash\n    `:!pwd` - Should be the same path as on your host\n\n## 🏝️ The Sandbox\n\nAsimi uses podman to run the agent's shell in its own container.\npodman is compatible with docker so there's no need to learn new commands.\nAsimi uses it instead of docker because it's more secure - on linux it doesn't require a daemon.\n\nThe sandbox is based on `.agents/sandbox/Dockerfile` which is created by the `init` command. \nTo build the image run `just build-sandbox` for an image named as in:\n`asimi-sandbox-afittestide-asimi-cli`. \nAsimi will launch a container based on this image the first time the model calls the shell tool.\nThe container will stay up as long as the program is running. \nOnce the program exits, the container is shutdown and removed.\n\nSome commands, like gh, can't run in the sandbox.\nFor these commands you can add a special exception in the config file.\n\nTo run commands in the container use `:!\u003cshell command\u003e`.\n\n### Configuration Options\n\nThe sandbox can be configured in `.agents/asimi.conf` (project-level) or `~/.config/asimi/asimi.conf` (user-level).\n\n\n```toml\n[run_shell_command]\n# Regex patterns for commands to run on the host (requires user approval)\nrun_on_host = ['^gh\\s', '^podman\\s']\n# Regex patterns for commands to run on the host WITHOUT approval (safe, read-only)\nsafe_run_on_host = ['^gh\\s+(issue|pr)\\s+(view|list)', '^git\\s+status']\n\n[container]\n# Custom container image name (default: asimi-sandbox-\u003cproject-name\u003e:latest)\nimage_name = \"localhost/my-custom-sandbox:latest\"\n\n# Additional mount points for the container\n# Useful for mounting secrets, caches, or other project directories\n[[container.additional_mounts]]\nsource = \"/path/to/host/dir\"\ndestination = \"/path/in/container\"\n\n[[container.additional_mounts]]\nsource = \"/another/host/path\"\ndestination = \"/another/container/path\"\n```\n\n**Environment Variables:**\n\nYou can also configure the sandbox using environment variables:\n\n- `ASIMI_CONTAINER_IMAGE_NAME` - Override the container image name\n- `ASIMI_CONTAINER_ADDITIONAL_MOUNTS` - JSON string of additional mounts (e.g., `[{\"source\":\"/host\",\"destination\":\"/container\"}]`)\n\n\n## ⌨️ vi FTW\n\nAsimi mimics the vi/vim/neovim interface and extends the traditional modes:\n\n### Traditional Modes\n\n- **Insert Mode** For typing your prompts\n- **Normal Mode** Navigation and editing the prompt\n- **Command Mode** Entering agents commands\n   - `:help` - Show help \n   - `:context` - View token usage and context\n   - `:new` - Start a new conversation\n   - `:resume` - resume an old session\n\n### New Modes\n\n- **Scroll Mode** Use CTRL-B to enter the mode and scroll with your keys\n- **Select Mode** For choosing a session to resume, a model to connect to, etc.\n\n## 🗺️ Roadmap\n\nAsimi 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 🪬🪬🪬\n\n| Feature | Description |\n|---------|-------------|\n| [#56 - MCP Support](https://github.com/afittestide/asimi-cli/issues/56) | Model Context Protocol integration |\n| [#110 - Streaming Improvements](https://github.com/afittestide/asimi-cli/issues/110) | Better streaming response handling |\n| [#24 - Sub-agents \u0026 Roles](https://github.com/afittestide/asimi-cli/issues/24) | Task delegation with orchestrator role |\n| [#8 - Git Integration](https://github.com/afittestide/asimi-cli/issues/8) | `:branch` command and tighter git workflows |\n| A few directories | While flat is better than nested, there comes a time for dirs|\n\u003e 💡 Have a feature request? [Open an issue](https://github.com/afittestide/asimi-cli/issues/new)!\n\n## 🛠️ Development\n\n## Principles\n\n- Before the 🦙 comes the dev\n- Mimicking is better than innovation\n- ex/vi/vim/neovim are the best TUI ever made\n- User's host is sacred and 🦙 access should be as restricted\n- Integrations are great, let's have more of these\n\n### Prerequisites\n\n- Go 1.25 or higher\n- `just bootstrap`\n\n### Common Tasks\n\nWe're using a `Justfile` to collect all our scripts.\nIf you need a new script please add a recipe in the Justfile.\n\n```bash\n# List recipes\njust\n\n# run Asimi\njust run\n\n# Run tests\njust test\n\n# measure shell's  performance\njust measure\n```\n\n### Project Structure\n\nFlat. Please refrain from adding directories and files.\n\n## 📦 Libraries\n\n- **[LangChainGo](https://github.com/afittestide/langchaingo)** - Using our own fork for model communications\n- **[Bubble Tea](https://github.com/charmbracelet/bubbletea)** - Terminal UI framework\n- **[Koanf](https://github.com/knadh/koanf)** - Configuration management\n- **[Kong](https://github.com/alecthomas/kong)** - CLI argument parser\n- **[Glamour](https://github.com/charmbracelet/glamour)** - Markdown rendering\n\n## 🔒 Security\n\nAsimi takes security seriously:\n\n- API keys are stored securely in your system keyring\n- No data is sent to third parties except your chosen AI provider\n- Shell commands are executed in a containerized sandbox\n\n## 🤝 Contributing\n\nWe welcome contributions! Here are some ways you can help:\n\n1. **Report bugs** - Open an issue with details\n2. **Suggest features** - Share your ideas\n3. **Submit PRs** - Fix bugs or add features\n\n### Commit Message Style\n\nWe use present progressive tense for commit messages:\n\n```bash\n# Good\ngit commit -m \"feat: adding markdown support\"\ngit commit -m \"bug: fixing context overflow bug\"\n\n# Avoid\ngit commit -m \"added markdown support\"\ngit commit -m \"fixed context overflow bug\"\n```\n\n## 📝 Configuration\n\nAsimi stores its configuration in `~/.config/asimi/asimi.conf` (user-level) or `.agents/asimi.conf` (project-level).\nAfter first run the user's file is loaded with all the defaults.\n\n\n### Environment Variables\n\n#### General Configuration\n\nAll 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:\n- `ASIMI_LLM_PROVIDER=anthropic` sets `llm.provider`\n- `ASIMI_LLM_MODEL=claude-sonnet-4-20250514` sets `llm.model`\n- `ASIMI_UI_MARKDOWN_ENABLED=true` sets `ui.markdown_enabled`\n\n#### System Variables\n\n- **`EDITOR`** - Preferred text editor for `:export` commands (default: system default)\n- **`SHELL`** - Shell to use in container sessions (default: `/bin/bash`)\n\n#### API Keys \u0026 Authentication\n\n- **`ANTHROPIC_API_KEY`** - API key for Anthropic Claude models (alternative to OAuth)\n- **`ANTHROPIC_OAUTH_TOKEN`** - OAuth token for Anthropic API (takes priority over keyring). Supports three formats:\n  - Raw access token: `sk-ant-...`\n  - JSON format: `{\"access_token\":\"...\", \"refresh_token\":\"...\", \"expiry\":\"...\", \"provider\":\"anthropic\"}`\n  - Base64-encoded JSON (useful if copying from keychain)\n- **`ANTHROPIC_BASE_URL`** - Custom base URL for Anthropic API (e.g., for proxy or custom endpoint)\n- **`OPENAI_API_KEY`** - API key for OpenAI GPT models\n- **`GEMINI_API_KEY`** - API key for Google Gemini models\n\n#### OAuth Configuration (Advanced)\n\nFor custom OAuth setups, you can override the default OAuth endpoints:\n\n**Google/Gemini:**\n- `GOOGLE_CLIENT_ID` - OAuth client ID\n- `GOOGLE_CLIENT_SECRET` - OAuth client secret\n- `GOOGLE_AUTH_URL` - Authorization URL (optional, default: `https://accounts.google.com/o/oauth2/v2/auth`)\n- `GOOGLE_TOKEN_URL` - Token URL (optional, default: `https://oauth2.googleapis.com/token`)\n- `GOOGLE_OAUTH_SCOPES` - Comma-separated list of scopes (optional, default: generative-language scope)\n\n**OpenAI:**\n- `OPENAI_CLIENT_ID` - OAuth client ID\n- `OPENAI_CLIENT_SECRET` - OAuth client secret\n- `OPENAI_AUTH_URL` - Authorization URL\n- `OPENAI_TOKEN_URL` - Token URL\n- `OPENAI_OAUTH_SCOPES` - Comma-separated list of scopes (optional)\n\n**Anthropic:**\n- `ANTHROPIC_CLIENT_ID` - OAuth client ID\n- `ANTHROPIC_CLIENT_SECRET` - OAuth client secret\n- `ANTHROPIC_AUTH_URL` - Authorization URL\n- `ANTHROPIC_TOKEN_URL` - Token URL\n- `ANTHROPIC_OAUTH_SCOPES` - Comma-separated list of scopes (optional)\n\n#### Development \u0026 Testing\n\n- **`ASIMI_KEYRING_SERVICE`** - Override keyring service name (default: `asimi-cli`)\n- **`ASIMI_SKIP_GIT_STATUS`** - Skip git status checks (set to any value to enable)\n- **`ASIMI_VERSION`** - Override version string for testing\n\n\nLogs 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.\n\n\n## 🙏 Acknowledgments\n\n- Built with ❤️ using Go\n- Inspired by vi and his great grandchildren - the coding agents\n- Special thanks to the Bubble Tea and LangChainGo communities\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fafittestide%2Fasimi-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fafittestide%2Fasimi-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fafittestide%2Fasimi-cli/lists"}