fix(cli): declare the transcript command's mid-turn disposition #2999 added the /transcript command and the change making midTurn a required field on MakaSlashCommand landed separately. Each was green on its own branch; main broke where they met. 'local' rather than 'refuse': showTranscriptViewer only calls tui.showOverlay, never entering runControl, so it satisfies the local contract — and mid-turn is exactly when reading back the transcript is most useful, so refusing there would remove the command's main value. Generated-by: Claude Opus 5 (Claude Code)
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.
[!NOTE] Apache Maka (Incubating) is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator PMC. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision-making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF. DISCLAIMER-WIP records the issues the project is currently aware of.
[!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.
Read Maka Backend Architecture for the complete design.
| Entry point | Best for | Current capability |
|---|---|---|
| Desktop | Daily interaction, file and Artifact workflows, model and permission setup | Electron + React with streaming sessions, tool timelines, branching, search, and recovery |
| TUI / CLI | Using Maka in the current project directory or running one non-interactive Turn | maka, maka run; shares workspace and model connections with Desktop |
| Eval | Reproducible benchmark experiments across Maka and external subjects | maka eval run <spec> --out <directory> |
Read, Write, Edit, Bash, Glob, and Grep;Apache Maka has not made an Apache release yet. Everything currently published from this repository or from a package registry was produced before or during incubation, is not an Apache Software Foundation release, and has not been reviewed or voted on by the Incubator PMC.
Once Apache releases exist, the official release is the source release published by the ASF and approved by the podling PPMC and the Incubator PMC. A package built from that source and distributed elsewhere, for example through a package registry or as a Desktop installer, is a convenience artifact rather than the release itself, and it is valid only when it is built from an approved source release. .github/ASF_SOURCE_RELEASE.md holds the candidate contract, signing path, and verification steps.
Until an approved source release exists, this README recommends no prebuilt download. Build and run Maka from source as described below. Desktop currently targets Apple Silicon Macs (arm64); Intel Macs and Linux are not supported yet, and Windows support remains an unsigned preview rather than a supported release tier.
packageManager is npm 11);ripgrep, used by Runtime's Grep tool.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
Maka does not bundle a shared model account. On first launch:
Settings → Models;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.
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.
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.
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
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:
connection-catalog.json. Existing llm-connections.json files stay on disk and are not imported;runtime.sqlite;credential-vault.json, behind the OS account boundary, with POSIX directory mode 0700 and file mode 0600 enforced;<Electron userData>/runtime-host-client/credentials.json. Pre-existing Electron safeStorage credential/token files are not imported; affected users must re-authenticate;Read SECURITY.md for security reporting and policy, and docs/README.md for current privacy and sandbox contracts.
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.
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.
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.
Apache Maka, Maka, Apache, the Apache feather, and the Apache Maka project logo are either registered trademarks or trademarks of The Apache Software Foundation.