Security Considerations for Apache Maka: Load-Bearing Boundaries and Heuristic Controls

Apache Maka implements a defense-in-depth security architecture where OS-level user accounts, managed tool sandboxes, and strict IPC boundaries serve as load-bearing enforcement mechanisms, while permission prompts and secret masking provide non-enforced heuristic protections.

Apache Maka is a single-tenant personal desktop AI assistant designed to run within the user's own operating-system account. Its security model distinguishes strictly between enforced boundaries and heuristic safety nets, as defined in the project's SECURITY.md and ARCHITECTURE.md documentation.

Understanding the Trust Model

The architecture organizes components into distinct layers with varying trust guarantees. The agent process—comprising the Electron main process and packages such as @maka/core, @maka/runtime, @maka/storage, and @maka/ui—executes all user-visible logic but does not constitute a security boundary. Instead, enforcement relies on the outer OS user account, the Chromium renderer sandbox, and managed tool sandboxes for specific execution contexts.

According to the security policy, the renderer process operates within a sandboxed environment and communicates exclusively through the IPC bridge defined in apps/desktop/src/preload/preload.ts. This bridge represents a critical trust envelope that prevents the renderer from directly accessing the filesystem or network.

Load-Bearing Security Boundaries

These boundaries provide enforced protection and trigger fail-closed behaviors when violated.

OS User Account Isolation

All Maka processes inherit the privileges of the logged-in user account. The system expects users to run the application under a non-administrative account, making the OS account the outermost enforcement perimeter. All file and network operations respect the underlying operating system's permission model.

Managed Tool Sandboxes

For commands requiring isolation—such as non-PTY Bash sessions and filesystem workers—Maka invokes OS-level sandbox mechanisms. The platform-specific implementations include Seatbelt on macOS, bubblewrap on Linux, and AppContainer on Windows. These sandboxes are enforced only for the specific tool subset documented in section 2.2 of the security policy. If sandbox creation fails, the system exhibits fail-closed behavior, preventing the operation from executing on the host rather than falling back to an unprotected context.

Credential Store Protections

Sensitive authentication data resides in credentials.json, stored within the user's workspace directory with strict filesystem permissions: directory mode 0o700 and file mode 0o600. This configuration ensures that only the owner can access OAuth tokens for services like Claude, Codex, GitHub Copilot, and xAI. The credential store boundary is documented in SECURITY.md alongside the masking policies that prevent cleartext tokens from crossing the main-to-renderer IPC boundary.

Renderer Process Sandbox and IPC Bridge

The Chromium renderer process cannot directly access the filesystem, shell, or network infrastructure. All privileged actions must traverse the IPC bridge implemented in apps/desktop/src/main/main.ts. This architecture ensures that even if the renderer process is compromised, it remains constrained by the IPC handler validation logic.

Settings Masking

Sensitive configuration fields—including API keys and proxy passwords—undergo masking before transmission across the IPC boundary. The maskAppSettings function in apps/desktop/src/main/settings-ipc-helpers.ts intercepts settings objects and replaces credential values with masked sentinels (••••••), ensuring the renderer never receives cleartext secrets even during legitimate settings synchronization.

Heuristic Safety Nets and Limitations

Maka incorporates several UX-level mitigations that slow down potentially dangerous operations but do not provide security guarantees against adversarial manipulation.

Permission Engine

The @maka/core/permission module evaluates each tool request against the PERMISSION_POLICY configuration. By default, the system operates in PermissionMode.ask, prompting the user before executing destructive actions, file writes, or shell-unsafe operations. However, this engine represents a heuristic control; an adversarial LLM could potentially persuade the user to approve malicious requests.

Secret Redaction

The redactSecrets() function applies regex-based output sanitization before rendering text in the UI. This best-effort mechanism attempts to prevent accidental secret exposure but cannot guarantee detection of novel credential formats or encoding schemes.

URL Allowlisting

The normalizeSearchUrl() function filters non-HTTP(S) protocols from search results, blocking known malicious patterns. This filter operates as a heuristic check and does not enforce sandbox boundaries on network operations.

Privacy and Data Handling

Beyond security boundaries, Maka maintains strict privacy commitments regarding data residency and telemetry.

All session data, tool results, telemetry, and configuration settings reside exclusively within app.getPath('userData'); the architecture provides no cloud synchronization capabilities. When the incognitoActive flag is enabled, the WebSearch tool aborts before initiating any network request. Additionally, the system scrubs argsSummary fields from analytics hooks to prevent logging of sensitive tool query strings.

Configuring Security Features

Developers can inspect and configure security boundaries using the following patterns.

Enforcing Permission Prompts

To ensure user confirmation before risky operations, configure the permission mode explicitly:

import { setPermissionMode, PERMISSION_MODES } from '@maka/core/permission';

// Enforce the safest default: user is prompted before any risky tool.
setPermissionMode(PERMISSION_MODES.ask);

This configuration leverages the permission engine described in section 2.4 of the security policy.

Accessing Credentials Safely

When interacting with the credential store, read values without exposing them to logs or the renderer process:

import { readCredentials } from '@maka/storage';

// Returns the parsed JSON object; never logs contents.
const creds = readCredentials(); 
if (creds?.claude?.apiKey) {
  // Use the key internally; do NOT send it to renderer or logs.
  doSomethingWithClaudeKey(creds.claude.apiKey);
}

The credentials.json file maintains 0o600 permissions as enforced by the storage layer.

Verifying Sandbox Enforcement

For operations requiring isolation, explicitly invoke the sandboxed execution environment:

import { execInSandbox } from '@maka/runtime/sandbox';

// Run a non-PTY bash command within the OS-enforced sandbox.
execInSandbox('ls -la /tmp')
  .then(output => console.log(output))
  .catch(err => console.error('Sandbox enforcement failed:', err));

The sandbox implementation details are available in packages/runtime/src/sandbox/README.md.

Summary

  • OS user accounts provide the primary enforcement boundary; run Maka under non-admin accounts for maximum isolation.
  • Managed sandboxes (Seatbelt, bubblewrap, AppContainer) enforce isolation for specific tool executions with fail-closed semantics.
  • Credential storage uses strict filesystem permissions (0o600) and IPC masking to prevent token exposure.
  • Renderer isolation relies on Chromium sandboxing and the IPC bridge in apps/desktop/src/main/main.ts.
  • Heuristic controls including the permission engine and redactSecrets() offer UX-level safety but do not constitute security boundaries.

Frequently Asked Questions

Is Apache Maka safe for multi-tenant environments?

No. Apache Maka is explicitly designed as a single-tenant personal desktop AI assistant. All processes run within a single OS user account, and the security model assumes exclusive control of the runtime environment. Multi-tenant deployment would violate the fundamental trust assumptions of the load-bearing boundaries described in SECURITY.md.

How does Apache Maka protect API keys from exposure?

API keys stored in credentials.json are protected by filesystem permissions (0o700 for directories, 0o600 for files) and never transmitted to the renderer process. The maskAppSettings function in apps/desktop/src/main/settings-ipc-helpers.ts replaces sensitive values with masked sentinels before IPC transmission, and the web-search-boundary.test.ts test suite verifies that tokens cannot leak from main to renderer.

What happens if a managed tool sandbox fails to initialize?

Apache Maka implements fail-closed behavior for managed sandboxes. If the system cannot establish a Seatbelt, bubblewrap, or AppContainer sandbox for a tool that requires isolation, the operation aborts rather than executing unsandboxed. This prevents privilege escalation when OS-level sandboxing mechanisms are unavailable or misconfigured.

How should I report a security vulnerability in Apache Maka?

Submit vulnerability reports privately to security@maka.app or via a private GitHub Security Advisory. Reports must include the precise file location (e.g., apps/desktop/src/main/main.ts:120-145), operating system details, Node/Electron versions, and evidence that a load-bearing boundary from section 2.3 of the security policy was crossed.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →