External systems and APIs connected by Ho Launcher.
Four providers via rig-core OpenAI-compatible client (backend/src/llm/openai_compatible.rs, backend/src/llm/completion.rs).
| Provider | Config fields | Notes |
|---|---|---|
| OpenAI | baseUrl, model, apiKey |
Default base: https://api.openai.com/v1 |
| Azure OpenAI | baseUrl, model, apiKey |
baseUrl = deployment endpoint URL; model = deployment name |
| Ollama | baseUrl, model |
apiKey optional |
| Thinkers | baseUrl, model, apiKey |
Auth via API key header |
- Transport:
rig-corecompletions client - API keys: plaintext or
env:VAR_NAME(config_secret.rs) - Tool lists encoded as TOON where used (
backend/src/llm/toon.rs) - Health check (tiered,
llm/health.rs):- rig
list_models(strict OpenAI schema) - lenient
GET /models— HTTP auth + configured model id/alias indata[] - minimal completion probe (fallback)
- rig
- Request timeout default: 60s
- One active model at runtime; disabled on failed health check
Agent mode uses rig streaming multi-turn with native tool calling and message.delta events. Launcher and script paths use blocking complete(). Launcher suggestions use local keyword search (utils/tool_search.rs → search_tools_response).
- SDK:
rmcp(backend/Cargo.toml) - Transports: stdio (child process), streamable HTTP, and in-process builtin
- OAuth: HTTP OAuth flow via rmcp auth transport
- Host handlers: sampling, elicitation, progress, logging, list_changed, resource_updated
- Task polling for long-running tool calls
- Service:
backend/src/mcp/service/(MCPManagerinservice/mod.rs) - Built-in App Launcher MCP server:
http://localhost:1228/applauncher/mcp - Tauri commands: add/update/remove/connect/disconnect servers;
mcp_call_tool,mcp_read_resource,mcp_get_prompt,mcp_authorize_oauth,mcp_resolve_approval_gate,mcp_submit_elicitation
See MCP.md for server configuration details.
Build-time optional telemetry. No analytics when env vars are unset at compile time.
| Service | Location | Enable condition | Details |
|---|---|---|---|
| Aptabase | backend/build.rs, backend/src/utils/analytics.rs, frontend/src/shared/services/analytics-service.ts |
APTABASE_APP_KEY set at backend build |
cfg(analytics) gates tauri-plugin-aptabase; host from APTABASE_HOST (optional). Backend and frontend events when enabled: app_started, app_exited, settings/tour/launcher actions. |
| Microsoft Clarity | frontend/src/landing.tsx |
VITE_CLARITY_PROJECT_ID set at frontend build |
Landing/preview page only; not loaded by the desktop app shell. |
| Landing footer | frontend/src/features/preview/landing-data.ts |
VITE_LANDING_COPYRIGHT, VITE_LANDING_LICENSE_URL at frontend build |
Optional footer text and license URL on landing build only. |
Self-built and typical OSS dev builds without APTABASE_APP_KEY compile with #[cfg(not(analytics))] stubs — no events sent to Aptabase.
- Tauri plugins:
tauri-plugin-fs,tauri-plugin-dialog - FS scope: read/write/read-dir on
$APPDATA/**,$APPLOCALDATA/**,$DOCUMENT/**,$DOWNLOAD/**,$DESKTOP/**,$HOME/.ho/**(backend/capabilities/default.json) - File context: plain-text extensions list in
backend/src/constants.rs→file_context - Frontend file service:
frontend/src/shared/services/file-service.ts - Run persistence:
{app_data_dir}/runs/,{app_data_dir}/events/,{app_data_dir}/conversations/,{app_data_dir}/sessions/ - Agent worker IPC:
{app_data_dir}/pending-runs/,{app_data_dir}/cancel-requests/,{app_data_dir}/resume-requests/ - Token ledger:
{app_data_dir}/token-ledger.jsonl - Split registry:
{app_data_dir}/models.json,mcp-servers.json,agent.json,approvals.json - App launcher cache:
{app_data_dir}/app_cache.json(app_run/cache.rs) - Application logs:
{app_data_dir}/logs/ho.log.*(utils/logging.rs)
Embedded interpreters (no system Python/Node required):
| Language | Runtime | Module |
|---|---|---|
| Python | RustPython | backend/src/script_run/python_runtime.rs |
| JavaScript | Boa Engine | backend/src/script_run/javascript_runtime.rs |
Default language: python. Timeout: 30s. Max output: 10,000 chars. When enableSafetyChecks is true, blocked import/eval patterns are rejected before execution (script_run/safety.rs).
- Global hotkey:
cmd+`` (macOS) /ctrl+space(Windows/Linux) —backend/src/system/shortcuts.rs` - System tray: Open, Settings, Help, Quit —
backend/src/system/tray.rs - URL opener:
tauri-plugin-opener - OS modules:
backend/src/agent_os/(builtin MCP capabilities),backend/src/app_platform/(app discovery and launch) - Click-through: transparent launcher ignores pointer events outside hit regions (
window/click_through.rs) - DevTools overlay: when DevTools is open, main window drops always-on-top (
window/devtools_overlay.rs)
Registered in backend/src/lib.rs:
opener,global-shortcut,fs,dialog,aptabase
- Frontend invokes Tauri commands via
shared/services/invoke.ts - Backend emits Tauri events:
run-event,agent-run-terminal,launcher-progress,mcp-server-status-changed,llm-status-changed,form-window-opened - Settings sync:
settings_update_field/settings_save→ backend emits section events - Run queries:
shared/services/run-service.tswrapsrun_get,run_list,run_list_events - Headless CLI: same binary, subcommands in
backend/src/cli/— see CLI.md
- Webhooks or scheduled runs
- Automatic approval without user action after restart