72.2% issue resolution on SWE-bench Verified — #1 among GPT-5–based systems.

Read the post →

Built for what the model shouldn't be trusted with.

Run Claude Code, Codex, or any agent on your own Kubernetes — with credential isolation, zero-trust networking, and per-MCP-server containerization on by default. Configure in Terraform. Swap vendors in one Terraform block.

Open-source · AGPL-3.0Kubernetes-nativeClaude · Codex · BYOPer-MCP isolation
synth token
real key
Provider keys and tool tokens never enter the agent. They're injected at the network edge.
The threat model

Prompt injection can turn any AI agent into an exploit.

The model reads attacker-controlled data — a web page, a file, a tool's output — and treats it as instructions. If the resulting tool calls reach a process that holds secrets, the agent has become the exploit. Every feature below is what Agyn does so these patterns stop working. Architecture deep-dive ↗

Credential exfilCVE-2026-21516

GitHub Copilot Codespaces

Prompt injection in a repo made Copilot read GITHUB_TOKEN from its own environment and emit it through the model output. The token was in env vars because that is where Codespaces puts it.

Cross-domain readCVE-2025-32711

EchoLeak — Microsoft 365 Copilot

A single crafted email caused Copilot to read across OneDrive, SharePoint, and Teams during routine summarisation and exfiltrate the contents. Zero clicks. Broad filesystem reach made cross-source exfil possible.

Egress exfilIDEsaster

30+ CVEs across AI IDEs

Agents wrote JSON files referencing attacker-hosted schema URLs. The editor's schema validator fetched the URL — leaking the file's contents in the request. The agent never explicitly sent the data; the validator did.

The trend, by the numbers
1 in 3
public AI agent tools can be tricked into leaking data
BlueRock — survey of 7,000 servers, 2026
+32%
rise in attacks aimed at AI agentslate 2025 → early 2026
Google
40+
new security flaws found in AI agent toolsin just 4 months
OX Security, Jan–Apr 2026
Credential isolation

The agent never holds your secrets.

A credential the agent can read is a credential the agent can leak. Two proxies sit outside every sandbox: the LLM Proxy carries provider keys, the Egress Gateway carries tool tokens. The agent calls upstream with synthetic placeholders; the real key is attached at the network edge.

Agent container
no provider keys
no tool tokens
no env secrets
LLM call
POST llm.agyn.dev/v1/messages
platform model id, no key
x-api-key: sk-ant-real…
LLM Proxy injects provider key
Tool call
POST api.github.com/repos/…
synthetic placeholder token
Authorization: Bearer ghs_real…
Egress Gateway injects from Secrets
LLM Proxy
Holds provider keys. Speaks OpenAI Responses and Anthropic Messages on one endpoint. Agent identity via OpenZiti mTLS — not an API token.
Egress Gateway
TLS-terminating proxy outside the sandbox. Resolves the real token from Secrets at request time and attaches it at the network edge.

A credential the agent can read is a credential the agent can leak. Brokering moves the question from “can the agent exfil the credential?” to “what is the credential allowed to do?”

Zero-trust networking

Every agent gets its own cryptographic identity.

Identity lives in an x509 certificate the platform mints with OpenZiti — not in an API token the model could read or leak. Dial policies are bound to that identity. A compromised agent stays inside its own allow list.

Your Kubernetes cluster
Agents — each with its own identity
finance-reports
role: finance
x509
Can dial:finance-dbpublic internet
ops-runbook
role: ops
x509
Can dial:ops-apipublic internet
market-research
role: research
x509
Can dial:public internet
Services — reachable only per dial policy
finance-db
reachable from: finance-reports
ops-api
reachable from: ops-runbook
other-team-db
no agent has a dial policy
cluster-pod-CIDR / svc-CIDR
blocked by NetworkPolicy
public internet
reachable from: all agents

Every agent gets its own x509 identity from OpenZiti. Dial policies are bound to identity — not to IP allowlists. A compromised agent stays inside its own list; neighbouring agents and other tenants' services stay unreachable.

Sandboxed execution

One Pod per agent. One sidecar per MCP. No shared kernel.

Every workload runs in a Kata Containers + Firecracker microVM — a hardware-enforced kernel boundary per Pod. The agent and its MCPs share the Pod, but each MCP is its own container with its own secrets. A compromised tool cannot reach another tool's filesystem, credentials, or network.

Kata Containers + Firecracker microVM
Pod
agent-initdrops agynd + agent CLI, then exits
Agent container
Claude Code · Codex · agyn-agent — runs the loop
  • Dedicated workspace volume — not shared with other agents
  • Restricted profile: no root, no caps, read-only root FS, no privilege escalation
  • No provider keys, no tool tokens, no env secrets
tool calls over localhost
github MCP
secret: github-token
isolated from db-password
database MCP
secret: db-password
isolated from github-token
Per-pod kernel
Firecracker microVM per Pod — separate guest kernel. A sandbox escape stays inside the VM.
Drop-in via RuntimeClass
Kubernetes drives Kata like any other runtime. Existing manifests run unchanged.
MCP supply-chain blast radius
A compromised MCP server cannot read another MCP's credentials or filesystem.
Vendor-agnostic runtime

Ship Claude Code today. Switch to Codex by changing two lines.

Claude Code, Codex, and Agyn's own agent ship as ready-to-deploy containers. The Agent resource has an init_image field that selects the agent CLI; the LLM Proxy handles both Anthropic Messages and OpenAI Responses on the same endpoint. MCPs, skills, hooks, egress rules, identity — all unchanged across vendors.

agents.tf
ClaudeCodex
# Swap vendor: two lines change. Everything else stays.
resource "agyn_agent" "support" {
  organization_id = agyn_organization.acme.id
  name            = "Support"
  - model           = agyn_llm_model.claude_opus.name
  - init_image      = "ghcr.io/agynio/agent-init-claude:v1"  + model           = agyn_llm_model.gpt5.name
  + init_image      = "ghcr.io/agynio/agent-init-codex:v1"  idle_timeout    = "5m"
  availability    = "internal"

  # everything below is unchanged across vendors
  mcps            = [agyn_mcp_server.github.id, agyn_mcp_server.linear.id]
  skills          = [agyn_skill.code_review.id]
  egress_rules    = [agyn_egress_rule.github.id]
  group           = agyn_group.support_engineers.id
}
Agents as company property

Reviewed, versioned, owned by the team.

Agents, MCPs, skills, egress rules — declared as Terraform resources. Reviewed before merge, versioned in git, owned by the team that operates them. Agents become infrastructure that survives employee turnover — audited, rolled back, handed off. Per-agent RBAC via OpenFGA lets you share without granting platform-wide access.

$ terraform apply
Terraform will perform the following actions:

  + agyn_secret.github_token
  + agyn_secret.openai_key
  + agyn_llm_model.claude_opus
  + agyn_llm_model.gpt5
  + agyn_egress_rule.github
  + agyn_mcp_server.github
  + agyn_mcp_server.linear
  + agyn_skill.code_review
  + agyn_agent.support
  + agyn_group.support_engineers

Plan: 10 to add, 0 to change, 0 to destroy.

Apply complete. Resources: 10 added.
Per-agent access (OpenFGA / ReBAC)
Roles scoped to one agent. No platform-wide admin required.
Capabilityownermaintainerparticipant
Chat with the agent
Read agent configread
Edit prompts, skills, MCPs
Attach EgressRules & Secrets
Share with another team
Delete the agent
Share an agent with a team without granting platform-wide access. Tracked per agent, audited, version-controlled.
For regulated industries

Built for regulated and sovereign deployments.

When regulation or sovereignty requires it, Agyn runs on your Kubernetes — on-prem, in your VPC, or air-gapped. EKS, GKE, AKS, OpenShift, bare-metal. The control plane runs where you run it. Internal services behind VPNs and firewalls are reachable through per-identity OpenZiti dial policies, not by flattening your network.

Your VPC · EKS · GKE · AKS · OpenShift · air-gapped
Your Kubernetes cluster
agent-pod
OpenZiti identity, mTLS only
Internal resources (private)
postgres.internal
behind VPN, no public route
payments.api.internal
behind firewall, IP-locked
legacy-mainframe
reachable only from on-prem subnet

Agyn runs on any conformant Kubernetes — EKS, GKE, AKS, OpenShift, on-prem, air-gapped, even kind. The loop runs where you run it. Your data, your audit logs, your incident response.

See it on your own cluster.

30 minutes. We'll deploy Claude Code on your Kubernetes, wire it to your secrets through the Egress Gateway, and show you what credential isolation looks like end-to-end.