Eliza Code
An async coding agent terminal app built on ElizaOS - like Claude Code, but with fully asynchronous task execution and continuous conversation.
Features
- Dual-Pane Terminal UI: Chat pane for conversation, task pane for monitoring progress
- Async Task Execution: Tasks run in the background while you continue chatting
- Multiple Chat Rooms: Create separate conversation contexts
- Coding Tools: File operations, shell commands, search, and more
- Task Context Injection: The agent knows about ongoing tasks and their progress
Prerequisites
- Bun runtime
- OpenAI or Anthropic API key
Installation
cd eliza-code
bun install
Configuration
Copy the environment example and add your API key:
cp .env.example .env
# Edit .env and add your OPENAI_API_KEY or ANTHROPIC_API_KEY
For OpenAI-compatible endpoints, ELIZA_OPENCODE_* forwarding, and direct
provider selection, see MODEL_PROVIDERS.md.
Usage
Start Eliza Code:
bun start
Keyboard Shortcuts
| Key | Action |
|---|---|
Enter |
Send message |
Tab |
Toggle focus between chat/task panes |
Ctrl+N |
Create new chat room |
Ctrl+Q |
Quit |
Ctrl+↑/↓ |
Scroll chat history or task output |
↑/↓ |
Navigate task list (when task pane focused) |
Example Commands
Once running, you can chat with the agent:
> list files in src
> read the package.json
> search for "TODO" in the codebase
> run npm test
> create a task to implement user authentication
Architecture
eliza-code/
├── src/
│ ├── index.ts # Interactive TUI entry point (`eliza-code`)
│ ├── acp.ts # Agent Client Protocol entry point (`eliza-code-acp`)
│ ├── cli.ts # CLI arg parsing / mode select
│ ├── App.ts # Root TUI wiring
│ ├── components/ # Terminal UI components (@elizaos/tui)
│ │ ├── MainScreen.ts # Composes status bar + chat/task split
│ │ ├── ChatPane.ts
│ │ ├── TaskPane.ts
│ │ ├── StatusBar.ts
│ │ └── HelpOverlay.ts
│ ├── lib/
│ │ ├── agent.ts # Eliza runtime setup (loads plugin-openai etc.)
│ │ ├── model-provider.ts # Provider selection (ELIZA_CODE_PROVIDER)
│ │ ├── session.ts / store.ts # Session + Zustand state
│ │ └── cwd.ts # CWD tracking (no filesystem listing)
│ └── types.ts # TypeScript types
└── scripts/
└── write-dist-tsconfig.mjs # Emits a paths-free dist/tsconfig.json (see Gotcha below)
Do not remove
scripts/write-dist-tsconfig.mjsfrom thebuildscript. Bun applies the nearest tsconfig'scompilerOptions.pathsat runtime, and this package's tsconfig maps the externalized@elizaos/plugin-*to their types-only.d.ts. Without the emitted paths-freedist/tsconfig.json,bun dist/index.jsloads a.d.tsand throwsReferenceErroron first plugin import. The cockpit's PTY terminal (@elizaos/plugin-pty) spawns exactly thisdist/index.jsviaELIZA_CODE_BIN, so dropping the step silently re-breaks every cockpit terminal spawn (#11043).
Available Actions
The agent can use these actions:
In this example, the main agent is an orchestrator (no filesystem tools). It uses:
- @elizaos/plugin-agent-orchestrator: task creation + lifecycle (CREATE_TASK, LIST_TASKS, etc.)
- @elizaos/plugin-shell: shell execution (when enabled) for high-level commands
All file reading/writing/editing and detailed repo work happens inside worker sub-agents (Codex, Claude Code, SWE-agent, etc.).
How It Works
- Chat with the agent in the left pane
- Watch tasks execute in the right pane
- Tasks run asynchronously - you can continue chatting while they work
- The agent receives task context so it knows what's happening
- Switch between tasks to view different outputs
Development
# Run with watch mode
bun dev
# Type check
bun run tsc --noEmit
Built With
- ElizaOS - Agent framework
- @elizaos/tui - Terminal UI framework
- Zustand - State management
- Claude - AI model via Anthropic plugin