A native Go AI coding agent for the terminal. Fast TUI, multi-agent delegation, streaming tool execution, persistent sessions, diff review, mouse control and keyboard-first workflows — packaged as a single Go binary.
Uinxed-Agent 2.0 is a ground-up rewrite of the original Node.js + React + Ink implementation. The new version keeps the coding-agent workflow while moving the runtime, TUI, storage, provider layer and tool system to Go.
The result is a smaller deployment surface, native terminal interaction, explicit concurrency and cancellation, and a UI architecture that is no longer coupled to the agent runtime.
No Node.js, npm or
node_modulesare required at runtime.
| Area | Uinxed-Agent 2.0 |
|---|---|
| Runtime | Native Go 1.25+ |
| TUI | Bubble Tea v2 + Bubbles v2 + Lip Gloss v2 |
| Markdown | Glamour v2 |
| Storage | Pure-Go SQLite (modernc.org/sqlite) + legacy config compatibility |
| Providers | OpenAI-compatible Chat Completions / Responses streaming |
| Agents | Primary agents + isolated delegated subagents |
| Input | Keyboard, multiline prompt, mouse click/wheel, command palette, @ completion |
| Distribution | Single binary; no Node runtime |
- Responsive terminal UI with large, medium and small layouts.
- Keyboard + mouse interaction with semantic hit regions, wheel routing and optional mouse capture.
- Streaming conversations with coalesced token updates instead of full-history redraws per token.
- Provider reasoning display with collapsible reasoning content and effort controls.
- Multi-agent runtime with
build,coding,plan, plus isolatedexplorer,codingandgeneralsubagents. - Concurrent delegation through a bounded tool scheduler and cancellable child sessions.
- Real coding tools for shell execution, file reads/writes/edits, grep, glob, URL fetch, web search, skills and Todo management.
- Safe file writes with project-root validation, symlink escape protection and atomic replace semantics.
- Persistent sessions backed by SQLite WAL with legacy storage migration and verification.
- Diff review, session navigation, provider/model/agent pickers, Todo panel and command palette.
- Structured logs with secret redaction.
- Cross-platform CI for Linux, macOS and Windows.
- Go 1.25+
- Git
rg/ ripgrep is optional but recommended; Uinxed-Agent has Go fallbacks where possible.
git clone https://github.com/ViudiraTech/Uinxed-Agent.git
cd Uinxed-Agent
go mod download
go build -trimpath -o ux-agent ./cmd/ux-agent
./ux-agentOn Windows:
go build -trimpath -o ux-agent.exe ./cmd/ux-agent
.\ux-agent.exeAfter the repository is published, you can also install the command into $(go env GOPATH)/bin:
go install github.com/ViudiraTech/Uinxed-Agent/cmd/ux-agent@latest
ux-agentUinxed-Agent ships provider definitions, not provider credentials. Configure your own key locally from the TUI or CLI.
Inside the TUI:
/provider
/key
/model
Or at startup:
./ux-agent --provider <provider-id> --key "$API_KEY" --model <model-id>For an OpenAI-compatible endpoint you can also override the base URL:
./ux-agent --provider <provider-id> --base https://example.com/v1 --key "$API_KEY"| Input | Action |
|---|---|
Ctrl+P |
Open command palette |
Tab |
Accept completion, otherwise cycle primary agent |
Ctrl+T |
Expand / collapse provider reasoning |
Ctrl+O |
Toggle Todos |
Ctrl+E |
Expand / collapse tool details |
PgUp / PgDn |
Scroll conversation or active overlay |
Esc |
Close overlay; while generating, cancel current operation |
Ctrl+C |
Cancel current operation; when idle, quit |
| Mouse click | Activate visible controls / selectable rows |
| Mouse wheel | Scroll the region under the pointer |
@explorer task |
Run an isolated explorer subagent |
@coding task |
Run an isolated coding subagent |
@general task |
Run an isolated general subagent |
@path/to/file |
Attach bounded file context to the turn |
@skill:name |
Discover a skill from autocomplete |
Mouse capture is enabled by default and can be changed at runtime:
/mouse on
/mouse off
Use --no-mouse if you want the terminal to retain native text-selection behavior.
The Go rewrite preserves the existing command surface, including commands that existed only in the previous source implementation:
/help /connect /provider /key /model
/thinking /effort /agent /quota /context
/compact /todos /cd /pwd /new
/sessions /rename /parent /delete /storage
/migrate /diff /skills /mouse /theme
/clear /restore /exit
Reasoning effort accepts:
low medium high xhigh max supercode
supercode keeps Uinxed-Agent's orchestration mode while mapping provider reasoning effort to the strongest supported setting.
┌───────────────────────────────┐
│ Bubble Tea TUI │
│ input · view · overlays │
└──────────────┬────────────────┘
│ typed events
┌──────────────▼────────────────┐
│ Application Controller │
└───────┬───────────┬───────────┘
│ │
│ └──────────────► Session Store
│ SQLite / config
▼
┌───────────────────────────────┐
│ Agent Runtime │
│ sessions · cancellation │
│ delegation · compaction │
└───────┬───────────┬───────────┘
│ │
▼ ▼
Providers Tools / Skills
streaming scheduler
The agent runtime intentionally does not import Bubble Tea. Providers do not know about the TUI, and tools do not mutate UI state directly.
More detail:
Default configuration directory:
~/.config/ux-agent/
├── config.json
└── ux-agent.db
Uinxed-Agent detects legacy config.json sessions and the previous SQLite session schema before migration. Migration is backup-first: data is imported, read back for verification, and only then is the active storage mode switched.
SQLite uses WAL mode, a busy timeout and foreign-key enforcement. The Go implementation uses modernc.org/sqlite, so a system libsqlite3-dev package is not required for the normal build.
See:
- No API keys are meant to be committed to the repository.
- Provider keys entered by the user are stored in the local configuration using AES-256-GCM encryption.
- Normal logs and UI output redact credential-like values.
.env, local databases, WAL files, logs and local config files are ignored by Git.- File tools enforce a project-root boundary and reject symlink escapes.
If you discover a security issue, avoid posting credentials or exploit details in a public issue.
The rendering path is designed to avoid doing expensive work for every provider token:
- streaming deltas are coalesced before reaching the UI;
- completed Markdown is cached by message/version/width/theme;
- the conversation view materializes only the visible range plus overscan;
- file search prefers
rgwhen available and falls back to Go; - HTTP transports use connection pooling and keep-alive;
- shell commands and agent runs are context-cancellable.
Run the benchmark harness with:
./scripts/benchmark.shMethodology and validation notes are documented in:
Useful targets:
make fmt
make test
make vet
make race
make buildOr run the full local check:
make checkEquivalent commands:
gofmt -w $(find . -name '*.go')
go test ./...
go test -race ./...
go vet ./...
go build -trimpath -o ux-agent ./cmd/ux-agentThe GitHub Actions CI matrix covers Linux, macOS and Windows. Tagged releases run their own validation gate before building release archives and SHA-256 checksums.
cmd/ux-agent/ CLI entry point
internal/agent/ agent runtime, delegation, scheduling
internal/app/ application controller
internal/config/ configuration and local secret storage
internal/context/ context/token budgeting and compaction
internal/domain/ shared domain types
internal/indexer/ project file index and watcher
internal/markdown/ cached Markdown rendering
internal/provider/ provider APIs and streaming
internal/skills/ skill discovery/loading
internal/storage/ SQLite + compatibility storage
internal/tools/ coding tools
internal/tui/ Bubble Tea UI, focus, mouse, overlays
scripts/ benchmark / maintenance scripts
docs/ architecture, migration and validation notes
Issues and pull requests are welcome. For code changes, please run at least:
gofmt -w $(find . -name '*.go')
go test ./...
go vet ./...For concurrency-sensitive changes, also run:
go test -race ./...Licensed under the Apache License 2.0.
Uinxed-Agent · ViudiraTech