AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
AI workstation that codes, manages emails and calendar, automates tasks, browses the web, orchestrates multi-agent pipelines, and connects to WhatsApp, Slack, Discord & Telegram. Built in Rust.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
The AI-native agentic workstation. Your desktop, amplified.
Lukan is an AI agent that turns your terminal, browser, and messaging into one intelligent workspace.
Multi-provider, multi-interface, E2E encrypted remote access, background workers, and sandboxed execution.
Built in Rust. Single binary. No runtime dependencies.README 전문 보기 ↗| Sessions & Agent Tabs | Model Selector |
|---|---|
| Embedded Terminal |
|---|
| Settings & Tools | Workers |
|---|---|
| Pipelines & Approval Gates |
|---|
| Remote Access (Relay) | Terminal TUI |
|---|---|
| Capability | Details |
|---|---|
| LLM Providers | Multi-provider — Anthropic, OpenAI, GitHub Copilot, Fireworks, Gemini, Ollama, and any OpenAI-compatible endpoint |
| Interfaces | Terminal UI (ratatui), Web UI, Desktop app (Tauri), CLI |
| Embedded Terminal | tmux-backed sessions in Web & Desktop UI — sessions persist across reconnects with scrollback recovery. Falls back to PTY when tmux is not installed |
| Browser Automation | CDP native with 10 tools: navigate, screenshot, click, type, evaluate JS, export PDF, tab management |
| Messaging Channels | WhatsApp, Telegram, Slack, Discord, Email, Gmail via plugin system |
| Google Workspace | Sheets, Docs, Calendar, Slides, Drive via plugins & skills |
| Plugin System | Built-in registry, hot-reload, IPC protocol |
| Pipelines | DAG-based multi-agent workflows with visual editor, parallel execution, and human-in-the-loop approval gates |
| Background Workers | Cron scheduler + daemon for autonomous scheduled tasks |
| Sub-agents | Parallel sub-agent execution for complex multi-step tasks |
| Skills | Markdown-based instruction system for project-specific workflows |
| Long-term Memory | MEMORY.md + context compaction + session checkpoints & rewind |
| E2E Encrypted Relay | Remote access via X25519 key exchange + AES-GCM authenticated encryption |
| OS-level Sandbox | bubblewrap (bwrap) isolation with configurable allowed paths |
| Permission Modes | Planner (human reviews all), Auto (whitelisted tools run freely), Manual (approve each call) |
| Sensitive File Detection | Pattern-based blocking for .env, .ssh/, .aws/, credentials, and private keys |
| Audio Input | Desktop + Web UI via Whisper plugin (local transcription, GPU/CPU auto-detect) |
| Single Binary |
Get up and running in 5 steps:
# CLI only (includes TUI + Web UI)
curl -fsSL https://get.lukan.ai/install.sh | bash
# Or with Desktop app
curl -fsSL https://get.lukan.ai/install.sh | bash -s -- --desktop
Or use Docker:
docker pull lukanlabs/lukan
docker run -d -p 3000:3000 --name lukan lukanlabs/lukan
# Enter the container and follow steps 2-5 below
docker exec -it lukan bash
The web UI is accessible at http://localhost:3000. You can also build the image locally with docker build -t lukan ..
For OAuth providers (no API key needed):
# OpenAI Codex
lukan codex-auth
# GitHub Copilot
lukan copilot-auth
For API key providers:
lukan setup
Enter your API key when prompted (Anthropic, Fireworks, Gemini, Nebius, etc.).
Choose which models from your provider will appear in the /model selector:
# Example: Select models from OpenAI Codex
lukan models openai-codex
# Or from Anthropic
lukan models anthropic
# Or any other provider you configured
lukan models <provider>
This opens an interactive selector where you pick which models to make available.
Terminal UI (default)
lukan
# or
lukan chat
Web UI — Opens your browser at http://localhost:3000
lukan chat --ui web
Desktop app
lukan chat --desktop
Once inside the chat, type:
/model
This shows the models you selected in step 3. Pick one and start chatting!
Summary: install → auth/setup → select models → chat → /model
Run lukan doctor anytime to check your configuration and troubleshoot issues.
# Resume your previous chat
lukan chat -c
# Auto-detect and launch a browser
lukan chat --browser
# Use a specific browser
lukan chat --browser chrome
lukan chat --browser edge
# Connect to an already running browser
lukan chat --browser-cdp http://localhost:9222
# Run browser in visible mode (see what the agent does)
lukan chat --browser-visible
# Keep browser profile across sessions
lukan chat --browser --browser-profile persistent
# Log in to your relay (access lukan from any browser)
lukan login
# Check relay connection
lukan relay status
# Show current config, provider, model, and system info
lukan doctor
# List available models for a provider
lukan models anthropic
# Self-update
lukan update
The Web and Desktop UIs include a full terminal emulator powered by xterm.js. When tmux is available, sessions are backed by tmux — they persist across page reloads, browser crashes, and reconnects, with full scrollback recovery. Without tmux, terminals fall back to direct PTY.
Run multiple agents in parallel, each with its own context and conversation history. Sessions are saved automatically and can be loaded, rewound, or continued later.
Record audio directly in the Web and Desktop UI. Transcription runs locally via the Whisper plugin using whisper.cpp with GPU/CPU auto-detection — no data leaves your machine.
# Install the whisper plugin
lukan plugin install whisper
Lukan includes a built-in relay system for accessing your workstation from any browser, anywhere. The connection is end-to-end encrypted — the relay server never sees your data.
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Browser │◄──────►│ Relay Server│◄──────►│ Your Machine│
│ (any device)│ E2E │ (cloud) │ E2E │ (lukan) │
└──────────────┘ enc. └──────────────┘ enc. └──────────────┘
--ui web, including agent, terminals, file explorer, and plugins.# Authenticate with the relay
lukan login
# Check connection status
lukan relay status
# Your workstation is now accessible at your relay URL
Lukan is a Cargo workspace with 11 crates (~49K lines of Rust) + a React frontend (~6K lines of TypeScript):
lukan CLI entry point and subcommands
lukan-core Shared types, config, errors, crypto primitives
lukan-providers LLM provider implementations (8 providers)
lukan-tools Tool system: Bash, ReadFile, WriteFile, EditFile, Glob, Grep, WebFetch, Browser, Tasks
lukan-agent Agent loop, sessions, memory, permission system, sub-agents
lukan-tui Terminal UI (ratatui) with markdown rendering and syntax highlighting
lukan-web Axum web server with WebSocket streaming and embedded React UI
lukan-desktop Tauri desktop app with PTY, audio recording, and native integration
lukan-browser Chrome DevTools Protocol client
lukan-plugins Plugin discovery, lifecycle, and IPC protocol
lukan-search Symbol indexing (tree-sitter) — in development
lukan-relay Relay server for E2E encrypted remote access
desktop-client/ React + TypeScript frontend (shared across Web, Desktop, and Relay modes)
See ARCHITECTURE.md for details.
| Provider | Setup |
|---|---|
| Anthropic | lukan setup or set ANTHROPIC_API_KEY |
| OpenAI Codex | lukan codex-auth (OAuth) |
| GitHub Copilot | lukan copilot-auth (OAuth Device Flow) |
| Fireworks | API key via lukan setup |
| Nebius | API key via lukan setup |
| Ollama Cloud | API key via lukan setup |
| Zai | API key via lukan setup |
| Gemini | API key via lukan setup |
| Lukan Cloud | Coming soon |
| OpenAI-compatible | Base URL + API key via lukan setup (works with vLLM, Ollama, LM Studio) |
Plugins extend lukan with messaging channels and external tools:
# Browse and install from the registry
lukan plugin install
# Install by name
lukan plugin install whatsapp
# Configure credentials
lukan skill env whatsapp set BRIDGE_URL ws://localhost:3001
# Start a channel plugin
lukan plugin start whatsapp
# Check status
lukan plugin status whatsapp
# View logs
lukan plugin logs whatsapp
| Plugin | Type | What it does |
|---|---|---|
| Channel | Chat with lukan from WhatsApp (QR auth, groups, audio transcription) | |
| Channel | Receive and reply to emails (IMAP/SMTP) | |
| Gmail | Tools | Search, read, send, and manage Gmail |
| Google Workspace | Tools | Sheets, Docs, Calendar, Slides, Drive operations |
| Docker Monitor | Channel | Monitor container events and health |
| Security Monitor | Channel | Track security-related system events |
| Whisper | Channel | Local audio transcription via whisper.cpp |
| Telegram | Channel | Chat with lukan from Telegram (Bot API, groups, user allowlist) |
| Slack | Channel | Chat with lukan from Slack (Socket Mode, threads, channel allowlist) |
| Discord | Channel | Chat with lukan from Discord (Gateway API, threads, voice transcription) |
| Nano Banana Pro | Tools | Image generation via Gemini |
Skills are markdown instruction files that customize agent behavior per-project:
# List discovered skills
lukan skill list
# Skills live in .lukan/skills/<name>/SKILL.md
mkdir -p .lukan/skills/deploy
cat > .lukan/skills/deploy/SKILL.md << 'EOF'
---
name: Deploy
description: Deployment workflow for this project
---
# Deploy
1. Run tests first
2. Build with `make release`
3. Deploy to staging before production
EOF
Schedule autonomous background tasks that run on their own:
# Create a worker interactively (set prompt, schedule, tools)
lukan worker add
# List all workers
lukan worker list
# Browse run history and view output
lukan worker runs
# Pause/resume a worker
lukan worker pause
lukan worker resume
# Start the background daemon (runs scheduled workers)
lukan daemon start
# Check daemon status
lukan daemon status
Lukan takes security seriously:
.env, .ssh/, .aws/, credentials, and private keys by patternConfig lives in ~/.config/lukan/:
~/.config/lukan/
config.json Main configuration (provider, model, permissions)
credentials.json API keys and tokens (never committed)
sessions/ Chat history
plugins/ Installed plugins
MEMORY.md Persistent agent memory
| Command | Description |
|---|---|
lukan chat | Start interactive chat (TUI, Web, or Desktop) |
lukan setup | Interactive setup wizard (provider, model, API keys) |
lukan doctor | Show configuration, provider, model, and system diagnostics |
lukan models [provider] | List and select models for a provider |
lukan plugin install | Install plugins from the registry |
lukan plugin start <name> | Start a channel plugin |
lukan plugin status <name> | Show plugin status and config |
lukan plugin logs <name> | View plugin logs |
lukan skill list | List discovered skills |
lukan skill env <name> | Manage skill environment variables |
lukan worker add | Create a scheduled worker interactively |
lukan worker list | List all workers |
lukan worker runs | Browse run history and view output |
lukan daemon start | Start the background worker scheduler |
lukan daemon status | Check if the daemon is running |
lukan sandbox enable | Enable OS-level sandboxing (bwrap) |
lukan update | Self-update to the latest version |
lukan login | Authenticate with relay server (Google OAuth) |
lukan relay status | Show relay connection status |
lukan codex-auth | Authenticate with OpenAI Codex (OAuth) |
lukan copilot-auth | Authenticate with GitHub Copilot (OAuth Device Flow) |
# Build all crates
cargo build
# Run quality checks
cargo fmt && cargo clippy -- -D warnings && cargo test
# Build desktop app (requires bun)
cd desktop-client && bun run build
# Run the TUI in dev mode
cargo run -- chat
See CONTRIBUTING.md for guidelines.
curl install:
rm ~/.local/bin/lukan ~/.local/bin/lukan-desktop ~/.local/bin/lukan-relay
AppImage:
rm Lukan_Desktop.AppImage
rm ~/.local/bin/lukan
deb package:
sudo dpkg -r lukan-desktop
rm ~/.local/bin/lukan
Config & data (optional, shared across all install methods):
rm -rf ~/.config/lukan ~/.local/share/lukan
This project is licensed under the MIT License.
| Rust, no runtime dependencies, instant startup |
| License | MIT — Free, bring your own keys |