vibekit
A browser-based front-end for the Kiro CLI: chat with an AI coding agent from any device, with a live terminal, a file editor, and git/forge workflows in the same tab.
Vibekit runs kiro-cli as an Agent Client Protocol (ACP) subprocess and wraps it in a full workspace UI. The server is the single source of truth: every action is persisted and echoed to every connected client over Server-Sent Events, so a conversation open on your phone and your desktop stays in sync.
Published as a multi-arch (amd64 + arm64) container image on GHCR (ghcr.io/cplieger/vibekit) and Docker Hub (cplieger/vibekit).
⚠️ Alpha software
Vibekit is in alpha and under active development. Any update can introduce a breaking change with no migration path to the API, the stored chat format, configuration, or behavior. Pin a specific image tag instead of latest, and check the release notes before upgrading.
⚠️ It drives an AI agent with shell and file access
Vibekit controls an agent that can run shell commands and read and write your files under /workspace, and it exposes kiro-cli's stored credentials. It has no built-in authentication: anyone who can reach the port can use it. Before exposing it beyond your own machine, do one (ideally both) of:
- put it behind an authenticating reverse proxy (Caddy forward-auth, oauth2-proxy, Authentik, …), and/or
- keep the published port on loopback or a private network.
Signing in from the UI authenticates kiro-cli to AWS (the agent's identity); it is not a gate on vibekit itself. <!-- hub-overview END --
Run
# compose.yaml
services:
vibekit:
image: ghcr.io/cplieger/vibekit:latest
container_name: vibekit
user: "${PUID:-1000}:${PGID:-1000}" # from .env; must own the bind mounts
ports:
- "9847:9847"
volumes:
- "./config:/config" # chats, kiro-cli auth/state, tools
- "./workspace:/workspace" # your repos
- "./uploads:/uploads" # files you attach in the composerinit: true # required: reaps the processes an agent's terminal commands leave behind
Before the first start, create the bind-mount directories and give them to that UID (1000 unless you set `PUID`/`PGID`). The entrypoint does not `chown` them, so a root-owned host directory makes first boot fail with `failed to create required directories`:
mkdir -p ./config ./workspace ./uploads chown -R "${PUID:-1000}:${PGID:-1000}" ./config ./workspace ./uploads
To skip managing host ownership, run as root instead with `user: "0:0"` (less secure).
Open <http://localhost:9847>. The UI comes up right away, and `kiro-cli` is downloaded and verified in the background on first boot. Until that finishes, health reports `503` and chats say so, while files, git, settings and the shell already work. Then sign in to `kiro-cli` and start chatting.
## Capabilities
Vibekit is a full workspace in the browser, and everything below is reachable from any device viewing the same server.
**Chat:** conversations kept in sync across devices over SSE, streaming markdown responses, and collapsible reasoning ("thinking") blocks. Send mid-turn and your message joins the running turn. Prefix a message with `!` to run a shell command. `/compact` compacts the context now, `/drop` ends a wedged turn, and `/goal` sets an objective the agent works toward across turns until it meets the goal or its iteration budget runs out. Attach files by drag-drop, paste, or the composer's `+` menu; PDF, CSV and Office documents reach the agent as documents, images as images, and anything else as a path it opens with its file tools. Also find-in-chat, per-chat export, a cross-chat search, a History view over past conversations and workflow runs, and configurable chat retention.
**Agent control:** switch modes (Default, Spec, Quick Spec, Bug Fix, Plan, Autonomous, plus your own workspace agents from `.kiro/agents/`), switch models mid-conversation, set reasoning effort from low to max, answer permission prompts, structured questions and MCP elicitation forms, and fork a tangent that leaves the original chat untouched. Subagent work renders as collapsible cards, and the agent's own terminals get tabs in the shell panel.Editing, files and terminal: a file browser, a recursive content search with include and exclude patterns, a syntax-highlighted editor with deep links to a line (#L<n), diffs against the last save or against git HEAD, a merge-conflict resolver that takes ours, theirs or both per hunk, and a PTY shell (via web-terminal-engine) that survives sleep and network drops.
Version control and forges for GitHub, GitLab, Codeberg, and Gitea/Forgejo: stage, commit, diff and switch branches; list, create, merge and close pull requests, with AI-written commit messages and descriptions; connect accounts by OAuth device flow or a token, driven by the gh / glab / tea CLIs.