apache

    apache/maka

    #99 this week

    Apache Maka (Incubating) is a local-first AI agent workspace. Model messages, tool calls, tool results, permission decisions, and termination events are recorded as an append-only log.

    ai
    ai-agents
    cli
    llm
    agent-runtime
    ai-agent
    apache
    desktop
    electron
    TypeScript
    Apache-2.0
    4.0K stars
    373 forks
    4.0K GitHub watchers
    Updated 8/29/2026
    View on GitHub

    Build with Backblaze B2

    SDKs, agent skills, IDE extensions, and reference pipelines from Backblaze Labs. All open source.

    Explore Backblaze Labs

    Loading star history...

    Use Cases & Benefits

    • Provides a local-first AI agent workspace that records model messages, tool calls, and events as an append-only runtime log.
    • Ensures data privacy and control by keeping sessions, settings, and run records on the user's machine with flexible model connection options.
    • Use for developing AI agents that require detailed execution logging and recoverable workflows on desktop environments.
    • Use for running reproducible AI benchmark experiments with multi-arm evaluation and immutable result tracking.
    • Use for integrating local tools and permission-controlled workflows in TypeScript-based AI agent runtime environments.

    About maka

    Maka

    CI License docs

    Maka — Your work. Your agent.

    A local-first Agent workspace built for real work.

    Maka does more than answer questions. With controlled permissions, it can inspect projects, execute tools, produce artifacts, and preserve model messages and tool calls as recoverable execution facts. Desktop, the terminal TUI, the non-interactive CLI, and Maka evaluation subjects all execute through Runtime Host.

    [!IMPORTANT] Maka is under active development. The macOS Apple Silicon desktop build is an early public release; data formats, CLI commands, and experimental capabilities may still change.

    Why Maka

    • Local-first instead of hosted-first: sessions, settings, and run records stay on your machine by default. You choose the model connection: cloud API, local model, or compatible gateway.
    • Log is the Runtime: model messages, Tool Calls, Tool Results, and termination facts enter Runtime Event Log. Sessions, UI, model context, and recovery are projections over that log.
    • Context is not history: Tool Result pruning and LLM Compaction change what the next inference sees without treating recorded evidence as disposable context.
    • One execution authority: Runtime Host owns Session, Turn, agent lifecycle, continuation, tools, and events. Eval owns only experiment semantics and results.

    Read Maka Backend Architecture for the complete design.

    Surfaces

    Entry pointBest forCurrent capability
    DesktopDaily interaction, file and Artifact workflows, model and permission setupElectron + React with streaming sessions, tool timelines, branching, search, and recovery
    TUI / CLIUsing Maka in the current project directory or running one non-interactive Turnmaka, maka run; shares workspace and model connections with Desktop
    EvalReproducible benchmark experiments across Maka and external subjectsmaka eval run <spec> --out <directory>

    Current capabilities

    Agent Runtime

    • Multiple model connections, streaming output, thinking, usage accounting, and provider-error normalization;
    • Local tools including Read, Write, Edit, Bash, Glob, and Grep;
    • Tool schema validation, dynamic availability, permission policy, watchdogs, abort, and error classification;
    • Runtime Event Log, AgentRun ledger, startup recovery, Turn Evidence, active Tool Result pruning, and history compaction.

    Desktop workspace

    • Create, archive, search, rename, retry, regenerate, and branch sessions from a Turn;
    • Artifact lists and previews, workspace instructions, model settings, and permission settings;
    • Local memory, web search, and bot entry points;
    • Integrations are configured independently, and not every experimental entry is available by default.

    Evaluation

    • Declarative multi-arm experiments expanded into task × repetition × subject cells;
    • Immutable per-cell attempts with targeted infrastructure replacement and earliest-valid selection;
    • A small result kernel for score, normalized usage, attributable cost, duration, status, failure reason, and artifacts;
    • Maka subjects execute only through Runtime Host; external competitors use generic external subject adapters.

    Quick start

    Download Desktop for macOS

    The signed and notarized Desktop app is available from GitHub Releases for Apple Silicon Macs only (arm64).

    1. Download Maka-<version>-mac-arm64.dmg;
    2. Open the DMG and drag Maka to Applications;
    3. Install ripgrep with brew install ripgrep to enable Runtime's Grep tool;
    4. Launch Maka and configure your own model connection under Settings → Models.

    Computer Use is not included in this first public build. Intel Macs, Windows, and Linux packages are not supported yet.

    Windows x64 preview

    Windows is still an unsigned preview, not a supported release tier. When a release includes Windows assets, follow the Windows preview installation and verification guide before running Maka-<version>-win-x64.exe. SmartScreen will identify the installer as coming from an unknown publisher; do not bypass that warning unless the downloaded SHA-256 matches the checksum published with the same release.

    Requirements

    • Node.js 22.19 or newer (CI uses Node.js 24);
    • npm (the lockfile and scripts use npm; the current packageManager is npm 11);
    • Git;
    • ripgrep, used by Runtime's Grep tool.

    Start Desktop

    git clone https://github.com/apache/maka.git
    cd maka
    npm ci
    npm run dev
    

    npm run dev starts the Desktop development environment with HMR. To build every workspace before starting Electron, use:

    npm run dev:full
    

    If dependencies were installed with ELECTRON_SKIP_BINARY_DOWNLOAD=1, install the Electron platform binary before starting:

    node node_modules/electron/install.js
    

    First run

    Maka does not bundle a shared model account. On first launch:

    1. Open Settings → Models;
    2. Add an API, local-model, or supported account connection;
    3. Test it and choose a default model;
    4. Return to the workspace and start a task.

    The app distinguishes configured, send-ready, and experimental connection states. An account flow that is not wired into Runtime is not presented as a usable model.

    Terminal entry points

    For the public npm package, see the CLI installation and usage guide. The commands below run the development CLI from a source checkout.

    Build the workspaces first:

    npm run build
    

    Then start the TUI or run one Turn:

    npm run cli:dev
    npm run cli:dev -- run "Summarize this repository and identify its most important risk"
    npm run cli:dev -- run --graph "Implement two independent slices, integrate them, then review the result"
    npm run cli:dev -- --help
    

    The TUI also accepts /graph on, /graph off, and /graph <task>. Non-interactive --graph runs wait for the durable Graph to finish before printing the final supervisor output. Graph implementation operators use isolated Git worktrees, so the source project must be a clean Git worktree.

    The repository CLI uses the same Maka Dev profile as a development Desktop build. The released maka binary continues to use the Maka profile; the two profiles are not copied or synchronized automatically. Evaluation specs and adapters live in packages/eval.

    Architecture

    The backend spine is:

    Desktop / TUI / CLI → Runtime Host → SessionManager → AgentRun
                                                 ↓
                             Model + Tool Runtime → Runtime Event Log
                                                 ↓
                                  Context / Session / UI projections
    
    Experiment → Cells → Attempts → Results
                        ↓
           Runtime Host executes Maka subjects
    

    Start with ARCHITECTURE.md. It provides the system map, code boundaries, problem-oriented reading paths, and six bilingual deep dives.

    Repository layout

    apps/desktop/       Electron main / preload / React renderer
    
    packages/core/      Pure contracts for Sessions, Events, Permissions, and Connections
    packages/storage/   SQLite operational state, configuration, and payload stores
    packages/runtime/   AgentRun, model adapters, tools, context, and recovery
    packages/eval/      Experiment cells, attempts, results, and executor/subject adapters
    packages/cli/       TUI and non-interactive CLI
    packages/ui/        Shared conversation, Markdown, Artifact, and UI primitives
    
    docs/               Architecture, product, security, privacy, and test contracts
    scripts/            Build hygiene, visual checks, smoke tests, and release helpers
    

    Local data and security boundary

    Maka stores workspace data under Electron userData by default:

    <Electron userData>/workspaces/default/
      runtime.sqlite
      connection-catalog.json
      credential-vault.json
      settings.json
      artifacts/
    

    Current boundaries that matter:

    • The current connection catalog is connection-catalog.json. Existing llm-connections.json files stay on disk and are not imported;
    • Sessions, messages, execution ledgers, workflows, usage, Automations, and Daily Review live in runtime.sqlite;
    • Runtime Policy credentials, including Connection API/OAuth material, request headers, web-search keys, and proxy passwords, live in local plaintext credential-vault.json, behind the OS account boundary, with POSIX directory mode 0700 and file mode 0600 enforced;
    • Runtime Host client profile access credentials are separate and live under <Electron userData>/runtime-host-client/credentials.json. Pre-existing Electron safeStorage credential/token files are not imported; affected users must re-authenticate;
    • Renderer does not receive plaintext credentials. File writes, Shell, and dangerous tool calls pass through the permission engine;
    • Eval does not construct Runtime or read Runtime storage. Maka subjects connect to an existing Runtime Host.

    Read SECURITY.md for security reporting and policy, and docs/README.md for current privacy and sandbox contracts.

    Runtime storage and recovery

    runtime.sqlite is the sole operational authority. It owns RuntimeEvents, session metadata and message history, Agent Graph control, core execution state, workflow state, usage and pricing, Artifact metadata, Automations, Daily Review, and Runtime continuation records. Artifact payload bytes remain regular files under artifacts/; connections, credentials, settings, MCP configuration, skills, and device identity remain configuration files.

    This storage generation does not import earlier File/JSONL authorities. On upgrade, legacy session titles may still be discoverable through current metadata, but conversation history that exists only in legacy transcript files is not copied into session_messages and opens as an empty thread. Likewise, pre-version or safeStorage-encrypted credential/token files are not migrated; users with only those copies must re-authenticate. This data-loss boundary is intentional for this release and must be considered before upgrading an existing workspace.

    Full operational backup uses the database owner's online SQLite backup API and copies canonical Artifact payloads under the Artifact writer lock. Its manifest binds every file by size and SHA-256. Validation checks the standalone SQLite snapshot's integrity, foreign keys, schema registry and required tables, decodes canonical session-message and Artifact records, and verifies Artifact payload sizes against SQLite metadata before restore. Backup and restore use owner-only file modes, file and directory synchronization, staging, and atomic publication.

    Runtime continuation remains opt-in:

    • MAKA_RUNTIME_SAFE_BOUNDARY_RESUME=1 enables the Desktop interrupted-turn Safe resume action, CLI/TUI /resume, and Desktop startup auto-resume. These paths may call the configured model provider and consume tokens. Enable the flag only when that behavior is explicitly desired.

    Phase 2 provides the durable write-side boundary and fail-closed safe-boundary continuation. Phase 3 reconciliation for indeterminate tool side effects is not implemented yet; ambiguous tool outcomes remain parked rather than retried.

    Development and verification

    Before sending a change, read CONTRIBUTING.md.

    Common repository-level commands:

    npm run build
    npm run typecheck
    npm test
    npm run check:release
    

    Run one workspace in isolation:

    npm --workspace @maka/runtime test
    npm --workspace @maka/eval test
    npm --workspace @maka/desktop test
    

    Use the following commands to update packages/core/src/model-metadata.generated.ts from models.dev and run the focused tests. Keep access-path-specific overrides in model-metadata.ts; do not edit the generated file by hand.

    npm run sync:model-metadata
    npm --workspace @maka/core test
    

    Desktop real-window and visual verification:

    npm --workspace @maka/desktop run e2e
    npm --workspace @maka/desktop run smoke:real-window
    

    Before submitting code, run typecheck, build, and focused tests proportionate to the change, followed by git diff --check.

    Documentation

    License

    Maka is licensed under the Apache License 2.0. See NOTICE for attribution information. Third-party components remain subject to their respective licenses and notices.

    Discover Repositories

    Search across tracked repositories by name or description