Cynative Security Research Agent - Ask your cloud anything without breaking prod. Read-only.
by•
Open-source AI CLI that answers security questions across cloud, code and runtime - GitHub, GitLab, AWS, GCP, Azure, K8s. Ask in plain language: "what's publicly exposed that shouldn't be?" or "can my CI escalate to cloud admin?".
Read-only by construction: every call is resolved to its IAM actions and authorized against a read-only policy before credentials attach. It can't modify your infra even if asked.
Unlike MCP tools, it writes JS in a sandboxed runtime - a script per turn, not one call.


Replies
Cynative Security Research Agent
A debate we had: do we just document how to scope credentials right and leave it to you - or enforce read-only even if you run it with admin creds? We went with enforcing it, despite the tradeoff of keeping up as providers ship new APIs. Pulling permission definitions from each provider (a few MB, daily by default) instead of a static map keeps coverage current automatically. Every API call is resolved to the IAM actions it needs and authorized against the provider's own policy definitions before a credential is attached, failing closed on anything it can't classify. The allowed sets come from the providers themselves (AWS IAM action simulation, GCP role permission eval, Azure RBAC role definitions, the K8s cluster own live view RBAC role) so coverage tracks the APIs as they grow. On AWS, assumed-role credentials are additionally re-vended through STS AssumeRole scoped to SecurityAudit. Every request host is pinned to its mapped service and region and the resolved IP is verified before connecting, so the agent can only reach your own infra. The code execution has no host access and every call is enforced to go through the read-only action gate or it fails.
Cynative Security Research Agent
I'll be around, happy to answer any question.
Pythagora
@szin Looks super exciting and thoughtfully made. Congrats on getting it out into the world! 🚀
Cynative Security Research Agent
@etiennegarcia Thanks!
Hi Shaked, the reassurance that it only ever reads and never touches my systems is exactly what would make me brave enough to really poke around a live setup. That peace of mind matters more than people tend to admit.
Cynative Security Research Agent
@robin_de_lacroix Thank you Robin, I'm glad you like our approach!
Shaked — the "script per turn, not one call" design is neat. Curious what happens when one call inside that script hits something outside the read-only gate — full abort, or does it just fail that line and move on? My own agent chains multi-step calls, and one blocked step derailing the whole run is a real pain.
Cynative Security Research Agent
@medal411 Thanks! Keeps running. Inner tool calls are async inside the sandbox - if the script catches it, it carries on with whatever else succeeded. If it doesn't catch, that one script ends, but the error comes back to the model and it writes a new script for just the missing data, same session. So a blocked step costs an llm turn, not the run. The hard stop is repeated no-progress calls tripping a consecutive-failure ceiling, default 5, instead of letting it spin.
Dial
fail-closed-by-default on the classification is the right call, but it raises a timing question - you pull permission definitions daily, so what happens on the day a provider ships a brand new API action that isn't in that day's pull yet. does it just refuse to classify it and block the call until the next sync picks it up, or is there some other fallback for that gap window
Cynative Security Research Agent
@galdayan Thanks Gal! Two cases. New action on a service we already model: no gap - the resolver derives namespace:op off the classified operation, and the decision is a live iam:SimulateCustomPolicy against your policy. A brand new service that isn't in the cached catalog: hard deny until refresh, we won't guess. TTL is 24h and configurable.
Dial
@szin 24h fixed with no override is the right default honestly - anything shorter and you'd probably get flaky false-denies during normal AWS rollout jitter. good that it's configurable for teams who ship on faster cycles though.
The promise of investigating cloud infrastructure without risking production is compelling. How do you enforce read-only boundaries, and does every finding include the evidence and cloud resources used to reach it?
Cynative Security Research Agent
@russlan_ramdowar Thanks! Every request is host-pinned, then resolved to its required IAM actions and checked against your read-only policy before a credential is attached - SecurityAudit, roles/viewer, Reader, the cluster's live view role. Unresolved means denied. AWS assumed roles also get STS-scoped so AWS enforces it server-side too. Code runs sandboxed with no filesystem, network or host APIs.
Findings carry their raw evidence and a verifier cross-checks each against live evidence before it's reported. Every tool call hits a fail-closed audit log, so the calls behind a finding are replayable.
Honestly love that the IAM-bound read-only layer is the default, not a setting you have to remember to flip on. Most security tools treat least-privilege as homework, you basically baked it into the call path. That kind of restraint takes real thought.
Cynative Security Research Agent
@quincy_rice Thanks!
ran a couple of checks against our AWS setup and the read-only guard is genuinely enforced, not just a claim. the per-turn sandboxed scripts feel like the right way to do this instead of hoping an MCP tool behaves.
Cynative Security Research Agent
@solomon_barnard Thanks! Pretty neat you verified and came back to report.
Dial
the read-only enforcement design is genuinely more thorough than most tools that just document best practice and hope you follow it. one thing I'd want answered before pointing this at a real environment though - the answers this thing produces are basically a complete map of what's exposed and how to get to it. where does that output live once it's generated, and is there any access control on the audit history itself, since that history becomes a pretty valuable target on its own
Cynative Security Research Agent
@omri_ben_shoham1 thanks! The report isn't stored - it goes to your terminal and that's it. The audit log retains (configurable), it's a local file on your machine: tool calls plus the findings sent to verification, secrets redacted.
Dial
@szin makes sense, and redacting secrets before it hits disk is the right default. the part that still nags at me - a local file is exactly the kind of thing that ends up in a laptop backup or synced to some cloud drive without anyone deciding that on purpose. is there a documented way to pipe that audit log somewhere with actual access control, like a SIEM or a locked-down bucket, or is "local file on your machine" the intended end state for now?
Cynative Security Research Agent
@omri_ben_shoham1 Yes, absolutely. Audit log can be disabled / path changed and you can pipe the report: cynative -p "your task" > ./report.md