A fully functional AI Agent desktop client that supports Webui access and can be creatively customized and expanded!
$ npx -y skills add Stack-Cairn/LiveAgent --agent claude-code
Run the curl in your terminal, the rest in Claude Code.
What's inside
LiveAgent is a local-first AI agent desktop client. It deeply integrates large language model reasoning with local system tools, so the AI can genuinely operate your file system, run commands, and manage scheduled tasks β while the Gateway enables remote access and collaboration.

Read / Write / Edit / Delete, plus Glob / Grep pattern and regex searchManagedProcess supervising dev servers and other resident tasksTunnelManager exposes local services to the public internet in one clickInstallers are automatically built, signed, and published by GitHub Actions β grab the latest version from GitHub Releases.
| Platform | Requirements |
|---|---|
| macOS | Both Intel (x64) and Apple Silicon (aarch64) architectures |
| Windows | x64; requires the WebView2 runtime (bundled with Windows 11) |
| Linux | x86_64; requires WebKitGTK 4.1 (Ubuntu 22.04+ / Debian 12+, etc.) |
Download the DMG matching your chip from Releases, open it, and drag LiveAgent into Applications:
LiveAgent-<version>-macOS-aarch64.dmgLiveAgent-<version>-macOS-x64.dmgThe installer is signed and notarized by Apple β no manual security override is needed on first launch.
Pick an installation method from Releases:
| Method | File | Best for |
|---|---|---|
| Setup wizard | LiveAgent-<version>-Windows-x64-Setup.exe | Most users |
| MSI package | LiveAgent-<version>-Windows-x64.msi | Enterprise distribution / silent install |
| Portable | LiveAgent-<version>-Windows-x64-portable.zip | No install β unzip and run |
Choose by distribution from Releases:
| Format | Distributions | Install |
|---|---|---|
| AppImage | Any distribution | chmod +x, then run directly |
| DEB | Debian / Ubuntu family | sudo dpkg -i LiveAgent-<version>-Linux-x86_64.deb |
| RPM | Fedora / openSUSE family | sudo rpm -i LiveAgent-<version>-Linux-x86_64.rpm |
The desktop app works out of the box and depends on no server. Deploy the Gateway only if you want to control your local agent from a browser.
Note: when deployed behind an Nginx reverse proxy, set the Gateway address on the Settings β Remote page to the HTTPS URL and use port 443.
# Pull the image (built by GitHub Actions, multi-arch: amd64 / arm64)
docker pull ghcr.io/stack-cairn/liveagent-gateway:latest
# Run in the background (HTTP/WebSocket β host 3000)
docker run -d \
--name liveagent-gateway \
--restart unless-stopped \
-p 3000:8080 \
-v liveagent-gateway-data:/var/lib/liveagent \
-e LIVEAGENT_GATEWAY_TOKEN=your-token \
ghcr.io/stack-cairn/liveagent-gateway:latest
The named volume persists the Gateway database and independently issued Agent tokens across container upgrades.
One-command upgrade to the latest version β pull the new image β remove the old container β recreate it with the same arguments (if you changed the port mappings or token, adjust the arguments below accordingly):
docker pull ghcr.io/stack-cairn/liveagent-gateway:latest \
&& docker rm -f liveagent-gateway \
&& docker run -d \
--name liveagent-gateway \
--restart unless-stopped \
-p 3000:8080 \
-v liveagent-gateway-data:/var/lib/liveagent \
-e LIVEAGENT_GATEWAY_TOKEN=your-token \
ghcr.io/stack-cairn/liveagent-gateway:latest \
&& docker image prune -f
Since protocol v2, all traffic β the WebUI, the HTTP API, and the WebSocket links of both the browser and the desktop app β goes through the single HTTP port (default 3000).
WebSocket upgrades happen on several paths (
/ws/v2,/ws/v2/agent,/ws/v2/terminal, and tunnels under/t/), so the simplest correct setup enables the upgrade on the whole vhost:
# WebUI SPA/static/API + every WebSocket link (browser and desktop)
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
# WebSocket upgrade
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Required: the Gateway's same-origin check compares the browser's
# Origin header against X-Forwarded-Proto + Host
proxy_set_header Host $host;
proxy_set_header Authorization $http_authorization;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# The Gateway pings every WebSocket connection every 15s,
# so a generous-but-finite timeout is enough
proxy_read_timeout 300s;
proxy_send_timeout 300s;
proxy_buffering off;
}
The upstream port maps to the host port from the
docker runabove: HTTP/WebSocket 3000 (inside the container, HTTP actually listens onPORT=8080). The server block needslisten 443 ssl;and aclient_max_body_sizelarge enough for attachment uploads (e.g.100m).
Expand the Development Guide below for the full set of Make commands.

ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Browser WebUI β
β React + Vite + WebSocket + Gateway API β
ββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββ
β WebSocket / HTTP
ββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββ
β Agent Gateway β
β Go Β· WebSocket Β· HTTP Β· Session Manager Β· Event Store β
β (Railway / Docker / self-hosted) β
ββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββ
β WebSocket v2 (bidirectional stream)
ββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββ
β Agent GUI β
β Tauri 2 Β· React 19 Β· Rust β
ββββββββββββ¬βββββββββββββ¬ββββββββββββ¬βββββββββββββ¬ββββββββββββββ€
β Models β Runtime β Tools β Skills β Memory/Cron β
β pi-ai β multi-turn β FS/Bash/ β progressiveβ SQLite+MD β
β + Codex β + SubAgent β MCP bridgeβ + Hub β FTS index β
ββββββββββββ΄βββββββββββββ΄ββββββββββββ΄βββββββββββββ΄ββββββββββββββ
Tech Stack
| Component | Technology |
|---|---|
| Agent GUI Β· Framework | Tauri 2 + React 19 + TypeScript 6 |
| Agent GUI Β· Build | Vite 8 + pnpm |
| Agent GUI Β· Styling | Tailwind CSS 4 + Radix UI |
| Agent GUI Β· Rendering | streamdown + KaTeX + Mermaid + Monaco Editor |
| Agent GUI Β· Backend | Rust + Tokio + SQLite (rusqlite) + WebSocket (tokio-tungstenite) |
| Agent GUI Β· LLM | @earendil-works/pi-ai Β· @earendil-works/pi-agent-core |
| Gateway Β· Language | Go 1.25 |
| Gateway Β· Protocols | WebSocket + Protobuf + HTTP |
| Gateway Β· Web UI | React + Vite + Tailwind CSS (embedded) |
| Gateway Β· Deployment | Docker multi-stage Β· Railway CI/CD |
| Command | Description |
|---|---|
make dev | Start the Tauri development environment |
make build | Build the desktop app |
make dev-gateway | Start the Gateway dev server |
make dev-webui | Start the WebUI dev server |
make gateway-build | Build the Gateway binary |
make gateway-docker-build | Build the Docker image |
make gateway-docker-smoke | Build + health check |
make desktop-build-macos-release | macOS signed release build |
make build-linux | Linux amd64 gateway |
make build-linux-arm | Linux arm64 gateway |
make proto | Regenerate Protobuf code |
make clean | Clean build artifacts |
LiveAgent/
βββ package.json # pnpm workspace commands
βββ pnpm-lock.yaml # Unified frontend dependency lock
βββ crates/
β βββ agent-ui/ # Shared GUI/WebUI React source
β β βββ src/ # Components, domain models, settings shell
β β
β βββ agent-gui/ # Desktop client
β β βββ src/ # React frontend
β β β βββ components/ # UI components
β β β βββ lib/ # Core logic (chat, tools, skills, memory)
β β β βββ pages/ # Pages (Chat, Settings)
β β β βββ i18n/ # Internationalization
β β β βββ prompt/ # System prompt templates
β β βββ src-tauri/ # Rust backend (Tauri)
β β
β βββ agent-gateway/ # Go gateway service
β βββ cmd/gateway/ # Entry point
β βββ internal/ # Core implementation
β βββ proto/v2/ # Protobuf definitions
β βββ web/ # Embedded WebUI
β
βββ docs/ # Project docs
β βββ architecture/ # Architecture design
β βββ features/ # Feature guides
β βββ operations/ # Operations & deployment
β
βββ scripts/release/ # Release automation
βββ .github/workflows/ # CI/CD (CI + Desktop Release + Gateway Docker)
βββ Dockerfile # Gateway container image
βββ Makefile # Build commands
βββ Cargo.toml # Rust workspace
No. Keys are stored locally on the desktop side only. The Gateway is a pure protocol relay β it never accesses the file system and never stores any credentials.
No. The desktop client works standalone with all local capabilities; deploy the Gateway only when you need browser-based remote access to your local agent.
Claude (Anthropic), Codex (OpenAI), and Gemini protocols are built in, plus custom Base URL support for any compatible third-party service.
No. The desktop app persists the full history with Segment + Summary Checkpoints; the Gateway replays short disconnects through a bounded seq window and converges automatically after reconnecting.
Issues and pull requests are welcome! See the Development Guide for setting up a dev environment.
Before submitting a PR, make sure all of the following checks pass (they match the CI gates):
Install frontend dependencies once from the repository root with pnpm install --frozen-lockfile.
Desktop client
pnpm build:guipnpm lint:ui && pnpm lint:guipnpm test:gui (also run pnpm --filter liveagent test:release when touching release scripts)cargo check --manifest-path crates/agent-gui/src-tauri/Cargo.toml --tests (run from the repo root)Gateway Β· crates/agent-gateway (if changed)
go test ./...pnpm build:webui && pnpm lint:webui && pnpm test:webuimake protoShared UI boundaries
pnpm check:ui-boundariesgit diff --checkThanks to everyone who has contributed to LiveAgent!
MIT Β© StackCairn
.codex
.dockerignore
.github/
CONTRIBUTING.md
ISSUE_TEMPLATE/
bug_report.yml
config.yml
documentation.yml
feature_request.yml
pull_request_template.md
release.yml
workflows/
ci.yml
desktop-release.yml
gateway-docker.yml
pr-governance.yml
stale.yml
update-model-catalog.yml
update-star-history.yml
.gitignore
.vscode/
extensions.json
Cargo.lock
Cargo.toml
crates/
agent-gateway/
.gitignore
.golangci.yml
buf.gen.yaml
buf.yaml
cmd/
gateway/
main.go
embed_test.go
embed.go
go.mod
go.sum
internal/
auth/
agenttoken/
store_benchmark_test.go
store_test.go
store.go
http_middleware.go
chatcmd/
chatcmd_test.go
chatcmd.go
chatwire/
payloads_test.go
payloads.go
config/
config_test.go
config.go
db/
db.go
sqlite.go
handler/
agents.go
health.go
helpers_test.go
helpers.go
image_proxy_test.go
image_proxy.go
outbound_http.go
status.go
types_test.go
types.go
upload.go
observability/
logging.go
protousage_test.go
protousage.go
proto/
v2/
capabilities.go
chat_ingress_test.go
gateway_ws.pb.go
gateway.pb.go
protocol/
pbws/
agent_conn_test.go
agent_conn.go
browser_conn.go
browser_events.go
browser_local.go
browser_relay.go
guard_test.go
guard.go
handshake_test.go
handshake.go
seam.go
server.go
terminal_conn.go
shared/
origin.go
terminal_interest_test.go
terminal_interest.go
terminal_relay_test.go
terminal_relay.go
server/
http_test.go
http.go
proto_json_test.go
proto_json.go
tunnel_proxy_test.go
tunnel_proxy.go
tunnel_rewrite_test.go
tunnel_rewrite.go
session/
activity_hub.go
agent_session.go
agent_view.go
conversation_ingress.go
conversation_reliable_ingress_test.go
conversation_reliable_ingress.go
conversation_stream_reconcile_test.go
conversation_stream_test.go
conversation_stream.go
manager_capabilities_test.go
manager_chat_queue.go
manager_dispatch.go
manager_history_sync.go
manager_isolation_test.go
manager_managed_process.go
manager_multiagent_test.go
manager_registry.go
manager_settings_sync.go
manager_sftp.go
manager_state.go
manager_terminal.go
manager_test.go
manager.go
status_broadcast.go
tunnel_state_test.go
tunnel_state.go
unary.go
workspace_activity_test.go
workspace_activity.go
transport/
wscore/
conn_test.go
conn.go
frame.go
heartbeat.go
limits.go
proto/
v2/
gateway_ws.proto
gateway.proto
test/
auth/
auth_test.go
helpers/
gateway-v2.mjs
load-web-module.mjs
http/
agents_api_test.go
http_routes_test.go
README.md
session/
manager_test.go
tunnel/
tunnel_e2e_test.go
upload/
import_readable_files_test.go
websocket/
agent_token_test.go
multiagent_benchmark_test.go
v2_chat_terminal_test.go
v2_git_gating_test.go
v2_hardening_test.go
v2_helpers_test.go
v2_multiagent_test.go
v2_test.go
webui/
auth-storage.test.mjs
browser-uuid.test.mjs
chat-command-pipeline.test.mjs
chat-turn-queue.test.mjs
clipboard-files.test.mjs
conversation-stream-client.test.mjs
custom-headers.test.mjs
font-family.test.mjs
gateway-socket-client.test.mjs
history-chat-ui.test.mjs
markdown-image-policy.test.mjs
markdown-latex.test.mjs
paste-newline-pipeline.test.mjs
provider-usage-query-form.test.mjs
provider-usage-query.test.mjs
ssh-scan-paths.test.mjs
ssh-tunnel-panel.test.mjs
terminal-session-store.test.mjs
upload-readable-files.test.mjs
web-model-catalog.test.mjs
web-remote-input.test.mjs
web-settings.test.mjs
workspace-projects.test.mjs
web/
biome.json
index.html
package.json
postcss.config.js
public/
favicon.svg
icon-simple.png
src/
agent-ui-adapters/
assistantAvatar.ts
assistantStatus.ts
chatHeaderChrome.ts
chatModelOptions.ts
composerClipboard.ts
directoryPicker.tsx
hubChrome.tsx
mentionReferences.ts
providerSettings.tsx
settingsExtension.tsx
sshLocalForwardClient.ts
systemSettings.tsx
userMessageContent.ts
workspacePreview.tsx
app/
App.tsx
AgentSelector.tsx
chatDraft.ts
chatEventUtils.ts
constants.ts
domUtils.ts
FileDropOverlay.tsx
GatewayApp.tsx
HistorySwitchLoadingOverlay.tsx
historyUtils.ts
hooks/
useGatewayClients.ts
useGatewaySession.ts
useGatewaySettingsSync.ts
usePendingUploads.ts
useProjectToolsRuntime.ts
sidebar/
gatewaySidebarAvailability.ts
GatewaySidebarContainer.tsx
types.ts
UserMenu.tsx
WorkspaceOverlayHost.tsx
components/
GatewayTranscript.tsx
icons.tsx
RemotePathPickerModal.tsx
remotePathPickerPaths.ts
i18n/
config.ts
index.css
lib/
adminApi.ts
agentTypes.ts
automation/
backend.ts
chat/
askUserQuestionBridge.ts
changedFiles.ts
changedFilesAdapter.ts
chatFileLinks.ts
chatHistory.ts
chatPageHelpers.ts
chatPageHelpersAdapter.ts
conversationState.ts
fileChangeStats.ts
historyWindow.ts
hostedSearch.ts
mentionReferences.ts
runtimeCompatibility.ts
stream/
activityStore.ts
chatCommandPipeline.ts
conversationStreamClient.ts
streamTypes.ts
useConversationChat.ts
toolApprovalBridge.ts
toolPreview.ts
toolPreviewAdapter.ts
transcript/
historyAlignment.ts
rows.ts
transcriptStore.ts
turnReducer.ts
types.ts
uiMessages.ts
uploadedFiles.ts
userMessageContent.tsx
chatUi.ts
clipboardFiles.ts
fontFamily.ts
gatewayAuth.ts
gatewaySocket.ts
gatewaySocketV2/
adapters.ts
gatewayTypes.ts
git/
gatewayGitClient.ts
historyParser.ts
historyParser.worker.ts
historyShare.ts
managed-process/
backend.ts
proto/
gen/
proto/
v2/
gateway_pb.ts
gateway_ws_pb.ts
providers/
llm.ts
usageQuery.ts
settings/
index.ts
sftp/
gatewaySftpClient.ts
sidebar/
webSidebarBackend.ts
storage.ts
terminal/
gatewaySshLocalForwardClient.ts
gatewayTerminalClient.ts
gatewayTerminalStreamClient.ts
tools/
builtinTypes.ts
transcript-virtual/
liveRangeExtractor.ts
uploadReadableFiles.ts
webSettings.ts
workspace-activity/
gatewayWorkspaceActivityClient.ts
main.tsx
pages/
chat/
assistant-bubble/
assistantBubbleUtils.ts
RoundContent.tsx
ToolCallItem.tsx
ToolImages.tsx
ToolResultDisplay.tsx
ToolTraceGroup.tsx
AssistantBubble.tsx
queue/
chatTurnQueue.ts
useChatSkills.ts
DevicesAdminPage.tsx
LoginPage.tsx
settings/
DevicesSection.tsx
memory/
platform.tsx
types.ts
WorkdirPickerModal.tsx
SettingsSyncLoading.tsx
SharedHistoryPage.tsx
StatusDashboardPage.tsx
shims/
tauriCore.ts
tauriEvent.ts
tauriOpener.ts
styles.css
vite-env.d.ts
tailwind.config.js
test/
activity-store.test.mjs
assistant-bubble-utils.test.mjs
assistant-status.test.mjs
browser/
paste-newline-pipeline.html
changed-files-card.test.mjs
changed-files.test.mjs
chat-file-links.test.mjs
chatUi-agent.test.mjs
floor-nav.test.mjs
frame-pin-controller.test.mjs
gateway-v2-adapters.test.mjs
history-window.test.mjs
live-markdown-caret.test.mjs
live-scroll-adjust-policy.test.mjs
live-status-layout.test.mjs
measurements-lru.test.mjs
model-thinking.test.mjs
model-vendor.test.mjs
remote-path-picker-paths.test.mjs
reorder-model.test.mjs
row-estimates.test.mjs
runtime-compatibility.test.mjs
scroll-follow-core.test.mjs
sidebar-availability.test.mjs
sidebar-open-controller.test.mjs
sidebar-reconcile.test.mjs
sidebar-selection.test.mjs
sidebar-store.test.mjs
skills-prompt-contract.test.mjs
task-progress-indicator.test.mjs
task-progress-sequence.test.mjs
task-progress.test.mjs
thinking-overlay-model.test.mjs
... 1157 moreFAQ
liveagent is a Claude Code plugin with 3 hand-picked skills for development work, indexed on Flowy. Install it with the command on its page. It includes liveagent-code-review, skills-creator, skills-installer. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.