ApexCorp
Talk to usTry the demo
Security

What is enforced, and what is not yet true

Autonomous agents with tool access are a security question before they are a product question. Everything in the first section corresponds to code with a test on it. The last section is the part most security pages leave out.

Enforced in code

Agents cannot leave the project root
Every agent-supplied path is resolved and checked twice — lexically, then again after resolving symlinks, because a plain prefix test accepts /app-evil next to /app. Percent-encoded separators and null bytes are refused rather than decoded. Tested against hostile input.
Commands run against an allowlist, never a blocklist
npm test/run/ls/why, git status/diff/log/show/blame/ls-files, node --version. Shell operators are refused, and commands execute without a shell so the allowlist cannot be re-parsed around.
No agent can send anything outward
Outward-facing roles receive a draft capability and no send capability. No role in the system holds one — a test asserts that no role anywhere in the catalogue can send. Commits, pushes, PRs and messages become approval-queue items.
Nobody approves their own work
The function that approves a company structure takes a person’s name, not an agent id, so the Manager cannot sign off on the org it proposed. Memory approval checks that approver and proposer differ before it checks anything else.
Spend is metered and capped
Per run and per day, against real token pricing. Crossing a ceiling halts every agent and files a note rather than continuing quietly.
Runs are bounded
A hard iteration cap per run, and a concurrency ceiling so only a fixed number of agents run at once. The kill switch is checked between steps and halts everything immediately.

Your model keys

Where keys live
In the orchestrator process’s environment, loaded from a .env file on the machine you run it on. They are never sent to the browser.
What the control panel can see
Whether each provider is configured — a boolean. The endpoint that reports this has no field capable of carrying a key value, and a test asserts on the raw response body that no secret appears in it.
What the panel cannot do
Submit a key. There is deliberately no write path: an unauthenticated localhost endpoint that persisted secrets to disk would be a worse hole than editing a file is an inconvenience.
Who your prompts reach
Your chosen model provider, under your own account and their terms. We add no intermediary of our own and do not retain prompt content beyond what the activity log needs.

Not yet true

Stated plainly, because these are the claims a reader cannot check from outside and the ones a vendor is most tempted to fudge.

Reporting a vulnerability

If you find something, please report it privately before disclosing it publicly, using the address on the contact page. Include what you did, what happened, and what you expected — a reproduction is worth more than a description. We will acknowledge within two working days.

There is no bug bounty yet, and we would rather say so than advertise one we cannot fund. Report anything real and we will credit you publicly if you want that.