BLA
BLA (Blind LLM Agents) is the open-source Blue Defense MCP and CLI built to protect software artifacts against automated AI reverse-engineering workflows.
Governed AI agents as a Kubernetes sidecar. Policy-as-code charters, mTLS and SPIFFE identity, budgets, guardrails and JSONL audit for LLM agents, in any language with no SDK.
SecurityRust · PythonGitHub @f8fvwgzcOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Governed AI agents as a Kubernetes sidecar: policy-as-code charters, mTLS/SPIFFE identity, budgets, guardrails and JSONL audit for LLM agents. Any language, no SDK.
Taken from the repository README
Loading the full README.
Read the full README ↗Governed AI agents that run as a sidecar next to your service. The agent is a sidecar of the service, not a service of its own.
agent-sidecar brings AgentSecOps to LLM agents: identity, policy, budgets, guardrails and audit, owned by the platform instead of by each app. Agents run on Claude, or on a built-in mock model for offline tests.
Naming. agentsc is the short name of agent-sidecar, used in all code: the sidecar is agentscd, the CLI is agentsc, the CA is embassy, the runtime is agentsc-runtime, charters use apiVersion: agentsc.io/v1alpha1, and identities look like spiffe://agentsc/ns/<ns>/svc/<svc>.
127.0.0.1:3500 or gRPC on 127.0.0.1:50001.spiffe://agentsc/ns/<ns>/svc/<svc>. The called sidecar decides which peers and which of their agents may call.audit.sink: file). Read them with kubectl logs or agentsc logs.flowchart LR
subgraph podA["pod: orders"]
A["app (any language)"] -->|"HTTP or gRPC on localhost"| S["sidecar (agentscd)"]
S ---|"gRPC and the model gateway, on unix sockets"| R["runtime (agentsc-runtime)"]
end
S -->|"model API (the sidecar holds the key)"| C["Claude"]
subgraph podB["pod: inventory"]
P["peer sidecar"] --> B["peer app"]
end
S -->|"mTLS, port 50002"| P
You need Rust (cargo), protoc, uv, Go, python3 and curl. No Kubernetes and no API key.
git clone https://github.com/f8fvwgzc/agent-sidecar.git && cd agent-sidecar
make local-demo
The script starts two example apps (Go orders, FastAPI inventory), each with its own sidecar and real mTLS certificates.
It makes three calls (allowed across services, denied admin call, blocked by a guardrail) and prints the audit trail.
Without ANTHROPIC_API_KEY the demo runs on a mock model (it sets AGENTSC_MOCK_FALLBACK=1; elsewhere a missing key refuses Claude agents). Export the key first to use Claude.
The full v0.2 platform (control plane, console, managed sidecars) runs without Docker with CHECK_ONLY=0 make platform-demo; the console is then at http://localhost:38088.
With Docker, make compose-up runs the same stack plus an OpenTelemetry collector and Jaeger (set AGENTSC_CONSOLE_PORT, AGENTSC_ORDERS_PORT or AGENTSC_JAEGER_PORT if 8080, 8081 or 16686 are taken).
On minikube (also needs Docker, minikube and kubectl), run make minikube-up build deploy demo.
Your app sends one HTTP request to its own sidecar:
curl -s localhost:3500/v1/agents/stock-analyst/invoke \
-H 'content-type: application/json' \
-d '{"input": "How many WIDGET-1 are in stock?"}'
The JSON response has status, output, usage, steps, request_id and trace_id.
An agent that needs a decision from you answers with status: ok and a questions list; you answer in the context of your next call.
A denied invocation returns 403. A budget limit (calls per minute, cost per day, or agent-call depth) returns 429. An unknown agent returns 404.
A runtime or model error returns 502. Hitting max_steps or max_tokens_per_call also returns 502, with status: error.
A tool call that is denied inside the run does not fail the request. It appears in steps with decision: deny.
apiVersion: agentsc.io/v1alpha1
kind: Charter
service: { name: inventory, namespace: shop, app_port: 8000 }
agents:
- name: stock-analyst
type: agent
model: claude-opus-5-5 # or "mock"
system: You answer questions about stock levels.
tools:
- name: get_stock
description: Get stock for one SKU.
type: service
service: inventory # its own app
method: GET
path: /stock/{sku}
budgets: { max_tokens_per_call: 1024, max_calls_per_minute: 60, max_cost_usd_per_day: 2.0, max_steps: 4 }
guardrails: { pii_redact: true }
authz:
default: deny
callers: [{ identity: local, agents: ["*"] }]
services: [{ name: self-stock, identity: local, agent: stock-analyst, service: inventory, allow: ["GET /stock/*"] }]
audit: { sink: stdout }
Check a charter with cargo run -p agentsc-cli -- charter validate <file>.
| Page | What it covers |
|---|---|
| Architecture | How it works: components, ports, request flow, identity, authz order. |
| Getting started | Run it on your machine and on minikube, step by step. |
| Creating agents | Write a charter, define agents and tools, call them from your app. |
| Microservices | Adopt it across many services, for a startup or an enterprise. |
| Monolith and monorepo | One service with many agents, and a monorepo layout. |
| Operations | Audit logs, the CLI, troubleshooting, production checklist, limitations. |
| LLM connection | The platform's LLM_* contract, and the standalone model gateway (agentsc-gateway): wire formats, tenants, own keys, budgets. |
| Decision records | Why HTTP/3 for the console, the response caches, the SQLite store and the default-on agent practices are built the way they are. |
| CONTRACT.md | Full reference: wire protocol, charter, authz order, audit record. |
This is a v1alpha1 MVP. It is not production-ready. The most important limits:
agentsc.io/inject: "true", and each pod gets its own certificate from embassy (24 hours by default, renewed without a restart). The kustomize demo in deploy/ writes the agentscd container into each Deployment by hand and uses per-service certificates from a bootstrap Job, with no rotation and one CA per namespace.pii_redact only rewrites the agent's final output and the audit records. It does not change prompts sent to the model.service.name and the ports.More detail is in docs/operations.md and CONTRACT.md §11.
See CONTRIBUTING.md to build, test and send a change. Report security problems privately, as SECURITY.md explains.