Every AI agent in your organisation, under one policy.
DarkControl works alongside the tools your engineers already use and judges what they attempt before it happens. This tour follows the console: what you can decide, what you can see, how the platform responds, and what you can prove afterwards.
Rules that follow your organisation chart.
A policy gathers command, file and package rules under one name. Command rules allow, deny or ask; file rules distinguish reading from writing; package rules cover npm, yarn, pnpm, pip, apt and brew with a single rule per manager.
Balanced engineering baseline
Priority 20 · Assigned to Engineering (department) · Enabled| Kind | Rule | Services | Action |
|---|---|---|---|
| Command | *rm -rf* | All services | Deny |
| Command | *curl*|*sh* | All services | Deny |
| Command | git push --force* | All services | Ask |
| File | **/.env* · Read & write | Claude Code, OpenCode, Codex | Deny |
| File | **/.ssh/** · Read | Claude Code, OpenCode, Codex | Deny |
| Package | npm · Every package from manager | All services | Ask |
| Command | git * | All services | Allow |
Precedence you can explain
Policies are assigned to the organisation, a department, an endpoint group or a single endpoint. The console resolves them from the endpoint outwards and hands each device one ruleset. Resolve effective policy shows the outcome before it reaches anyone.
Twelve starting templates
Destructive commands, secret and credential reads, git history rewrites, pipe-to-shell installers, infrastructure destruction, production change control and a balanced engineering baseline, among others.
Conflicts in the open
The console compares policies, flags rules that contradict each other and refuses a catch-all rule that would allow everything. Policies export and import as JSON for review elsewhere.
Test the rule against your own history.
Before a rule goes live, a dry run matches it against the commands your agents have actually run over the last 7, 30 or 90 days. You see how that pattern resolves today, and real examples of what the rule would have caught.
A new deny rule therefore does not interrupt anyone’s work by surprise.
Test a rule
Window 30 days| Sample matches | Hostname | Service |
|---|---|---|
| terraform destroy -target=module.staging_db | eng-mbp-022 | Cursor |
| cd infra && terraform destroy -auto-approve | eng-lnx-007 | Claude Code |
| terraform destroy -var-file=dev.tfvars | eng-mbp-014 | Codex |
Beyond the command: tools, models and destinations.
Not every decision is about a command. Some are about which tool may be used at all, with which model, and where it may connect. These controls are assigned through the same precedence engine as policies.
Tool and model restrictions
Deny an AI tool to a whole department, or limit it to the models you have approved: an identifier, a prefix, a family or a pattern, with a final rule for “all other models”.
The page explains how each restriction is decided and how it is enforced in each tool.
Available for Claude Code, Codex, OpenCode 2.x, Google Antigravity and Grok Build.
Effective restrictions
Finance (department)| AI tool | Tool usage | Model rules | Status |
|---|---|---|---|
| Claude Code | Allow | opus · Allow All other models · Deny | Only listed models |
| Codex | Allow | gpt-6* · Deny | Some models denied |
| Grok Build | Deny | n/a | Tool denied |
| OpenCode | Allow | No model rules | Allowed |
Network and egress
Allow and deny rules by domain, URL or regular expression, with CSV import and export. The most specific rule wins and a deny wins a tie. A built-in tester evaluates a URL, a host or a command against the rules in force.
These rules inspect what an agent tries to reach from its commands and tools. They are not a replacement for a network firewall.
| Type | Destination | Action | Note |
|---|---|---|---|
| domain | *.pastebin.com | Deny | Paste sites |
| domain | registry.npmjs.org | Allow | Public registry |
| url | https://api.internal.example/v2/export | Deny | Bulk export endpoint |
| regex | ^https?://\d+\.\d+\.\d+\.\d+ | Deny | Raw IP destinations |
Just-in-time exceptions
An administrator lifts one or more deny or ask rules on a single endpoint for a limited time: from fifteen minutes to three days, extendable to seven. The grant can start from a recent denial, and a reason is mandatory.
When the window closes the rule applies again without anyone having to remember. Each grant, extension and revocation is written to the audit trail.
An exception takes effect at the agent’s next check-in, within about five minutes.
| Rules lifted | Reason | Granted by | Window | Status |
|---|---|---|---|---|
| *terraform destroy*eng-mbp-022 | Tear down staging stack · CHG-4127 | a.serrano | 2 h | Active |
| npm · Every packagedata-ws-031 | Dependency upgrade sprint | a.serrano | 8 h | Pending check-in |
| git push --force*eng-lnx-007 | History rewrite after secret removal | l.mena | 30 min | Expired |
What extends an agent’s reach, inventoried.
MCP servers give an agent new tools. Approval-free modes remove its brakes. Plaintext credentials hand it keys. DarkControl finds all three on every machine and lets you decide what to do about them.
| Server | Risk | Tools | Found on | Status |
|---|---|---|---|---|
| shell-runnernpx -y shell-runner-mcp | 85 | 7 | 3 endpoints | Held for review |
| postgres-adminnpx @acme/postgres-mcp@latest | 64 | 12 | 5 endpoints | Needs review |
| docs-searchhttps://mcp.docs.example/sse | 31 | 3 | 14 endpoints | Needs review |
| githubgithub-mcp-server 0.9.2 | 12 | 26 | 41 endpoints | Approved |
| scratch-fsnode ./tools/fs-server.js | 58 | 5 | 1 endpoint | Denied |
shell-runner · risk 85 · critical
Claude Code · Cursor3 users
Inventory by tool and user
The agent finds the MCP servers configured in each AI tool, for each user of the machine, and the console brings them into one list with the number of tools each server exposes.
Risk from 0 to 100, with reasons
An unpinned npx package, embedded credentials, the ability to execute commands or text that tries to steer the model all add to the score. Each finding is listed beside it.
Approve, deny, hold
Rules match a server by name, command, URL or fingerprint, and can be limited to one tool. If you switch it on, high-risk servers are held until they have been reviewed.
Permission modes
Almost every coding tool offers a mode that skips approvals. The console shows where one is configured, which sessions actually ran in bypass or auto-approve, and through which signal each was seen.
A Deny Bypass or Deny Auto-approve rule stops that mode in the tool you choose. The user is told why: their organisation does not allow it.
The console states, tool by tool, whether a mode is locked natively, blocked by a hook or only reported. See the coverage table.
Configured mode by endpoint and tool
| Endpoint | Claude Code | Codex | Grok Build | OpenCode |
|---|---|---|---|---|
| eng-mbp-014 | Default | Auto-approve | Default | Default |
| eng-lnx-007 | Bypass | Default | Bypass | Default |
| ci-runner-03 | Plan | Bypass | Default | Auto-approve |
| data-ws-031 | Auto-approve | Default | Default | Default |
| Last active | Mode | Endpoint and user | Seen through | Outcome |
|---|---|---|---|---|
| 14:28 | Bypass | eng-lnx-007 · r.vidal | Tool hook | Blocked |
| 13:51 | Auto-approve | data-ws-031 · m.ortega | Session file | Not blocked |
Secrets exposure
AWS keys, GitHub and Slack tokens, database passwords: they often end up in plain text inside agent configuration files. DarkControl finds them and reports the file, the exact setting, the kind of credential and its length.
The value never leaves the machine. The console can still tell when the same credential is reused across endpoints, and each finding can be acknowledged, accepted or resolved.
This is a report: it surfaces the exposure and does not block or fix it.
| Severity | Credential | Found on | File and setting | Exposure | Status |
|---|---|---|---|---|---|
| Critical | AWS secret key••••(40) | ci-runner-03 | ~/.codex/config.tomlmcp_servers.aws.env.AWS_SECRET_ACCESS_KEY | 1 endpoint | Open |
| High | GitHub tokenghp_…(40) | eng-mbp-014 | ~/.claude.jsonmcpServers.github.env.GITHUB_TOKEN | Reused on 3 endpoints | Open |
| High | Database password••••(18) | data-ws-031 | ~/.cursor/mcp.jsonmcpServers.postgres.args[2] | Reused on 2 endpoints | Acknowledged |
| Medium | Slack tokenxoxb-…(56) | eng-lnx-007 | ~/.config/opencode/opencode.jsonmcp.slack.environment.SLACK_TOKEN | 1 endpoint | Resolved |
Tamper detection
The agent fingerprints the policy files it manages and checks them every few seconds. If one is modified, replaced, deleted or has its permissions changed, the change is reported with a severity and the policy is restored.
Changes to the agent itself, its configuration or its service are reported too, so a stopped agent does not go unnoticed.
| When | Endpoint | What changed | Severity | Restored | Status |
|---|---|---|---|---|---|
| 14:12:44 | eng-lnx-007 | Modifiedmanaged-settings.json (Claude Code) | High | restored | Open |
| 11:03:09 | data-ws-031 | Deletedhooks.json (Cursor) | High | restored | Acknowledged |
| 09:47:30 | ci-runner-03 | Agent stoppeddarkcontrol-agent.service | Critical | reported | Resolved |
What the agents did, on which machine, with what result.
The event log holds each attempt with its verdict. Sessions arrange it into a narrative. The dashboard summarises the fleet over 24 hours, 7 days or 30 days, with the most denied commands and the most active machines.
| Timestamp | Hostname | Service | Command | Action |
|---|---|---|---|---|
| 14:32:07 | eng-mbp-014 | Claude Code | git push origin feature/auth-refresh | Allowed |
| 14:32:05 | eng-mbp-014 | Claude Code | npm test -- --coverage | Allowed |
| 14:31:58 | data-ws-031 | Codex | pip install pandas-profiling | Asked: Allowed |
| 14:31:44 | ci-runner-03 | OpenCode | curl -fsSL https://get.example.sh | sh | Denied |
| 14:31:40 | eng-mbp-022 | Cursor | terraform plan -out=tfplan | Allowed |
| 14:31:19 | fin-ws-221 | Claude Code | cat ~/.aws/credentials | Denied |
| 14:31:02 | eng-lnx-007 | Grok Build | rm -rf ./build ../shared/releases | Denied |
| 14:30:51 | data-ws-031 | Codex | sudo apt install postgresql-client | Asked: Denied |
| 14:30:37 | eng-mbp-009 | Antigravity | git status | Allowed |
Agent sessions
Each session gathers its turns, tool calls, file operations and decisions, with subagents separated from the main agent and every event classified. A timeline, a relationship graph and the process hierarchy let you reconstruct what happened.
You choose how much content is captured per organisation: metadata only, prompt hashes or prompt content.
Claude Code · eng-mbp-014
Started 14:02 · Duration 31 min · Correlation Native · Metadata onlyChronological timeline
- Session started · main agent
- git checkout -b fix/token-refreshAllowed
- Subagent started · test runner
- npm test -- auth/Allowed
- cat .env.productionDenied
- npm install jsonwebtoken@9Asked: Allowed
- Session ended
Token usage
Input and output tokens per session, per tool and per endpoint, over 7, 30 or 90 days. The figures come from each tool’s own usage records; where a tool does not provide them, the console says “not reported” instead of inventing a number.
| Service | Sessions | Input tokens | Output tokens | Total | |
|---|---|---|---|---|---|
| Claude Code | 412 | 38.2M | 6.1M | 44.3M | |
| Codex | 207 | 17.9M | 3.4M | 21.3M | |
| OpenCode | 96 | 6.8M | 1.2M | 8.0M | |
| Grok Build | 41 | 2.9M | 0.5M | 3.4M | |
| Cursor | 133 | not reported | not reported | not reported |
From signal to action, without waiting for someone to look.
Workflows are drawn as a graph: one trigger, as many conditions as you need, and a chain of actions. Each workflow keeps its versions, supports a dry run and shows the history of its recent runs.
| Run history | Matched | Outcome |
|---|---|---|
| Today 14:31 | eng-lnx-007 · 12 denials | Quarantined · notified |
| Today 09:05 | No endpoint over threshold | No action |
Triggers
Spikes in denied commands or approval prompts, a command that matches a pattern, a tamper event, a high-risk session, credentials seen in a session, a token usage spike, an endpoint that stops checking in, or an agent that is out of date.
Actions
Quarantine an endpoint, post to Microsoft Teams, send an HTTPS webhook or a syslog message, notify administrators, and add the endpoint to a group or remove it from one.
Quarantine
Quarantine suspends the use of AI tools on that machine for a set time. A per-run limit keeps a badly tuned workflow from touching too many endpoints at once.
Alerts and destinations
Alert rules watch thresholds over events: a burst of denials, any denial at all, a spike in approval prompts. Each alert is delivered to a saved, encrypted destination: syslog over UDP or TCP, an HTTPS webhook or a Microsoft Teams channel.
Destinations are tested from the console, and the history shows which alerts were delivered and which failed.
| Name | Type | Target | Used by | Last test |
|---|---|---|---|---|
| SIEM collector | Syslog · TCP | siem.corp.example:6514 | 4 alert rules · 2 workflows | Passed |
| SOAR intake | HTTPS webhook | https://soar.corp.example/hooks/darkcontrol | 1 alert rule | Passed |
| Security operations | Microsoft Teams | SecOps / AI agents channel | 3 workflows | Passed |
What you can prove when you are asked.
Security needs to know the control is working. Compliance needs to show it. The console turns each day’s activity into a scored posture, an obligations register and an executive report.
Posture and the EU AI Act
The posture score combines four pillars: licence health, rule coverage, agent liveness and governance. The checklist is mapped to SOC 2, CIS and ISO 27001, and the checklist, controls and evidence all export.
The EU AI Act module sets out sixteen deployer obligations: nine are observed by DarkControl and seven are recorded by an administrator, each with an evidence reference and a review date.
The module supports your compliance assessment. It does not certify conformity with the Act.
Security posture
EU AI Act · obligations register
Readiness12 of 16 Next review date12 Jan
| EU AI Act obligation | Source |
|---|---|
| Human-in-the-loop controls in force | Observed by DarkControl |
| Automatic event logging is operating | Observed by DarkControl |
| Every observed AI agent is under policy | Observed by DarkControl |
| Named person assigned to human oversight | Recorded by an administrator |
| AI literacy programme covers staff using AI agents | Recorded by an administrator |
Audit trail
Every creation, edit and deletion of a rule, an exception, a destination or an MCP decision is recorded with its author, its time and a field-by-field comparison of before and after. It exports to CSV and JSON.
| Timestamp | Actor | Kind | Rule | Change |
|---|---|---|---|---|
| 14:20:03 | a.serrano | exception | *terraform destroy* · eng-mbp-022 | Create |
| 13:02:47 | l.mena | mcp | shell-runner · Server name | Edit |
| 11:15:20 | l.mena | command | git push --force* · Allow → Ask | Edit |
| 09:41:12 | a.serrano | network | *.pastebin.com | Create |
Executive report and risk
A security posture report for the last 7 or 30 days, ready to print or save as PDF, and a risk view that ranks endpoints by score, denial rate and the reason behind it.
AI analysis
An on-demand review of your telemetry: anomalies, rule recommendations backtested against your own history, rule hygiene and agent health. It runs on DarkControl’s own GPU infrastructure; your telemetry is not sent to a third-party AI provider.
What is enforced, tool by tool.
Each AI tool offers a different control surface. DarkControl uses the tool’s native policy where one exists and its own hook where it does not.
| Tool | Commands and packages | Files | Tools and models | Network and egress | MCP servers | Permission modes |
|---|---|---|---|---|---|---|
| Claude Code | Enforced | Enforced | Enforced | Enforced | Enforced | Enforced |
| Codex | Enforced | Enforced | Enforced | Enforced | Enforced | Enforced |
| OpenCode | Enforced | Enforced | Enforced | Enforced | Enforced | Reported |
| Grok Build | Enforced | Not covered | Enforced | Enforced | Enforced | Enforced |
| Google Antigravity | Enforced | Not covered | Enforced | Enforced | Enforced | Enforced bypass |
| Cursor | Enforced | Not covered | Not covered | Enforced commands | Not covered | Not covered |
| OpenClaw | Enforced | Not covered | Not covered | Enforced commands | Enforced | Reported |
In Cursor, Antigravity, Grok Build and OpenClaw, file access is governed through command rules. In OpenCode, restrictions, network and MCP require version 2.x. In Antigravity, mode denial covers bypass.
Rule matching is textual. DarkControl is a guardrail for AI agents and complements, not replaces, your operating system and network controls.
One platform, four seats at the table.
- CISO and security
- A provable control over AI agents, with the record regulators and boards expect.
- CTO and engineering
- Teams keep the tools they prefer, inside limits that do not slow delivery.
- DevOps and platform
- One policy across every machine, without configuration that drifts tool by tool.
- Founders and owners
- AI productivity grows while the risk you ultimately answer for stays bounded.
The console views on this page are illustrative and show sample data.
See it working against your own environment.
Thirty minutes with the team that builds the product: your agents, your policies and your risk questions.