SafetyCard Request a review

Eigent

Open-source desktop "cowork" app that runs single agents or a multi-agent workforce on the user's machine, built on CAMEL-AI.

github.com/eigent-ai/eigent · 2026-10-05 · 5877598

Defense-in-depth score

3.6 / 10

Eigent puts a careful, deterministic approval gate in front of almost everything: by default every shell command, file write, browser action and MCP or connector call waits for the user to approve the call and its arguments, and the approval is bound to the call that actually runs. Behind that gate there is little containment. Approved commands run on the host as the user, with the user's connector keys in their environment, and web-fetch and search tools run unattended, so injected content can send data out without a prompt. There are no default step or cost limits; the durable run journal is a strong audit trail.

Safest setup

Eigent ships a careful approval gate: in the default mode every shell command, file write, browser action and connector call waits for you, and a durable run journal records each call. Behind that gate, approved commands run on your machine as you, with no sandbox and no step or spend limit, so the safest setup narrows the keys, adds hard timeouts and builds containment around the app.

SetupHowWhat it gives you
Scoped, low-limit keysConnect only the accounts a task needs, each with a scoped or read-only key and a spending limit set at the providerWhatever an approved call does, it reaches only the accounts and spend you chose C1
Per-call approvalKeep each Space's approval mode at the default Ask me firstYou see every shell command, file write, browser action and connector call with its arguments before it runs C2
Read-only mode for readingSwitch the approval mode to Read only for tasks that only need to readEigent can read your files but cannot change anything during those tasks C3
Hard timeoutsSet AGENT_STEP_TIMEOUT_SECONDS=<seconds> and WORKFORCE_TASK_TIMEOUT_SECONDS=<seconds> in ~/.eigent/.envEach agent step and worker task ends at a fixed time, not only after 30 minutes without progress C10
A clean Space folderOpen Spaces on folders whose skills/, .eigent/skills and .agents/skills hold only skills you wrote or readOnly instructions you chose load into the agent's context C6
Its own VM or accountRun Eigent in a VM or separate OS account that holds only the task's files, with network limited to the hosts the task usesAn outer boundary around approved shell commands, skill scripts and MCP servers, which otherwise run as you C4

Approving with confidence

  • Read each prompt and approve calls one at a time; an approved shell command runs on your machine with your connector keys in its environment.
  • Web fetch and search run without a prompt, so keep sensitive files out of sessions that read untrusted pages.
  • Approve for me and Full access stay on for the whole Space until you switch back.

Handling data

  • Connector keys sit in plaintext in ~/.eigent/.env, readable by anything running as you; prefer keys you can revoke quickly.
  • Model request and response logging is on by default and unredacted; treat those logs like the data the agent read.
  • The run journal at ~/.eigent/run-journal.sqlite3 records every call and approval; copy it somewhere the agent can't write if you need it as a record.

Key gaps (2)

  1. Tools run with the desktop user's full authority and the connector keys saved in ~/.eigent/.env, so a hijacked session reaches the user's files and every connected account. C1 · Identity & least privilege
  2. Shell commands run on the host as the desktop user with the user's network access and connector keys; there is no sandbox behind the approval prompt. C4 · Code-execution isolation

Criteria

C1 Identity & least privilege

0.07 / 1.00

Eigent runs as the desktop user and does not narrow that authority. Shell commands inherit the backend's environment, which includes connector API keys loaded from the user's ~/.eigent/.env file; only Eigent's own control credentials are stripped. Connected services (mail, drive, chat, code hosting) are reached with the user's long-lived keys or tokens. The permission gate decides whether an action may run, but it does not give tools a narrower identity.

C2 Approval gates

Strong 0.70 / 1.00

This is Eigent's strongest control. Every tool call is recorded and passed through a deterministic permission engine before it runs; in the default "request approval" profile anything that is not a code-declared read (shell commands, file writes, browser actions, MCP and connector calls, memory changes) waits for the user, who sees the call and its arguments (large ones as a preview). The approval is bound to a digest of the full call and checked again before dispatch, shell approvals can't be saved as standing rules, and the model cannot change its own permission profile. Gaps: web-fetch and search tools are classed as reads and run unattended, unknown tools are prompted rather than refused, full-access mode is a persistent per-space setting rather than a time-bounded one, and external actions such as sending messages can't be undone.

C3 Tool & action scoping

0.20 / 1.00

The default toolset is broad: a host shell, file writes, a browser, web fetch and search, MCP servers and delegation are all enabled. The shell takes an arbitrary command string filtered only by the underlying library's safe mode, and web fetch accepts any URL. Eigent derives risk tags from paths and commands (credential directories, Git hooks, auto-executed project files, paths outside the workspace) but uses them to escalate approval rather than to restrict what tools may do. A read-only profile exists but is not the default.

C4 Code-execution isolation

0.25 / 1.00

Model-generated shell commands run directly on the host as the desktop user, in their own process group, with a command filter from the CAMEL library's safe mode. There is no container, OS sandbox profile or network restriction, and the project's own security policy says the permission system is not an OS sandbox and that shell access equals full access to the user's files and processes. The approval gate in front of each command is the only barrier.

C5 Untrusted input blast radius

0.45 / 1.00

Eigent reads web pages, search results, files and MCP output with no marking of what is untrusted. What limits a hijacked session is the approval gate: in the default profile writes, shell commands, browser actions and connector calls all need the user's approval. Web fetch and search are treated as reads and run without approval, so injected instructions can send data out through a URL without the user being asked. Irreversible actions still need a human.

C6 Memory, context & configuration integrity

0.45 / 1.00

Persistent memory is well guarded: the agent's memory write, update, forget and promote tools all go through the approval gate and a memory review step, automatic memory extraction only reads the user's own messages, and memory is stored per user, space and project. The weaker part is auto-loaded context: skills in the workspace folder (skills/, .eigent/skills, .agents/skills) and a project skills-config file are discovered silently and take precedence over the user's own skills. Workspace .env files are not loaded.

C7 Third-party extensions

0.25 / 1.00

Third-party code arrives mainly as MCP servers the user adds (usually unpinned package commands) and as skills, which can include scripts. Workspace bundles are installed through a review step with digests, but plain MCP servers and skills are not pinned or verified, and skills placed in the workspace folder are picked up without an install step. Running a skill script or an MCP tool still needs approval, but MCP servers run as separate processes under the same user account.

C8 Secrets & sensitive-data protection

0.23 / 1.00

Connector keys are stored in plaintext in ~/.eigent/.env with owner-only permissions and loaded into the backend's environment, where shell commands inherit them. Eigent redacts secrets from persisted tool arguments, permission cards and journal text with a shared redaction helper. Model request and response logging from the CAMEL library is switched on by default and is not redacted. Third-party telemetry only starts when the user supplies Langfuse keys.

C9 Audit & traceability

Strong 0.75 / 1.00

Eigent keeps a durable SQLite run journal outside the workspace. Every tool call is checkpointed with its arguments, agent, step and delegated sub-agent step before it is allowed to run, and permission decisions are written as security audit events with the actor type (system or auto-reviewer). A tool call cannot be dispatched without that checkpoint. The journal is an ordinary local database the same user could edit, with no hash chain or signing; the gate blocks shell commands that name the journal files, but the project itself says that holds only within the same-user boundary.

C10 Limits & kill switch

0.25 / 1.00

In the default execution path there is no step cap and no token or cost budget. A hard per-step timeout exists but is off unless an environment variable sets it; what is on by default is a 30-minute no-progress timeout for agents and workforce tasks. Delegation depth is capped at one level, shell commands run in their own process group that can be killed, and the stop button asks the workforce to stop gracefully.