🏠 Home 🧩 Skills 🔌 Plugins 📖 Docs ⚖ Compare 📋 Releases ⬇ Download
📖 Documentation

Akasha Docs

Everything you need to install, configure and extend Akasha.

Introduction

Akasha is a privacy-first personal assistant built around a long-running daemon. With the embedded model, you get answers without signing up or calling the cloud. You can add Ollama or OpenAI / OpenRouter when you need larger models — keys stay in your local vault.

Skills extend what the agent can do (calculator, custom workflows, …). Optional channels (Telegram, Slack, Discord) let the same daemon serve multiple interfaces.

💡
Quick start: Jump straight to Installation if you just want to get running.

Key principles

  • Local-first — data directory on your machine; no mandatory cloud account.
  • Explicit trust — tool and path access is deny-by-default until you edit policy.
  • Extensible — skills, plugins, optional channels.
  • Binary distribution — official prebuilt releases on this site; engine source is on GitHub under Apache-2.0 (build from source or use these binaries).

Interface screenshots

Real captures from the web UI (same React bundle as the desktop app), produced by the Akasha project’s Playwright suite when the daemon is running. Regenerate with npm run test:e2e in apps/akasha-ui (see the engine repository).

Akasha chat
Chat
Akasha Cookbook recipes
Cookbook — recipes
Akasha Compare
Compare models
Akasha Cookbook models
Cookbook — models
Akasha deep research
Deep research
Akasha mission tab
Autonomous mission
Akasha notes
Notes
Akasha documentation tab
Documentation (multi-page)

What's new in v0.10.0

Your assistant can live on the machine — and talk to a small companion on the LAN.

Bind the daemon so an ESP32 Companion can find it, pair, and use voice without leaving your network (AKASHA_BIND, /api/companion/*).

First use can download and set up a local model: wizard, calibration, then you stay embedded when you want. On mid-size Ollama models, prompts stay compact and context defaults to 8k.

Product references: #122 (Companion), #123 (Ollama), #125 (v0.10.0 merge).

First-use embedded

  • Setup wizard — embedded status, GGUF download with progress, multi-model picker, first message test.
  • Full CUDA zip — akasha-full-windows-x86_64-cuda.zip (CLI + UI + scripts); install.ps1 copies CUDA runtime DLLs.
  • Doctor — akasha doctor --json suggests embedded-download when GGUF is missing.
  • API — POST/GET /api/router/embedded/download, calibration endpoint.

Discovery & Home Assistant

  • Service discovery — akasha discover, GET /api/discovery (Ollama, Home Assistant on LAN).
  • Home Assistant — connector in Settings, plugin homeassistant, agent tools ha_*.

Plugins

  • 6 plugins in the public catalog (Matrix, CalDAV, Home Assistant, graph, maps, simulation).

Code Studio

Install the operator cockpit via npm: npx akasha-code-studio@0.10.0 (requires a running daemon on port 3876). See Code Studio.

Previously in v0.9.0

Workspace UI

  • Cookbook — pull local models and browse 12 guided recipes.
  • Compare, Deep research, Notes workspace panels.
  • Multi-page user guide in the Doc tab; Matrix/CalDAV channel plugins.

Previously in v0.8.0

  • Permission center, Second Brain controls, budget controls, and agent-callable scheduler tools.
  • Autonomous mission — heartbeat tasks, Mission tab, REST API (autonomous_mission.yaml).
  • Project knowledge graphs — multiple indexed roots, workspace_graph_search, HTML reports.
  • Agent profile formality, tools-first routing, improved akasha doctor for zip installs.

Previously in v0.7.0

  • Orchestrator route — task_types.orchestrator in llm_router.yaml; verified deliverables, path safety, targeted retry, .akasha/plan_<task_id>.md, meta-response retry.
  • Security & LLM — path prefix policy, RAG upload alignment, numeric config clamping, Azure max_tokens default, plugin UI + reputation API.

Full history: Releases. Comparison: Compare. Plugin catalog: Plugins.

API, observability & plugins

When the daemon is running (default port 3876), these HTTP surfaces are useful for monitoring, tooling, and automation:

  • Timeline — inspect recent events for debugging.
  • Metrics — operational counters and health-style signals.
  • Agents — GET /api/agents — loaded agents (exact paths as in your build).

Plugin HTTP API (overview)

Typical endpoints (v0.7+); mission endpoints (v0.8+):

  • GET /api/plugins — installed plugins, scores, disabled-by-reputation state.
  • POST /api/plugins/reload — reload plugin manifests without restarting the daemon.
  • POST /api/plugins/reputation/reset — body {"plugin_id":"<id>"} to reset one plugin, or empty body / omit id to reset all.
  • GET /api/plugins/routing_rules — optional ?message=… — debug dynamic routing rules.
  • POST /api/plugins/routing_rules/match — JSON body to test routing match.

Permission, memory and budget API (v0.8+)

  • GET/POST /api/permissions/decisions and DELETE /api/permissions/decisions/:id — persist approval rules by tool/scope.
  • GET /api/permissions/queue, GET /api/permissions/queue/:id, POST …/approve, POST …/deny — review queue lifecycle (see Safety queue).
  • GET /api/tasks/:id/report — post-task operator summary.
  • GET/POST /api/permissions/mode — global approval mode (ask_me / allow_all).
  • GET/POST /api/memory/second-brain/settings — enable/pause memory learning.
  • GET /api/memory/second-brain/overview, POST /api/memory/second-brain/clear — inspect and reset memory state.
  • GET/POST /api/budget, POST /api/budget/reset-session — manage token budget controls and session usage reset.

Telegram governance API (v0.8+)

  • GET /api/channel-access/telegram/users — list approved and pending Telegram users.
  • POST /api/channel-access/telegram/request — create pairing request with code.
  • POST /api/channel-access/telegram/approve|reject|remove|promote|demote|reset — full access lifecycle.

Autonomous mission API (v0.8+)

  • GET / PUT /api/autonomous-mission — read or merge mission state (YAML-backed).
  • POST /api/autonomous-mission/pause / POST /api/autonomous-mission/resume
  • GET /api/autonomous-mission/events — optional query limit, since (RFC3339).

Project graph API (v0.8+)

Prefix /api/workspace-graph — list/create/delete workspaces, rebuild, export JSON, Markdown report, HTML view. See the engine docs for paths.

These listen on 127.0.0.1 by default — not exposed to the internet unless you deliberately reverse-proxy. For day-to-day use, the TUI Router tab and akasha router metrics cover most needs; use Plugins to browse the public catalog.

💡
Authentication and exact OpenAPI docs may vary by build; treat this section as a capability overview. If you need a formal API spec for integration, request it via GitHub Issues.

Installation

Requirements

  • OS: Windows 10+, macOS 11+, or Ubuntu 20.04+
  • Embedded model by default — no external installation required for core use. Ollama and cloud providers (OpenRouter, OpenAI) are optional; configure them during akasha init if you want to use them.

One-line install

Paste one of these commands in your terminal to download, install, and configure Akasha (daemon auto-start and optional config wizard).

Windows (PowerShell):

powershell -ExecutionPolicy Bypass -c "irm https://raw.githubusercontent.com/azerothl/Akasha_app/main/scripts/get-akasha.ps1 | iex"

Linux / macOS:

curl -sSL https://raw.githubusercontent.com/azerothl/Akasha_app/main/scripts/get-akasha.sh | bash

Download (manual)

Go to the Releases page on this site or GitHub Releases (Akasha_app) — binaries are published here (public mirror). For a complete install, download akasha-full-<os> (CLI + daemon + TUI + desktop bundle + scripts). Extract to e.g. C:\Akasha or ~/Akasha.

Windows: double-click INSTALL.cmd at the root of the extracted folder to run the installer (no PowerShell execution policy prompt), or run .\scripts\setup.ps1. Linux / macOS: run chmod +x scripts/setup.sh && ./scripts/setup.sh.

You get the akasha (or akasha.exe), akasha-daemon, akasha-tui executables, a docs folder with the user guide, and in the full zip a ui subfolder with the desktop app installer.

Windows with NVIDIA GPU (CUDA build)

For fast local inference on an NVIDIA GPU, download akasha-windows-x86_64-cuda.zip (CLI) or akasha-full-windows-x86_64-cuda.zip (CLI + desktop UI + scripts) from Releases. Requires recent NVIDIA drivers (nvcuda.dll); the archive includes CUDA runtime DLLs — no CUDA Toolkit install needed. One-liner GPU: get-akasha-cuda.ps1 or get-akasha.ps1 -Cuda.

Expand-Archive .\akasha-windows-x86_64-cuda.zip -DestinationPath C:\Akasha -Force
cd C:\Akasha
.\scripts\setup.ps1 -InstallDir C:\Akasha
.\akasha.exe config models embedded-download
.\akasha.exe init
.\akasha.exe start

Optional desktop UI: also install akasha-ui-windows.zip from the same release page.

First run (Linux / macOS)

chmod +x akasha akasha-daemon akasha-tui
./akasha init
./akasha start
./akasha tui   # terminal interface

First run (Windows)

.\akasha.exe init
.\akasha.exe start
.\akasha.exe tui   # terminal interface

Run akasha up for the one-command always-on flow (ensure running + health check), or akasha start for manual startup. Keep running from the extracted folder so the in-app Doc tab can show the user guide (served from local docs).

First Run

akasha init runs an interactive setup: LLM provider (embedded, Ollama, OpenRouter, OpenAI), vault, optional channels, and optional Docker services (Ollama, TTS/STT, BitNet) if the akasha-models compose directory is found — set AKASHA_MODELS_DIR or use akasha services install --compose-dir … later. Use akasha init --defaults for minimal setup without prompts.

Then start the daemon and open the interface:

akasha up         # ensure daemon is running + verify status
akasha start      # background daemon (auto-restart on crash)
akasha tui        # terminal UI: Chat, Scheduled, Router, Doc, Tasks, Calendar, Memory

If you have the desktop app (Akasha UI), launch it; it connects to the daemon on port 3876 (configurable via AKASHA_PORT).

Commands Reference

Daemon

akasha up                 # Start if needed + verify status
akasha start              # Start daemon (auto-restart)
akasha start --foreground # Run in foreground (logs in terminal)
akasha stop               # Stop daemon

Task operations

akasha task watch <task_id> [--interval-ms 1500]
akasha task events <task_id> [--limit 40] [--json]
akasha task cancel <task_id>

Telegram access governance

akasha telegram list
akasha telegram approve <pairing_code|user_id>
akasha telegram reject <user_id>
akasha telegram remove <user_id>
akasha telegram promote <user_id>
akasha telegram demote <user_id>
akasha telegram reset

Setup & diagnostic

akasha init              # Interactive setup
akasha init --defaults   # Minimal setup, no prompts
akasha doctor            # Check system and daemon
akasha doctor --fix      # Create data_dir and minimal config if missing
akasha doctor --advice   # Diagnostic advice (daemon must be running)
akasha paths             # Show data_dir and config file paths

Vault (secrets)

akasha vault list        # List stored keys
akasha vault set KEY [value]  # Store a secret
akasha vault get KEY     # Show value (use with care)
akasha vault delete KEY  # Remove a key

Config & router

akasha config models routes   # Models per category
akasha config models set CATEGORY PROVIDER MODEL
akasha config models fetch   # Fetch Ollama model info
akasha config models get [CATEGORY]   # Show models
akasha config env list   # List env vars in akasha.env
akasha config env get KEY / set KEY [value]
akasha config provider list   # List providers in llm_router.yaml
akasha config provider set-ollama [--url URL] [--category CAT] [--model MODÈLE]
akasha config provider add-openai [--api-key KEY] [--category CAT] [--model MODÈLE]
akasha config provider add-openrouter [--api-key KEY] [--category CAT] [--model MODÈLE]
akasha router metrics    # LLM router metrics
akasha router discover   # Discover Ollama instances
akasha router show MODEL # Ollama model info

Plugins

akasha plugin list      # List installed plugins
akasha plugin reload    # Reload plugins (no daemon restart)
akasha plugin install PATH   # Install from directory
akasha plugin uninstall ID  # Uninstall by id
akasha plugin catalog   # Bundled / local catalog of available plugins

The Plugins page on this site lists the community catalog from the Akasha_plugins repository (always up to date with main). Use akasha plugin install with a local path or follow each plugin’s README.

Docker services (optional)

Requires Docker and the akasha-models compose folder. Set AKASHA_MODELS_DIR to that directory, or pass --compose-dir.

akasha services install [--ollama] [--voice] [--bitnet] [--all] [--compose-dir PATH]
akasha services status   # docker compose ps
akasha services stop     # docker compose down

Updates llm_router.yaml / voice_router.yaml in the data directory when services are enabled.

Interfaces

akasha tui   # Terminal UI (Chat, Scheduled, Router, Doc, Tasks, Calendar, Memory)

Update

akasha update check    # Check for a new version; prints download URL if available
akasha update install   # Open the latest release download page in the browser

Safety queue & operator reports

Akasha provides a review queue for sensitive actions alongside persistent allow/deny decisions. The queue is available from CLI, TUI, and desktop workflows with explicit status transitions.

Queue lifecycle

  • pending — waiting for operator decision.
  • approved — action may continue.
  • denied — action is blocked with explicit feedback.
  • expired — no decision in the allowed window.

HTTP API

  • GET /api/permissions/queue — optional status, limit, cursor
  • GET /api/permissions/queue/:id
  • POST /api/permissions/queue/:id/approve, POST /api/permissions/queue/:id/deny, POST /api/permissions/queue/:id/expire — optional body { "note": "..." }
  • GET /api/tasks/:id/report — compact post-task operator summary (done, needs_review, failed, next_steps).

CLI

akasha permissions queue list [--status pending]
akasha permissions queue approve <id> [--note "..."]
akasha permissions queue deny <id> [--note "..."]

UI surfaces

  • Desktop (Tauri) — PermissionsBell in the header; permission center for pending items.
  • Code Studio — operator cockpit sections for task runs, swarm workers, and permission context.
  • TUI — permission review integrated with task workflows.

Report schema

Reports are generated on task completion, long autonomous cycles, and Code Studio run completion. Minimum fields: done[], needs_review[], failed[], next_steps[].

This complements existing decision endpoints (/api/permissions/decisions) for persistent allow/deny rules and supports governance in Code Studio, the desktop permission center, and mission workflows.

Steering & follow-up during long tasks

While a task runs tools or orchestration, you can queue user messages instead of starting a conflicting root task. Two delivery modes mirror Pi-style steer vs follow-up.

Delivery modes

  • steering — inject after the current LLM turn (priority mid-task guidance).
  • follow_up — run after the current work unit completes.

Set message_delivery_mode on POST /api/message (or use the client selector in Tauri / Code Studio).

Task message queue API

  • GET /api/tasks/:id/queue — snapshot steering[] and follow_up[]
  • DELETE /api/tasks/:id/queue — flush both queues

CLI

akasha task queue list <task_id>
akasha task queue clear <task_id>

Events (SSE)

user_steering_queued, user_follow_up_queued, user_steering_applied, user_follow_up_applied — see daemon event stream on GET /api/events.

Code Studio & swarm MVP

Install (v0.10+): npx akasha-code-studio@0.10.0 — serves the cockpit on http://127.0.0.1:5178 and proxies /api to the daemon (default port 3876). Override with VITE_DAEMON_URL or AKASHA_STUDIO_PORT.

Source repository: akasha-code-studio. Swarm mode adds a coordinator plus bounded workers.

Roles

  • studio_project_manager — coordinator only; assigns subtasks.
  • studio_worker_* — bounded parallel workers by specialization.

Worker states

spawned → ready → running → blocked | completed | failed | stopped

Events

Structured events on GET /api/tasks/:id/events: studio_worker_state_changed, studio_subtask_assigned, studio_subtask_completed, studio_subtask_failed, studio_conflict_notice.

Limits

Respect AKASHA_STUDIO_MAX_PARALLEL_OPS; swarm is opt-in via task context. All writes stay inside the project disk root.

Companion (ESP32)

Akasha Companion is a voice-first Freenove FNK0104B thin client: avatar on the TFT, MEMS mic → daemon STT, reply → TTS on the speaker. Text and image are secondary surfaces. Conversational STT/TTS stay on the daemon (/api/voice/*).

  • Daemon must listen on the LAN: AKASHA_BIND=0.0.0.0.
  • Configure STT/TTS in voice_router.yaml.
  • Optional pairing / snapshot / hands-free VAD via /api/companion/*.

Full guide (flash, secrets, gestures, VAD): Getting started · Akasha_companion repo

💡
Supported product SKU is FNK0104B. Flash with the repo scripts: scripts/flash.ps1 / scripts/flash.sh.

Configuration

All config files live in the data directory. Run akasha paths to see its path (e.g. C:\Users\…\akasha on Windows, ~/akasha on Linux/macOS).

Main files

  • llm_router.yaml — LLM providers (Ollama, OpenAI, OpenRouter, embedded) and models per task type.
  • tools_policy.yaml — Tool permissions: file paths, allowed commands, web search, skill-install hosts (see Tools policy).
  • akasha.env — Persistent env vars (also editable via akasha config env set).
  • connectors.env — Telegram, Slack, Discord activation (see Channels).
  • agent_profile.json — Agent profile: name, role, personality, rules, optional formality (formal / informal). Editable in Settings → Agent profile (web UI) or by editing the file and restarting the daemon.
  • autonomous_mission.yaml — Optional autonomous mission (objective, heartbeat, report directory). Editable in the Mission tab or via /api/autonomous-mission.
  • voice_router.yaml — Optional TTS/STT URLs (voice button in the web UI when STT is configured).

LLM router & orchestrator

In llm_router.yaml, task types map categories to provider/model. See LLM router (YAML) for every key and examples. v0.7.0+: optional task_types.orchestrator — when present, the orchestrator uses it for decomposition instead of system.

Quick YAML / env examples

akasha.env (one variable per line; loaded when the daemon starts):

AKASHA_PORT=3876
AKASHA_LOG=info
AKASHA_MAX_RESPONSE_TOKENS=4096

connectors.env — optional flags for bots (same line format; often created by akasha init):

AKASHA_TELEGRAM_ENABLED=1
AKASHA_SLACK_ENABLED=1
AKASHA_DISCORD_ENABLED=1
AKASHA_TELEGRAM_NOTIFY_CHAT_ID=123456789

Tokens themselves stay in the vault, not in these files. More keys: Environment variables and Env files (.env).

akasha init or akasha doctor --fix creates the data_dir and minimal config files if missing.

LLM router (llm_router.yaml)

Location: data_dir/llm_router.yaml (or project root if missing from data_dir). Used by: daemon, akasha config models …. API keys can be vault://key_name or standard env vars (e.g. OPENAI_API_KEY).

📌
task_types is the main knob: each entry is task_types.<name>: { primary, fallback, constraints? }. The router picks a task type name from classification, system prompts, orchestration, or tool context, then loads the matching route. Define a primary (provider + model) and optional fallback chain for every behaviour you care about.

task_types — keys you can use

YAML accepts any string as a key; the table below lists the names the engine actually resolves. If a name has no entry, defaults / fallbacks apply.

A. Automatic classification (chat — keyword router)

When no explicit override is set, the router classifies the user message into one of these six types:

task_types keyTypical triggers
conversationDefault when nothing more specific matches.
code_generationCode, implement, debug, script, functions, …
creative_writingStories, poems, articles, emails, …
scientific_analysisPapers, research wording, …
data_analysisStatistics, charts, “analyze data”, …
system_diagnosticDiagnostics, health, status, runbooks, …

B. System, orchestration, and image

task_types keyRole
systemInternal “system” LLM work (memory extraction, compaction, summaries, etc.).
orchestratorOptional (v0.7+): decomposition / planning LLM. If absent, orchestrator falls back to system.
image_generationRequired for the generate_image tool: primary selects the image backend (e.g. OpenAI Images API, Ollama image-capable model). This is separate from the chat text model.

C. Specialist / delegation routes (orchestrator & sub-agents)

When the pipeline assigns a specialist agent, the router looks up a route under that agent’s primary task type (and may fall back to related types if no custom model is set). You can define any of these keys to pin a provider/model per role:

task_types keyNotes
financialMay fall back to data_analysis → conversation if unset.
documentalist
project_manager
technical_writerMay fall back to creative_writing.
researchMay fall back to scientific_analysis.
security_auditMay fall back to code_generation, system_diagnostic.
creativeMay fall back to creative_writing.
analystMay fall back to creative_writing.
architectMay fall back to code_generation, system_diagnostic.
frontend, backend, integrationOften aligned with code_generation fallbacks.
databaseMay fall back to data_analysis / code_generation.
qaMay fall back to system_diagnostic / code_generation.

Delegation aliases: the agent id code resolves to the code_generation route; search resolves to conversation. There is no separate task_types.search key unless you add one yourself.

Autonomous mission (autonomous_mission.yaml) accepts additional heartbeat symbols such as search, code, schedule for heartbeat_preferred_task_type — routing still uses the mappings above (e.g. code → code_generation).

Structure of each task_types.<name>

  • primary — provider, model, optional config (see below).
  • fallback — ordered list of { provider, model, config? }.
  • constraints — optional max_cost_per_request (USD), max_latency_secs.

Top-level keys (file layout)

KeyTypeDescription
versionstringOptional, e.g. "1.0".
globalobjectTimeouts, metrics, retries (see below).
providersobjectNamed providers: ollama, openai, azure_openai, openrouter, bitnet. Each value uses the provider fields below.
model_optionsobjectPer-model metadata (e.g. from akasha config models fetch): context_length_max, num_ctx, family, parameter_size, optional capabilities, modified_at, extra.
task_typesobjectRoutes: see tables above.

global

KeyDefaultDescription
enable_metricstrueRouter metrics collection.
enable_fallbacktrueTry fallback routes if primary fails.
default_timeout_secs300Per-request LLM timeout (seconds).
default_max_retries2Max retries for failed calls.

providers.<name>

KeyDescription
api_key_refAPI key: vault://openai_api_key or env-style name resolved from the environment.
base_urlBase URL (Ollama, OpenAI-compatible, Azure endpoint, BitNet, etc.).
organizationOpenAI organization id (optional).
versionOptional API version string where applicable.
always_availableOptional bool (advanced routing metadata).
site_urlOpenRouter HTTP Referer (or OPENROUTER_SITE_URL).
app_titleOpenRouter app title header (or OPENROUTER_APP_TITLE).

For Azure OpenAI, set api_key_ref and base_url (resource endpoint); the deployment name is the model in the route entry.

primary.config / route config (per model)

Optional JSON/YAML object merged into completion requests: temperature, top_p, top_k, frequency_penalty, presence_penalty, repeat_penalty, num_ctx, num_gpu, max_tokens (legacy alias max_token), thinking_level (string). Large integers are clamped to 32-bit limits.

Examples

Minimal embedded default (conceptually what akasha doctor --fix aligns with):

global:
  default_timeout_secs: 300
  default_max_retries: 2
task_types:
  conversation:
    primary: { provider: akasha_embedded, model: default }
    fallback: [{ provider: akasha_core, model: core }]

Ollama on the same machine:

providers:
  ollama:
    base_url: "http://localhost:11434"
task_types:
  conversation:
    primary: { provider: ollama, model: llama3.2 }
    fallback: [{ provider: akasha_embedded, model: default }]

OpenAI with a vault reference:

providers:
  openai:
    api_key_ref: "vault://openai_api_key"
task_types:
  conversation:
    primary: { provider: openai, model: gpt-4o, config: { temperature: 0.7, max_tokens: 4096 } }

Image generation (for the generate_image tool — distinct from chat):

providers:
  openai:
    api_key_ref: "vault://openai_api_key"
  ollama:
    base_url: "http://localhost:11434"
task_types:
  image_generation:
    primary: { provider: openai, model: dall-e-3, config: { default_size: "1024x1024" } }
    # or: primary: { provider: ollama, model: flux, ... }

Use akasha config models set <category> <provider> <model> to update text routes without hand-editing; image routes are often edited under task_types.image_generation.

Vault CLI

Secrets live encrypted under the data directory. Never commit them. The chat can list key names with /vault list but cannot store secrets — use the CLI or HTTP API.

Commands

CommandDescription
akasha vault listPrint all stored key names (values are never shown).
akasha vault set KEY [value]Store or update a secret. If value is omitted, it is read from stdin (safe for multiline tokens).
akasha vault get KEYPrint the value (sensitive — avoid logs and shoulder-surfing).
akasha vault delete KEYRemove a key.

Examples

# List keys
akasha vault list

# Set from argument (shell history may capture this — prefer stdin for production)
akasha vault set brave_api_key YOUR_BRAVE_KEY

# Set from stdin (PowerShell)
"YOUR_SECRET" | akasha vault set openai_api_key

# Set from stdin (bash — avoids shell history)
printf '%s' "$SECRET" | akasha vault set openrouter_api_key

# Read back (debug only)
akasha vault get brave_api_key

# Remove
akasha vault delete old_key

Common key names

These names match what akasha init / akasha config provider add-openai and llm_router.yaml expect when using vault://… references:

  • LLM: openai_api_key, openrouter_api_key, azure_openai_api_key (as referenced in your YAML).
  • Web: brave_api_key (Brave Search; or set BRAVE_API_KEY in the environment).
  • Channels: telegram_bot_token, slack_signing_secret, discord_bot_token.

In llm_router.yaml, reference a vault key as api_key_ref: "vault://openai_api_key". Environment variables such as OPENAI_API_KEY still work if you do not use the vault.

Env files (akasha.env & connectors.env)

Both are plain text: KEY=value per line (spaces around = are tolerated). The daemon loads them when it starts.

data_dir/akasha.env

General daemon and behaviour flags. Edit with akasha config env list, akasha config env get KEY, akasha config env set KEY value, or manually. Examples:

AKASHA_PORT=3876
AKASHA_LOG=info
AKASHA_DATA_DIR=C:\Users\You\akasha
AKASHA_MAX_RESPONSE_TOKENS=4096
AKASHA_SYSTEM_TASK_MAX_TOKENS=8192
AKASHA_LLM_TIMEOUT_SECS=600
AKASHA_DEGRADED_MODE=1
AKASHA_CLUSTER_ENABLED=1
AKASHA_NODE_ID=my-node
AKASHA_EMBEDDED_MODEL=qwen3_0_6b
AKASHA_SPEC_DIR=C:\path\to\spec

See Environment variables for the full list of supported keys.

data_dir/connectors.env

Typically used for channel toggles so Telegram/Slack/Discord can be enabled without mixing them into every akasha.env deploy. Pair with vault secrets:

AKASHA_TELEGRAM_ENABLED=1
AKASHA_TELEGRAM_NOTIFY_CHAT_ID=123456789
AKASHA_SLACK_ENABLED=1
AKASHA_DISCORD_ENABLED=1

After changing env files, restart the daemon (akasha stop && akasha start).

Optional services (Docker)

Akasha can drive Ollama, BitNet (OpenAI-compatible local server), and voice (TTS + STT) via Docker Compose profiles shipped in the akasha-models layout (same tree as the engine’s akasha-models/docker-compose.yml). The CLI updates llm_router.yaml and voice_router.yaml in your data directory to point at localhost after install.

Requirements

  • Docker Engine with Docker Compose V2 (docker compose subcommand).
  • Enough disk space for images and model weights (Ollama pulls; BitNet needs a GGUF in a volume; voice images build Python stacks).
  • RAM / GPU — Ollama and BitNet benefit from GPU on Linux (optional deploy.resources in compose for NVIDIA); CPU-only works but is slower.
  • A directory containing docker-compose.yml — set AKASHA_MODELS_DIR to that path, or pass --compose-dir to every akasha services command.

If docker-compose.yml is missing

If the file was deleted or your install did not ship the akasha-models tree, download the same Compose file from this site and save it as docker-compose.yml in an empty folder, then point AKASHA_MODELS_DIR (or --compose-dir) at that folder:

  • Download akasha-models-docker-compose.yml (raw) — right-click → Save as… → rename to docker-compose.yml if needed.
  • Ollama profile only (--profile ollama): this file is enough; the image is pulled from Docker Hub.
  • Voice or BitNet: the compose file references ./tts, ./stt, and ./bitnet build contexts. You need the full akasha-models directory from your engine bundle / release (or equivalent) beside the compose file, or those profiles will fail to build.

Services and ports

ProfileContainersPorts (host)Akasha config
ollamaOllama LLM11434providers.ollama.base_url → http://localhost:11434
bitnetBitNet server8080providers.bitnet.base_url → http://localhost:8080 (populate /models volume with a GGUF)
voiceTTS + STT8765 (TTS), 8766 (STT)voice_router.yaml: tts.base_url, stt.base_url

CLI workflow

# Set once: folder that contains docker-compose.yml (akasha-models checkout or copy)
set AKASHA_MODELS_DIR=C:\path\to\akasha-models
# Linux/macOS: export AKASHA_MODELS_DIR=~/src/akasha-models

akasha services install --ollama
akasha services install --voice
akasha services install --bitnet
akasha services install --all
# Or: akasha services install --voice --compose-dir C:\path\to\akasha-models

akasha services status
akasha services stop

# Restart Akasha so it reloads YAML
akasha stop && akasha start

Manual Compose (without the CLI): from that directory, docker compose --profile ollama up -d, --profile voice up -d, --profile bitnet up -d, or combine profiles. See the engine’s akasha-models/README.md for BitNet model download and TTS/STT environment variables (TTS_VOICE, WHISPER_MODEL, etc.).

Interfaces

The TUI (akasha tui) has 7 tabs: Chat, Scheduled (planned returns — agent responses for recurring/scheduled tasks, separate from the main chat), Router (LLM metrics), Doc (user guide), Tasks, Calendar, Memory. Use Tab to switch; R to refresh Router, Scheduled, or task list; F2 to cycle themes. Mission and full Settings are desktop/web only; you can still edit autonomous_mission.yaml or call the HTTP API from the CLI.

The desktop app (Akasha UI, if installed) connects to the same daemon on port 3876 and adds: Settings with Agent profile (including formality — formal / informal / default), Data with User RAG and Project graph (multiple indexed folders, HTML report per workspace), Mission tab for autonomous goals, and attachments in Chat (images, PDFs, text). Use keys 1–9 to switch tabs when focus is not in an input field (Mission = 8, Settings = 9).

Tools policy (tools_policy.yaml)

Location: data_dir/tools_policy.yaml. Semantics: if the file is missing or empty, tool access is deny-by-default (paths and commands blocked until you allow them). akasha doctor --fix creates a starter file.

All keys (reference)

KeyTypeDescription
allowed_read_pathsstring[]Path prefixes allowed for read_file, search, etc. Use "." for daemon CWD or absolute paths. Empty = no reads.
allowed_write_pathsstring[]Path prefixes allowed for writes. Empty = no writes.
allowed_commandsstring[]Executable names allowed for run_command. Use ["*"] to allow all, combined with blocked_commands for safety.
blocked_commandsstring[]Deny list; wins over allowed_commands (e.g. block rm when using ["*"]).
command_timeout_secsintegerTimeout in seconds for each command (e.g. 60).
run_command_default_cwd_workspaceboolIf true, run_command uses the task workspace as cwd when no --cwd is set.
allowed_web_domainsstring[]Domains allowed for web_fetch. ["*"] allows any (minus blocked).
blocked_web_domainsstring[]Blocked domains for web_fetch; takes precedence.
web_search_enabledboolEnable Brave Search (web_search). Requires vault brave_api_key or BRAVE_API_KEY.
tool_profilesmap → string[]Named lists of tool names, e.g. coding: [read_file, write_file, run_command].
default_profilestringIf set, only tools listed in tool_profiles[default_profile] are allowed (plus command/path rules).
allowed_skill_install_hostsstring[]HTTPS hosts for install_skill. Default behaviour is restrictive (GitHub-oriented); ["*"] allows any host.
require_approvalstring[]Tool names that need explicit user approval before running (e.g. write_file, run_command, device_invoke).
allowed_device_interfacesstring[]For device_discover / device_invoke: e.g. local_media, system, synthetic_input, usb, network. ["*"] allows all (subject to blocked).
blocked_device_interfacesstring[]Blocked interfaces; takes precedence.
browser_enabledboolEnable Playwright-based browser tools. Requires Node/npm and the Playwright runner (see env AKASHA_PLAYWRIGHT_RUNNER / auto-install).
browser_allowed_domainsstring[]Allowed domains for browser navigation.
browser_blocked_domainsstring[]Blocked domains for browser; takes precedence.
browser_headlessboolDefault true (no window).
browser_action_timeout_secsintegerPer-action timeout (default 30).
browser_session_timeout_secsintegerSession lifetime (default 300).

Example

allowed_read_paths: ["."]
allowed_write_paths: ["."]
allowed_commands: ["cargo", "npm", "git", "node"]
blocked_commands: ["rm"]
command_timeout_secs: 60
web_search_enabled: true
allowed_web_domains: ["*"]
allowed_skill_install_hosts: ["github.com", "gitlab.com", "raw.githubusercontent.com"]
browser_enabled: true
browser_allowed_domains: ["*"]

Brave search: akasha vault set brave_api_key … then set web_search_enabled: true. For vault-injected env on a single command, the agent may use TOOL: run_command VAULT:my_key=ENV_NAME … (see engine docs). Skills that need extra binaries add their commands to allowed_commands automatically on install.

Channels (Telegram, Slack, Discord, Teams)

Optional connectors let the agent respond on external platforms. Store tokens in the vault and set the matching env var to 1. Activation vars are loaded from connectors.env in the data directory (created or updated by akasha init).

  • Telegram — akasha vault set telegram_bot_token YOUR_TOKEN, then AKASHA_TELEGRAM_ENABLED=1. Message the same bot as the token (check daemon log line bot_username). In private, plain text or /akasha …; in groups, /akasha@BotUsername …. Pairing: use /start to request access and obtain a code; admins approve with akasha telegram approve <code>. Admin lifecycle: akasha telegram list|reject|remove|promote|demote|reset. Chat ID for notifications: send a message to @userinfobot, use the numeric id in AKASHA_TELEGRAM_NOTIFY_CHAT_ID. Only one process may poll Telegram per bot token (no second daemon / no webhook elsewhere). Optional startup ping may fail until you have opened the bot chat at least once.
  • Slack — Vault slack_signing_secret, AKASHA_SLACK_ENABLED=1. Point the Slack slash command to POST /channels/slack/command on your daemon URL.
  • Discord — akasha vault set discord_bot_token YOUR_TOKEN, then AKASHA_DISCORD_ENABLED=1. Prefix: !akasha <message>.
  • Microsoft Teams — AKASHA_TEAMS_ENABLED=1 when your Teams integration is configured (see vault / deployment docs for your build).

Environment variables

Persist values in data_dir/akasha.env via akasha config env set KEY value (loaded when the daemon starts). Connector flags often live in connectors.env instead.

Daemon & UI

  • AKASHA_PORT — HTTP port (default 3876).
  • AKASHA_DATA_DIR — Config, vault, skills, DB (default %USERPROFILE%\akasha / ~/akasha).
  • AKASHA_LOG — trace | debug | info | warn | error (default info).
  • AKASHA_LANG — TUI language: value starting with en → English; else French. Overrides LANG / LC_ALL.
  • AKASHA_APP_BASE_URL — Site root for api/latest.json (update check). Default: this site’s GitHub Pages URL.

LLM & chat behaviour

  • AKASHA_MAX_RESPONSE_TOKENS — Max tokens per chat completion (default 4096).
  • AKASHA_MAX_CONTEXT_TOKENS — Token budget before short-term history compaction (default 8192).
  • AKASHA_SYSTEM_TASK_MAX_TOKENS — Max tokens for system tasks (summaries, extraction). Default 4096; raise to 8192 if “thinking” models return empty outputs.
  • AKASHA_LLM_TIMEOUT_SECS — Total LLM call timeout (default 300). First load of the embedded model can be slow—increase if needed.
  • AKASHA_LLM_STREAM_IDLE_SECS — Max gap between stream chunks (default 60).
  • AKASHA_LLM_FIRST_CHUNK_SECS — Max wait for the first chunk (embedded model load); defaults to min(300, AKASHA_LLM_TIMEOUT_SECS).
  • AKASHA_MAX_TOOL_ROUNDS — Agent tool loop iterations per reply (default 10).
  • AKASHA_EMBEDDED_MODEL — Embedded backend id (e.g. qwen3_0_6b; build-dependent).
  • OLLAMA_HOST — Ollama base URL (default http://localhost:11434) if not in llm_router.yaml.

Orchestration & session limits

  • AKASHA_MAX_CONCURRENT_DELEGATIONS — Parallel sub-tasks (default 15).
  • AKASHA_MAX_PARALLEL_SUBTASKS — Parallel LLM subtask workers (default 4).
  • AKASHA_MAX_COST_PER_SESSION_USD — Stop chat session when estimated LLM cost exceeds this (optional).
  • AKASHA_MAX_TOKENS_PER_SESSION — Stop session when token usage exceeds this (optional).
  • AKASHA_DEGRADED_MODE=1 — Router uses only local providers (e.g. Ollama + embedded).

Channels (also connectors.env)

  • AKASHA_TELEGRAM_ENABLED=1, AKASHA_SLACK_ENABLED=1, AKASHA_DISCORD_ENABLED=1, AKASHA_TEAMS_ENABLED=1
  • AKASHA_TELEGRAM_NOTIFY_CHAT_ID — Chat id for startup notification.

Cluster (advanced)

  • AKASHA_CLUSTER_ENABLED=1 — Multi-node mode (NATS, leader election).
  • AKASHA_NODE_ID — Node id (defaults to hostname).
  • AKASHA_NATS_TLS_CA, AKASHA_NATS_CLIENT_CERT, AKASHA_NATS_CLIENT_KEY — mTLS paths for NATS.

Services & models on disk

  • AKASHA_MODELS_DIR — Directory containing docker-compose.yml for akasha services install (Ollama, voice, BitNet).
  • HF_HOME — Hugging Face cache for embedded weights (default user cache). Point into data_dir to keep everything in one place.

API keys & integrations (common)

  • BRAVE_API_KEY or vault brave_api_key — Web search (with web_search_enabled in tools policy).
  • OPENAI_API_KEY, OPENROUTER_API_KEY — Cloud LLM (also storable in vault).
  • OPENROUTER_SITE_URL, OPENROUTER_APP_TITLE — OpenRouter dashboard metadata.
  • AKASHA_MESSAGE_WEBHOOK_URL — Outbound webhook for the message tool.

Debug & power users

  • AKASHA_AGENT_DEBUG=1 — Verbose agent logging.
  • AKASHA_LOG_LLM_RESPONSE=1 — Log full LLM text at info level.
  • AKASHA_TOOLS_JOURNAL_PATH — Append-only log path for file write tool calls.
  • AKASHA_PLAYWRIGHT_RUNNER — Path to Playwright runner for browser automation.
  • AKASHA_PLAYWRIGHT_AUTO_INSTALL=0 — Disable auto npm install / browser download.
  • AKASHA_GRAPH_EXPAND=1 — Memory graph expansion (when supported).
  • AKASHA_VAULT_MASTER_KEY — Master key for file-based vault (if used).
💡
Windows PowerShell: $env:AKASHA_TELEGRAM_ENABLED="1" · CMD: set AKASHA_TELEGRAM_ENABLED=1

Troubleshooting

  • Doc tab is empty — Start the daemon from the folder where you extracted the archive (the one that contains the docs folder).
  • Empty responses with a “thinking” model — Some cloud models return empty content for system tasks. Increase AKASHA_SYSTEM_TASK_MAX_TOKENS (e.g. akasha config env set AKASHA_SYSTEM_TASK_MAX_TOKENS 8192) and restart the daemon.
  • Daemon won’t start — Run akasha doctor and akasha doctor --fix to create missing data_dir and config files.
  • No responses or timeouts — First load of the embedded model can take several minutes (download + CPU). Increase AKASHA_LLM_TIMEOUT_SECS / AKASHA_LLM_FIRST_CHUNK_SECS if needed. Check akasha doctor or /embedded. Point HF_HOME to a disk with enough space for model cache.
  • Ollama / cloud — Ensure Ollama is running or API keys are in the vault; akasha config models routes and the Router tab show active models.
  • Download link 404 on GitHub — Binaries are mirrored to Akasha_app releases after each upstream release. If a version has notes but no zip files yet, wait for the Update Release Notes workflow to finish or open an issue.

Using Skills

Ask the agent in chat to install a skill from a URL, e.g. « Install the calculator skill from https://github.com/azerothl/Akasha_skills/tree/main/skills/calculator ». The agent will download it and reload skills.

To allow other hosts (GitLab, custom HTTPS), edit tools_policy.yaml in the data_dir and set allowed_skill_install_hosts (e.g. ["*"] for any HTTPS).

If you add or change skill files manually in the data_dir, type /skills reload in the chat to reload without restarting the daemon.

💡
Browse the Skills Library for install URLs and descriptions.

Creating your own skill

If you want to create a skill for your own use (e.g. hosted elsewhere or only in your data_dir), the daemon only needs a valid SKILL.md. The format below is what Akasha expects so the agent can discover and use your skill.

Required file: SKILL.md

  • Filename: SKILL.md (uppercase).
  • Frontmatter (YAML between ---): Required: name (identifier, e.g. my-skill), description (short text: when the agent should use this skill; used for routing). Optional: license, compatibility, metadata (e.g. version: "1.0").
  • Body: Markdown with instructions for the agent (when to use the skill, which tools to call, guidelines, examples). See the Agent Skills specification.

skill.json (for the gallery / catalog)

If you publish the skill in the Skills Library or another tool that reads the catalog, add a skill.json with: id, name, version, description, author, category, tags, icon (e.g. Lucide name), featured, install_url, install_command, and optional trust metadata (trust_level, compat_status).

For a user-only skill (files in data_dir/skills/ or install via URL without listing in the gallery), only SKILL.md is required; the daemon does not need skill.json.

Optional directory structure

references/ (extra docs), scripts/, assets/ — see What are skills?. When installing from GitHub, the daemon can fetch the repo tree; for other hosts, only the file at the install URL (usually SKILL.md) is downloaded.

Installing your skill

Via agent: Ask in chat, e.g. “Install the skill from https://…” The URL must point to a raw SKILL.md or a path where SKILL.md is available.

Manual: Copy your skill folder into data_dir/skills/<name>/, then type /skills reload in chat. For non-GitHub hosts, set allowed_skill_install_hosts in tools_policy.yaml (see Configuration).

Minimal SKILL.md example

---
name: my-skill
description: Use when the user wants to do X. Do Y and Z.
---

# My Skill

When the user asks for X, use the tools A and B. Return the result in format …

Slash commands (in chat)

In Chat (TUI or web), lines starting with / are commands (not sent to the LLM). /help or /? prints the authoritative list for your build. Reference below:

CommandDescription
/help, /?List all slash commands.
/task create "message"Create a task (same as sending that message to the agent).
/schedule create NAME INTERVAL_SEC "description"Recurring schedule (interval in seconds).
/schedule delete SCHEDULE_IDRemove a schedule.
/stop TASK_ID, /cancel TASK_IDCancel a running or queued task.
/newsessionNew session: clear short-term chat context.
/statusDaemon status.
/doctorHealth checks (Ollama, vault, embedded model, etc.).
/adviceDiagnostic help using RAG + LLM (daemon must be up).
/embeddedEmbedded local model status (loaded or not).
/embedded reloadUnload embedded weights; next request reloads.
/metricsLLM router metrics.
/modelsAll models from configured providers.
/models listPrimary + fallback model per category.
/models set CATEGORY PROVIDER MODELSet category model (e.g. /models set conversation ollama llama3.2); previous primary becomes fallback; saved to llm_router.yaml.
/routesSame routing view as /models list.
/config listKeys in akasha.env.
/config get KEYShow one env value.
/config set KEY valueSet persistent env (restart may be needed).
/vault listVault key names only (no values).
/pluginsInstalled plugins.
/reloadReload plugins without daemon restart.
/skills, /skills listInstalled skills (name + description).
/skills reloadRescan skill folders after add/edit.
/skills uninstall <name>Remove a skill by id.
/restartRestart daemon (when using the supervisor).

Vault: add or delete secrets only via CLI — akasha vault set KEY [value], akasha vault delete KEY — or API DELETE /api/vault with body {"key":"…"}. No slash command writes vault values.

Reference products — parity with Akasha

Hermes Agent (Nous Research) is one useful public reference for toolsets, MCP, webhooks, and operator UX. Akasha tracks gaps and progress in a versioned matrix in the main repository (not shipped in the binary):

Product comparison (Hermes, Mercury Agent, Cursor, others): Compare.

MCP — validate and probe

Akasha ships offline JSON validation and a short stdio JSON-RPC probe (initialize, optional tools/list) before you rely on a server.

  • CLI: akasha mcp validate <mcp.json> · akasha mcp probe <mcp.json> [--name SERVER] [--tools]
  • API: GET /api/mcp/status (disk validation) · GET /api/mcp/runtime (stdio attach summary) · POST /api/mcp/runtime/stdio/start / POST /api/mcp/runtime/stdio/stop (optional long-lived child for operators).
  • Docs: mcp-mvp.md, mcp-runtime.md, mcp-oauth.md (OAuth hardening checklist).
⚠
Probing runs the configured command from your JSON file — use only trusted configs (same trust model as other MCP hosts).

Terminal & PTY (operator API)

Beyond one-shot run_command, the daemon exposes interactive PTY sessions over HTTP (create, read, write, resize, close). Capabilities: GET /api/terminal/capabilities. CLI: akasha terminal capabilities.

Specification: spec/43_session_terminal.md · roadmap backends: terminal-backends-roadmap.md.

Signed webhooks & direct delivery

For server-to-server automation without invoking the LLM, the daemon exposes:

  • POST /api/automation/webhook — HMAC-SHA256 body, optional Idempotency-Key, rate limit (see env vars in doc).
  • POST /api/automation/webhook/direct — same verification; response body from AKASHA_WEBHOOK_DIRECT_BODY_JSON.

Full operator guide: automation-webhooks.md. Optional shared idempotency DB path: AKASHA_WEBHOOK_IDEM_SQLITE. Schedule + gateway shell hooks: gateway-shell-hooks.md.

Git worktree (happy path)

Akasha exposes Git worktrees for parallel agent sessions without cloning twice. Typical operator flow:

  1. List — akasha worktree list shows linked worktrees under your data directory or configured repo.
  2. Add — akasha worktree add <name> [<branch>] creates an isolated checkout for a feature or agent run.
  3. Work — point Code Studio evolutions or chat sessions at the worktree path; keep main/master clean for merges.
  4. Doctor — akasha worktree doctor reports stale paths, missing branches, or dirty state before removal.
  5. Remove — akasha worktree remove <name> after merge or abandon (daemon refuses if worktree is dirty unless forced).

Specification: reference-products-parity-matrix.md (Git worktree row). For IDE-style git inside Code Studio projects, use the Branches tab on a studio project instead.

Toolsets & effective tool state

Reference stacks often highlight toolsets (presets per channel or session). In Akasha, tool gating lives in tools_policy.yaml (tool_profiles) with operator helpers:

  • CLI: akasha toolset profiles · akasha toolset effective (daemon must be up for effective).
  • API: GET /api/tools/effective — allowed / blocked / approval + rule source.

Migration & multi-repo ecosystem

Akasha splits execution (Rust daemon) from catalogues and docs:

  • Skills — Akasha_skills (gallery + skills.json synced to this site).
  • Plugins — Akasha_plugins + WASM install under your data directory.
  • Code Studio — akasha-code-studio web cockpit for project tasks (see docs/OPERATOR_COCKPIT.md in that repo).
  • Local inference — Rbitnet (OpenAI-compatible; wire in llm_router.yaml).

When importing settings from another assistant, prefer akasha config validate and the vault for secrets — never commit API keys to this static site.

Update API

Akasha checks the following endpoint on startup (if auto-update is enabled):

GET https://azerothl.github.io/Akasha_app/api/latest.json

Response format

{
  "version": "v0.10.0",
  "release_date": "2026-09-25",
  "release_notes_url": "https://azerothl.github.io/Akasha_app/releases.html",
  "download_url": "https://github.com/azerothl/Akasha_app/releases/tag/v0.10.0",
  "changelog": "…",
  "min_supported_version": "0.5.0"
}

Version comparison

Akasha uses semantic versioning (semver). An update is triggered when version in the response is greater than the installed version.

Run akasha update check to see if a newer version is available; the command prints the download link.

Community

This showcase site and its releases are hosted in the Akasha_app repository. You can report issues, suggest improvements, or contribute to the site there.