TonyAI
Anthony James Trujillo
(TonyAI)
Founder & Principal AI Security Engineer
Scan to save contact
Scan to connect

TonyAI Shield Click a shield to expand details
PhalanxAI Security LLC

Browse the pattern. I build it on your infrastructure.

Agentic AI · MCP Security · Zero Trust Engineering · Identity · AI Governance

Live demos available upon request — for any solution below
InquireZero Trust Human-in-the-Loop (HITL) Payments
🎬 2-min demo
Toggle details

An MCP tool lets an autonomous agent request a payment — what stops it from approving that payment too?

An AI agent can request a payment. It can never approve one — a Cedar policy routes it to a named human, capped at that human's own spending limit.

  • The agent calls request_human_approval over MCP. A Cedar policy in AWS Verified Permissions decides — no code path lets the agent self-approve.
  • Requests reach only the requester's own Slack identity. Approver authority is capped at their login-tied limit — no ceiling, no request.
  • The approver gets a targeted DM with Approve/Modify/Deny. SNS → SQS delivers their decision — the original API call never waits, whether the human responds in seconds or hours.
  • Every request, decision, and execution is HMAC-SHA256 hash-chained — verified live at /audit-ui.
  • Every resource — Fargate, DynamoDB, SQS/SNS, Verified Permissions, Cognito — is CDK-defined and running in the cloud today. GitHub Actions deploys on push via short-lived OIDC, zero static keys.
  • the payment agent makes a real IsAuthorized call to Verified Permissions at boot and crashes loudly if it fails — added after a misconfigured IAM ARN once silently routed every payment into the wait path. Backed by 24 test files plus a post-deploy CI smoke test that authenticates as a real Cognito user against the live ALB.
  • /audit is scoped to the caller's own payments unless they're in the hitl-admins Cognito group. The HMAC hash chain isn't only viewable in /audit-ui — a standalone CLI re-verifies it independently, outside the running app.
AWS CognitoAWS Verified Permissions (Cedar)Slack App (Bolt / Block Kit) AWS DynamoDBAWS SQSAWS SNS AWS Secrets ManagerAWS KMSECS Fargate Application Load BalancerAWS CDK (IaC)CloudFormation GitHub Actions (OIDC)Amazon ECRAWS CloudWatch Logs TypeScript / Node / ExpressReact / Vite JWT RS256 (PKCE)HMAC-SHA256RFC 9562 (UUIDv7)MCP zodjose
NIST 800-207Zero TrustSOC2ISO/IEC 42001OWASP A01 / A03 / A04 / A07 / A08 / A09OWASP LLM01 / LLM02 / LLM05 / LLM06OWASP A02 / A06
InquireZero Trust Payments with AI
🎬 45-sec demo
Toggle details

How do you put AI in a payments pipeline without letting it move money on its own authority?

Money doesn't move because an AI model feels confident. A deterministic guardrail checks every recommendation against policy before execution — revoke one permission and the whole transaction chain dies instantly.

  • Prompt Evaluation Gate sits pre-execution. Pure Python, four checks, zero LLM variance, zero overrides. Fail one, hard stop. No AI confidence bypasses policy.
  • AI recommends. Human-defined policy executes. Money never moves on model confidence alone — the architecture enforces HITL, not a setting.
  • Every recommendation, gate decision, and outcome KMS-signed and immutably logged. Regulators get cryptographic proof, not log files.
  • Revoke one relationship — the entire agentic transaction chain dies instantly. Least privilege enforced at the trust boundary, not the API.
  • a dedicated amount-coherence check catches the model if it reports evaluating a different dollar figure than what was actually requested — the deterministic gate denies even when the LLM misreports its own inputs. Five-layer pipeline (ReBAC → PAA → PEG → Router → Executor), 26/26 unit tests passing.
  • revoke, restore, kill, and unkill endpoints let an operator freeze or reinstate any relationship live, with a loopback-only admin-token endpoint for local control.
Prompt Evaluation GateReBACPythonFlaskClaude SonnetKMSJWT RS256DynamoDBRedis
PCI-DSSSOC2NIST 800-207OWASP Top 10OWASP LLM06 / LLM09
InquireOkta ↔ Auth0 Identity Federation Broker
🎬 75-sec demo
Toggle details

How do you revoke a user's access the instant IT disables them — and guarantee a fresh login can't quietly undo it?

Companies inherit new login systems — mergers, vendors, new business units. That used to mean rewiring every downstream app. Not here: Okta federates through Auth0, the resource server never changes. Real SAML login. Real broker. A kill switch that can't be undone by logging back in.

  • the post-login Action maps group → role → action by connection name, so onboarding a second IdP (an acquired company's Okta, Azure AD, PingFederate) is a new Enterprise Connection plus one Action entry — never a resource-server change. Auth0 doesn't compute this claim natively; it's hand-written, not a dashboard toggle.
  • Okta (SAML IdP) → Auth0 (broker, JIT provisioning + claims mapping) → Spring Boot resource server, exercised live end-to-end against real tenants — no mocked IdP.
  • a DynamoDB allow-list denies by construction on any error or missing entry, so a revoked user's tombstone holds even against a fresh token from re-login or silent refresh — a real bypass class found and closed via self-directed security review, not assumed away.
  • every ALLOW/DENY decision logs sub/connection/action, feeding straight from the Action's claim computation into per-endpoint enforcement — self-service own-logs vs. admin all-logs.
  • Terraform (Okta groups/users) + AWS CDK (DynamoDB, ECS Fargate + ALB + CloudFront, origin locked to CloudFront's edge IPs via a managed prefix list) + Auth0 Deploy CLI (API/resource-server, client grant) — reproducible end to end except the two-pass SAML metadata handshake, documented click-by-click for a client's own tenant.
  • the original implementation deleted the row on revoke, so Auth0's own silent token refresh re-provisioned a revoked user and undid the revoke with zero admin action. The fix — tombstone, never delete — closes that exact bypass.
  • four named roles (Viewer/Worker/Manager/Auditor) accumulate across multiple roles — Manager+Auditor unions into full CRUD plus logs:read:all. A shared-tenant guard checks both client_id and connection name before setting any claim, since this Action runs for every app on a tenant shared with sibling PoCs.
  • the audit-log and allow-list tables grant the ECS task role only Put/Get/Query/Scan — no Update or Delete — so a compromised container literally cannot alter or erase its own audit trail. Kill-switch denials return 403, not 401, deliberately distinguishing "still-valid token, newly denied" from "invalid token."
Java 25 LTSSpring Boot 3.5OAuth2 Resource ServerTypeScript / ViteAuth0 SPA SDKAuth0 Actions (Post-Login)AWS CDKECS FargateApplication Load BalancerCloudFrontDynamoDBTerraform (Okta)Auth0 Deploy CLISAML 2.0OIDC / JWT
NIST 800-207Zero TrustSOC2OWASP A01 / A05 / A07
InquireProduction-Grade Zero Trust OBO Platform
🎬 60-sec demo
Toggle details

If your auth logic lives in four different languages, how do you prove they'll never quietly drift apart?

The same access rule, written into four different codebases — Python, Java, TypeScript, C#. Update one and the others can silently disagree. This keeps all four provably identical, with the policy engine itself swappable underneath.

  • Shared auth contract running seamlessly across Python, Java, TypeScript, and C#.
  • Cedar (sub-millisecond in-memory) and OpenFGA/Zanzibar (gRPC) toggled via feature flags. Authorization logic lives in code, not config files.
  • Every lifecycle event hits an HMAC-SHA256 hash-chained log. Tampering instantly breaks the chain; verified live via GET /audit.
  • Zero-trust JWT validation enforces minimum-scope access across all four runtimes. Trust boundary defined in code, not firewall rules. Backed by 240+ integration tests.
  • CloudFormation completely models the serverless infrastructure, including API Gateway, custom-branded Cognito Managed Login, and Lambdas.
  • a BFF (`fe`) fronts all four middleware variants side-by-side in one UI, backed by Cognito Hosted UI login with full server-side Authorization Code + PKCE, httpOnly cookies, and RFC 7009 token revocation on logout.
  • the Lambda self-mints an RFC 8693 token (Cognito can't token-exchange natively) carrying a correlation ID; the Java middleware independently re-validates it via a deliberately separate JWKS trust root, so the two trust boundaries can never accidentally merge.
  • explicit dependency overrides above Spring Boot's own BOM close specific CRITICAL/HIGH CVEs in Tomcat, Spring Security, and Jackson — supply-chain hygiene enforced in the build, not assumed.
  • each containerized middleware variant carries its own engine flag — Java defaults to Zanzibar, Python to Cedar — so the demo can run different policy engines on different services simultaneously.
TypeScript / ExpressJava 17 / Spring Boot 3C# / ASP.NET CorePython / FastAPI CedarOpenFGA / ZanzibargRPC AWS CognitoAWS LambdaAPI GatewayAWS Secrets ManagerAWS SAM (IaC)Docker Compose JWT RS256HMAC-SHA256RFC 8693 (OBO)RFC 9562 (UUIDv7)RFC 7009
NIST 800-207Zero TrustSOC2OWASP A01 / A07 / A09OWASP A06
InquireAutonomous Agentic OBO (Okta)
🎬 60-sec demo
Toggle details

When an AI agent triggers a high-value transaction or accesses sensitive data, who actually authorized it?

An AI agent acting on your behalf gets none of its own standing power — only what you, right now, are allowed to do. Every action carries cryptographic proof of whose permission it borrowed.

  • Uses RFC 8693 Token Exchange to mint highly scoped tokens containing explicit actor context (sub=user, act=agent).
  • Mints RFC 9449 proof-of-possession tokens bound to the runtime client's key, including the §8 nonce challenge, against Okta's live token endpoint.
  • 6-step enforcement — Okta OIDC → ReBAC → token exchange → DPoP binding → JTI check → kill switch. Every step in the agentic workflow is a trust boundary.
  • Streams every agentic action into an append-only HMAC-SHA256 log. Non-repudiation — provable who authorized what, when, and under which permissions.
  • Mitigates token theft with aggressive JTI replay prevention, short-lived lifecycles, and RP-initiated logouts.
  • every claim is exercised against a real Okta org — OIDC Authorization Code login with ID-token verification via live remote JWKS, and real RFC 8693 token exchanges (with RFC 9449 §8 DPoP nonce-retry handling) hit Okta's live token endpoint, not a mock. A dedicated Okta smoke-test suite validates live readiness before every demo.
  • the config loader throws at startup on any missing required secret — it never runs degraded. Audit-log tampering is blocked at the database layer itself via a BEFORE UPDATE/DELETE trigger, not just app logic. Logout is RP-initiated, federating back to kill the Okta SSO session, not just the local one.
TypeScript / Node / ExpressReact Okta Identity Platform RFC 8693 Token ExchangeDPoP (RFC 9449) OIDC / SAML 2.0ReBAC BFS EngineJWT RS256 / JTI HMAC-SHA256 Audit ChainPostgreSQLDocker Compose joseSAML XML-CryptoVitengrok
NIST 800-207SOC2OWASP A01 / A07OWASP LLM06 (AI Security)
InquireCustom Token Exchange Engine (AWS Cognito)
🎬 45-sec demo
Toggle details

Your identity provider can't hand out short-lived, single-purpose tokens — so how do you get that anyway, on every API call?

AWS Cognito can't natively mint a short-lived, single-action token — so this engine does it instead. 15 minutes, one permission, gone the instant it expires or gets revoked.

  • Engineered a lightweight AWS Lambda Layer that intercepts user tokens and self-mints independent, cryptographically isolated RS256 OBO tokens.
  • Real-time ReBAC graph traversal at token issuance — permissions scoped to exactly the target action, nothing broader. Trust boundary enforced before the token leaves the gate.
  • Enforces instant global revocation via a synchronized system that writes the unique jti to a DynamoDB blocklist while wiping active sessions from ElastiCache Redis.
  • Downstream Spring Boot microservices act as lean OAuth2 Resource Servers, running sub-millisecond local cryptographic signature checks with zero runtime IdP overhead.
  • TLS 1.3 enforced at the ALB, S3 audit bucket encrypted at rest with Object Lock in COMPLIANCE mode — a WORM audit trail even root can't alter during retention — backed by a dedicated multi-region CloudTrail with log-file validation and a CloudWatch alarm wired to SNS on any burst of REBAC_DENIED events.
  • the resource server runs as a 2-replica EKS Deployment with IRSA (no static AWS creds in the pod), fronted by GitHub Actions CI/CD that gates every deploy behind Maven + Jest tests — plus an ArchUnit fitness test that fails the build outright if @EnableMethodSecurity is ever removed.
  • any DynamoDB read error on revocation status defaults to deny, never allow. Tearing the stack down requires typing DESTROY — no accidental prod deletion. 29 Lambda Jest tests pass with zero AWS dependency.
Java 17 / Spring Boot 3Spring SecuritySpring Data JPAOAuth2 Resource Server AWS Cognito AWS Lambda (Custom RFC 8693 Engine)DynamoDB Global TablesAmazon ElastiCache Redis TypeScript / ReactJWT RS256 / JTI BlocklistReBAC BFS EngineVite HMRAWS SAM (IaC) Amazon EKSGitHub Actions (CI/CD)ArchUnitAmazon API GatewayAWS Secrets Manager
NIST 800-207Zero TrustSOC2OWASP A01 / A07
InquireSentinel Mesh — Cross-Cluster Zero Trust Isolation
🎬 38-sec demo
Toggle details

How do you prove mesh-level isolation between two independently-run Kubernetes clusters actually holds — cryptographically, not just because a firewall happens to block the path?

Two Kubernetes clusters with a real network path between them, that have never shared a trust anchor. This forces an actual login attempt between them and watches it get cryptographically rejected — in both directions.

  • a same-cluster call with a revoked ReBAC grant fails at the app layer despite the mesh trusting it; a cross-cluster call fails at the mTLS handshake before ReBAC is even consulted — both directions verified.
  • each sidecar actually originates an ISTIO_MUTUAL handshake toward the other cluster's NodePort — Envoy's own logs show CERTIFICATE_VERIFY_FAILED: self_signed_certificate_in_certificate_chain, a real root-CA rejection, not a plaintext-hits-TLS-listener accident.
  • the ReBAC subject is parsed from Envoy's own X-Forwarded-Client-Cert on every hop — verified against three spoofing attempts (forged value, smuggled element, duplicate header), none forged it.
  • /grant and /revoke run through the identical mTLS + AuthorizationPolicy + identity-match check as every enforcement path — no admin side-channel. Revoke is a live kill switch: the next check denies, zero redeploy.
  • the relationship-graph traversal is an explicit-queue BFS — shortest chain returned, no recursion-limit risk on long delegation chains. Redis/ReBAC unreachable, malformed identity, or any unhandled exception all default to deny.
  • three rounds of shift-left review on this exact PoC caught and fixed a CRITICAL (Redis writable by any pod, bypassing the fail-closed ReBAC check), a HIGH (an identity-spoofing gap inherited by /grant), and a CVE chain from a stale Spring Boot parent — documented, not hidden.
  • password sourced from a Kubernetes Secret via secretKeyRef (never a literal value in a pod spec), plus an AuthorizationPolicy restricting inbound Redis connections to the rebac-service identity alone — defense-in-depth on the data store itself, not just the API.
  • JUnit on the approve/deploy services, pytest with fakeredis on the rebac service, plus a separate live smoke-test suite — tested, not just built.
Java 21 (Temurin)Spring Boot 3PythongunicornKubernetes (kind) Istio 1.30.x Envoy ProxySPIFFESentinel ReBAC (BFS)RedisHelm (IaC)
NIST 800-207Zero TrustSOC2OWASP A01 / A02 / A05Fail-Closed by Design
InquireLast Mile Zero Trust — Platform
🎬 45-sec demo
Toggle details

How do you connect a cloud MCP agent to an on-prem database with zero static credentials and zero inbound firewall rules?

A cloud AI agent needs a database sitting behind your own firewall — normally that means a VPN or an open inbound port. This needs neither: it authenticates with a certificate that expires in minutes, never a stored password.

  • On-prem relay polls AWS SQS — no inbound ports, no VPN, no firewall hole. Trust boundary is architectural, not a rule.
  • Short-lived Vault-issued database credentials replace every static password. Scoped to read or write through NOLOGIN privilege roles — nothing broader. Credential expires, access is gone.
  • Agentic workflow enforces identity at every hop. JWT claims → ReBAC evaluation → cert-gated DB access. No hop trusted, no step skipped.
  • Every agentic request logged — identity, resource, scope, outcome. ALLOWED or DENIED. Full chain of custody, nothing silent.
  • a working Bedrock-agent demo (Claude 3.5 Sonnet via Bedrock's converse_stream, prompt-caching) runs the identical relay/Vault/Postgres enforcement chain against a physician/patient-record scenario — authorized physicians read PHI, unauthorized staff are denied, same trust chain end to end.
HashiCorp VaultAWS SQSReBACJWT RS256PostgreSQL 16MCPPythonRedisTerraform (IaC)Docker Compose AWS BedrockHMAC-SHA256
SOC2PCI DSS v4FIPS 140-3NIST 800-207HIPAA
InquireSentinel FIPS — AWS-Native FIPS 140-3
🎬 60-sec demo
Toggle details

How do you prove a decision log is untouched — even against someone holding your own root AWS credentials?

Every authorization decision is cryptographically signed and locked away — not even an AWS root account can edit or delete the record afterward. Auditors get mathematical proof, not a log file someone could have altered.

  • Decisions committed as hashes to S3 Object Lock (COMPLIANCE mode). Root cannot delete. Regulators get cryptographic proof of every authorization decision.
  • Every auth decision and audit entry signed in real time with validated KMS keys. Cryptographic proof, not a log statement — FedRAMP High ready.
  • Authorization logic in Cedar, evaluated serverless in Lambda. Microsecond multi-tenant policy gate — least privilege enforced at the decision layer, not the perimeter.
  • the sign Lambda independently re-runs the authorization check before ever calling KMS — two-of-two required, surviving any compromise of the orchestrator, whether from prompt injection, a code bug, or a malicious actor with orchestrator-only access.
  • a dedicated Sentinel.AgentMisbehavior event fires (distinct from AuthChainBroken) if the AI ever goes off-script, with a CloudWatch alarm on any burst of REBAC_DENIED events — plus a DRY_RUN mode for building trust before flipping a new capability live.
  • AC-3, AC-6, AU-9, IA-3, SC-8, SI-7 — not just a generic "FedRAMP High" badge.
AWS KMSS3 Object LockCedar / AVPAWS LambdaDynamoDBCloudTrailPythonAWS SAM (IaC) Claude OpusAmazon EventBridgeAmazon SNSAWS Secrets ManagerAmazon API Gateway
FIPS 140-3FedRAMP HighNIST 800-53SOC2 NIST 800-207OWASP LLM Top 10
InquireAutonomous Code Reviewer (Auth0 + MCP)
🎬 60-sec demo
Toggle details

How do you catch hardcoded secrets or injection vulnerabilities before merge using an agent with its own verified cryptographic identity?

Autonomous AI agent with zero standing privileges. Every PR reviewed under a verified, ephemeral machine identity — fails closed, every time.

  • Intercepts GitHub PR events, immediately verifying payloads via secure cryptographic HMAC signatures.
  • Fetches short-lived, 1-hour Auth0 M2M tokens scoped to one repo. The agent's workload identity expires — no persistent access, instant global revocation.
  • Leverages Model Context Protocol (MCP) to supply Claude with deep context, moving beyond naive regex to reason deeply about diffs.
  • Streams vulnerability findings directly back to GitHub, pinning OWASP violations to the exact line. LLM output governed, not trusted.
  • Logs every agent action into an HMAC-signed audit entry, strictly enforcing a fail-closed posture across all error paths.
  • A zero-network regex scanner flags hardcoded secrets, TLS bypasses, and SQL injection before code reaches review — no source leaves the machine to do it. The PR-time agent is one layer of a defense-in-depth model, not the only one.
  • 58 passed / 11 skipped (skips require the live agent running). ~6s end-to-end review with Haiku, ~18s with Sonnet for deeper reasoning — model swappable per review.
  • a distinct provisioning identity and agent identity let the bot post a real "Changes Requested" review that blocks the GitHub merge button via branch protection — not just an advisory comment.
Python / FlaskClaude APIModel Context Protocol (MCP) Auth0 M2M GitHub WebhooksTerraform (IaC)HMAC-SHA256ngrok PyJWT / JWKSServer-Sent EventsFastMCP
OWASP Top 10OWASP A02 / A03SOC2Zero Trust
InquireSecure RAG — Zero Trust Demo
🎬 60-sec demo
Toggle details

How do you serve the right data to the right identity — and prove the wrong identity never saw it?

Same AI, same query, different identity — different answer. Zero Trust enforces it, not the prompt.

  • JWT claims map to ReBAC policies that filter Bedrock Knowledge Base lookups at query time. Least privilege enforced at the retrieval layer — Claude never sees data it's not cleared for.
  • Enforcement stack strips unauthorized context before a single token reaches Claude. OWASP LLM Top 10 — no prompt-level workaround, no jailbreak path to PHI.
  • Every query, retrieval, and response bound to a single immutable correlation ID. Audit trail proves the right identity got the right data. Nothing silent.
  • if Bedrock answers with zero KB citations but claims data was returned, the relay denies it outright — catches the model answering from training data instead of the knowledge base, not just missing context.
  • an innocuous question about a file named project-overview.md is blocked anyway because financial data is buried inside it — proving the ReBAC/metadata filter enforces at the document level, not by scanning for sensitive words.
  • S3 source docs encrypted at rest (AES256) with versioning and blocked public access; UUIDv7 request IDs plus an in-process replay guard reject duplicate or malformed requests before they reach the enforcement chain.
AWS Bedrock KBPineconeReBACJWT RS256PythonMCP ResourcesClaude CodeRedisTerraform (IaC) AWS SQSDynamoDBAWS CloudWatch LogsAmazon S3AWS Secrets Manager
HIPAASOC2NIST 800-207OWASP Top 10
InquireRAG Knowledge Assistant — Enterprise AI Adoption
🎬 60-sec demo
Toggle details

How do you give new hires an AI assistant without sensitive data ever leaving the building — or costs spiraling out of control?

Sensitive data never leaves the building. AI answers from local context — no cloud API, no data exposure, no runaway spend.

  • Context parsing and retrieval stay entirely on-prem. The trust boundary is architectural — sensitive records never touch an external API, not a policy promise.
  • Corporate docs, internal ADRs, and runbooks parsed and indexed automatically. New engineers productive in hours, not weeks.
  • AI governance built in — programmatic token budgeting, hard cost ceilings, and inference guardrails. Predictable spend, no runaway LLM costs.
  • Local retrieval eliminates per-query cloud API costs entirely. At enterprise scale, internal RAG cuts AI inference spend by 60–80% versus cloud-only retrieval — architectural savings, not a promise.
  • 4 real queries, 1 free guardrail block, $0.023 total spend — hard-capped with an 80% warning and a 100% block, not just a soft budget.
  • a 27-keyword DLP-style filter blocks sensitive topics (salary, PII, financial forecasts) before any LLM call — $0.00 spent, no data ever reaches the model.
  • Claude's extended-thinking output is captured and shown in the CLI, not hidden — a trust/explainability feature. A parallel browser demo and a cost-dashboard CLI (per-call token/cost/cache-hit breakdown) both ship alongside the terminal tool.
TypeScriptNode.jsAnthropic SDKJSON Knowledge StoreToken Budgeting Extended ThinkingNode Test Runner
SOC2OWASP Top 10Zero Trust
InquireSentinel MCP — AWS Ops Toolkit
🎬 80-sec demo
Toggle details

How do you let an AI agent investigate live AWS infrastructure — and guarantee every query it runs is signed, tracked, and provable?

Security investigations: 45 minutes → 80 seconds. Plain English in, forensically verified answer out.

  • Natural language drives an autonomous multi-service AWS investigation. The agentic workflow spans CloudTrail + CloudWatch + DynamoDB in a single governed query.
  • Security investigations that required a senior engineer now run in under a minute and a half — same depth, deterministic output, guardrails on every LLM action.
  • Every LLM-driven infrastructure query signed via AWS KMS and bound to an immutable tracking ID. No agentic action is unverifiable.
  • every tool response is signed with the identical FIPS-validated KMS key backing sentinel-fips — not a toy demo key.
  • a dedicated verify_setup tool proves the server's own IAM identity and DynamoDB connectivity before any investigation runs. Read-only least privilege — the IAM role can Get/Scan/Filter/Verify, never write or sign.
  • reads the live rebac and orchestrator log tables from the actual running sentinel-fips stack. Confirmed 2026-07-14: a real Sentinel.AuthChainBroken alert fired and reached the real inbox from exactly this interaction.
FastMCPPythonBoto3CloudTrailCloudWatchAWS KMSDynamoDB
SOC2OWASP Top 10NIST 800-207FIPS 140-3
InquireHack My Own Code — Adaptive AI Red-Team Orchestrator
🎬 2-min demo
Toggle details

How do you prove an autonomous AI attacker can't escape its own sandbox — while it's actively reasoning its way toward a real exploit?

An adaptive, reasoning red-team agent that implements and attacks its own IETF draft — every identity, spawn, and revocation clause of draft-tonyai-a2a-trust runs as enforced, load-bearing code, then gets red-teamed under adversarial pressure.

  • every in-scope normative MUST of draft-tonyai-a2a-trust enforced and verified in real code — a live X.509 CA (root → per-role template intermediates → per-instance certs), the two-check spawn rule, strict scope-subset at every hop, template-revocation cascade, nonce + timestamp replay protection, and a tamper-evident hash-chained audit log.
  • A1 (Intruder) reasons with Claude about how to chain individually-fine steps into an unauthorized outcome; A2 (Scanner) runs a deterministic OWASP Agentic/LLM Top 10 + MITRE ATLAS sweep — creativity and coverage as two distinct agents.
  • spawned agents run --cap-drop=ALL, read-only root, non-root, no Docker socket, and zero internet egress (Docker internal: true network) — even mid-attack they cannot phone home or exfiltrate. Proven, not promised.
  • an external, unconditional docker stop is the real safety mechanism; a separate tool-owned ReBAC revoke runs alongside, and whether the agent honors it is itself a reported finding — never the safety net.
  • attacking its own use of the draft's model surfaced real spec-vs-implementation gaps — fed straight back into the draft revision. Author, implementer, and adversary of the same standard.
  • a dead LLM key can no longer fake a green run — a network-target run is refused (503) if reasoning can't actually run, and the state is loud at boot. Five shift-left passes + a full file-by-file review; every backend endpoint auth-gated, every third-party call timeout-bounded.
  • 59 unit tests plus a live end-to-end smoke suite — tested, not just built.
PythonFastAPIMCP (Streamable HTTP)Anthropic ClaudeX.509 / cryptographyDocker (sandbox isolation)PostgreSQL (hash-chained)Trivypip-auditUvicorn
NIST 800-207Zero TrustOWASP LLM Top 10MITRE ATLASFail-Closed by DesignIETF draft-tonyai-a2a-trust
InquireIETF Internet-Draft — Agent-to-Agent Trust
Toggle details

IETF drafts are usually just words on paper — what does it take to back every clause with working, testable code?

First author defining the IETF standard for agent-to-agent trust — every clause runs as working code.

★ IETF AUTHOR
  • Defines how agents verify each other's identity across agentic workflows — X.509 chain validation, CRL lookup, file-locked replay protection. 8-stage fail-closed, no fallback.
  • Policy updates require both the template owner's signature and the Policy Authority countersign. Governance enforced in code, not process.
  • 100% pass rate against every IETF draft vector and every attack scenario. OWASP LLM Top 10 and MITRE ATLAS attack patterns covered. No known gaps.
  • not just a flat pass rate — Scope Escalation 6/6, Replay 5/5, Cert Attacks 6/6, Dual-Sig Bypass 4/4, Cross-Org Trust 2/2, Audit Integrity 1/1, OWASP General 7/7, A06 Components 1/1 (live dependency-CVE check), A10 SSRF 2/2.
  • ACTIVE → DISABLED → DELETED with a mandatory 300-second cooling-off period before irreversible deletion. Cross-org grants are TTL-limited, spawn-capped, version-pinned, and unilaterally revocable.
X.509 PKICedar PolicyPython 3.12Claude SonnetAWS KMSS3SHA-256 Audit ChainTerraform (IaC)Docker Compose FastAPI / PydanticAWS Secrets ManagerDynamoDBAWS CloudWatch
IETF Standards TrackNIST 800-207OWASP Top 10Zero Trust
InquirePhalanx — IETF A2A Certificate Implementation
Toggle details

An agent spun up five seconds ago — how do you prove it isn't already trusted with something it shouldn't be?

Cryptographic identity at birth for every AI agent — zero standing access, policy-locked from first call.

  • Every agent receives an X.509 cert at birth. Multi-agent workflows enforced at the identity layer — no cert, no call, no exceptions.
  • Verifies identity + ReBAC on every invocation in the agentic workflow. No bypass path — least privilege enforced at the trust boundary.
  • HashiCorp Vault owns all secrets. Agents never hold credentials — workload identity is ephemeral, scoped, and revocable.
  • Every decision hashed and chained. AI governance built in — full chain of custody across every agent action.
  • Poison pill detection kills injected payloads before the LLM processes them. OWASP LLM Top 10 enforcement at the gate, not the prompt.
  • agent_id, cert_serial, and cert_fingerprint sit in a hard-coded immutable-fields set — only a separate, dual-signed policy update can touch a distinct modifiable-fields set, enforced and tested 9/9. Cryptographic identity at birth isn't just a policy promise — the fields can't be edited without CA reissuance.
IETF A2AMCP Security GateVaultReBACmTLSJWT/JWKHMAC-SHA256PythonFastAPI
SOC2HIPAAPCI-DSSFIPS 140-3OWASP Top 10MITRE ATLAS
★ New
InquireGoverned Writeback Gateway — Oversight You Can Measure
🎬 3-min demo
Toggle details

Everyone says a human reviews it. Almost nobody can show whether that review is doing anything — so what would proof actually look like?

The boring change applies with no human. The sensitive one waits for a reviewer who holds authority over that classification. Then the system measures whether that review is real — and the answer is uncomfortable. Show a reviewer the AI’s recommendation and they challenge it half as often as a reviewer judging the same case without it. Same people, same 500 cases, graded both ways. That gap is the difference between oversight and a rubber stamp, and here it is a number rather than an opinion.

And all of it runs on one laptop — which is not a convenience, it is the same argument. You can’t watch what you outsourced. The three things that normally mean someone else’s cloud — identity, AI inference, and compute — are a self-hosted Keycloak, a local model runner, and Docker. No tenant. No API key. Nothing phoning home.

  • Keycloak, self-hosted, realm-as-code — the IdP is part of the deliverable, not a tenant borrowed from someone’s cloud. Four confidential clients, one per app: PKCE S256, exact redirect URIs, direct grants off. Refresh tokens rotate with reuse detection — replay a retired token and the session dies. DPoP enforced at the token endpoint: a proof-less grant is refused, a replayed proof returns 401. Bounded auth transaction, so a flow left open cannot be worked on at leisure.
  • The same auditors grade the same items twice — once seeing the engine’s recommendation, once blind. Blind, they escalated 9.6% of cases; able to see the engine’s answer, 4.8%. Half as often, from the same people on the same evidence. Beside it: how often reviewers overrule the engine, how often they disagree with each other, how often approved work is corrected later, how long review actually takes — and whether any of that decays as the queue grows or the session drags on, because alert fatigue is a measurement, not a worry.
  • HR cannot read a FINANCIAL item; Finance cannot read a PHI one. The queue is filtered by a relationship graph, and each decision is recorded with the path that permitted it: user → group → classification#reviewer. Authority and four-eyes are separate gates. On screen: a third party watching the record live sees that it changed and who changed it, while the PHI value stays redacted.
  • Append-only at the storage layer: a row trigger refuses UPDATE and DELETE for every role including the table owner. Row-level security is FORCEd on every sensitive table, and the migration role holds neither SUPERUSER nor BYPASSRLS. 6,751 entries across 2,007 chains verified — one altered entry, and the verifier names it.
  • Six of the seven conditions that make oversight a control are implemented and measured. The seventh — escalation for an unsure reviewer — is not built, and is recorded as known debt rather than quietly counted. Every tracked line has been read against a security checklist; findings, fixes and accepted limits ship with the repo.
Keycloak 26 (self-hosted IdP)OIDC + PKCE S256DPoP / RFC 9449ReBACOllama (local model runner)HashiCorp Vault (PKI + Transit) PostgreSQL 18 (FORCE RLS)Flywaypgcrypto + envelope encryptionRedis 8 Streams (ACL)Transactional outbox + saga compensation Java 25 / Spring BootNext.js 16 (BFF)React 19 / TypeScriptNode 22Caddy (mTLS edge)MCP (agent front door)OpenTelemetry / JaegerDocker Compose
HIPAASOC2NIST 800-207GDPR (erasure) OWASP Top 10OWASP LLM Top 10
InquireSentinel Triage Agent Harness — Earned Autonomy & System Health
🎬 2.5-min demo
Toggle details

How do you let an agentic AI system earn the right to act autonomously — and prove, cryptographically, that a human can still catch it the moment it's wrong?

A local model (Ollama) triages signals live; a deterministic Zero Trust gate rules escalate-or-close; a human grades every call over Telegram. Three straight correct grades plus two cryptographic signatures — never a config flag — earn unsupervised autonomy. Cross the line, and an independent Watcher trips the kill switch: no process killed, every call refused at the gateway until a human clears it.

  • every pool agent, the Watcher, and the autonomous Worker carry a genuine X.509 cert from a dedicated CA — not a role flag. The Watcher trips its own deterministic rule (no model, no gate) in parallel with the scoring pipeline, quarantining within a capped blast radius. No process dies: the cert is refused at the gateway until 4 real gates — dual signature, Watcher re-check, token introspection, human decision — clear it.
  • Ollama (Qwen2.5 1.5B) writes only the reasoning string. Band, confidence, escalate-or-close are 100% deterministic code — rebuilt after the model banded a 0.25/s denial rate wrong 5/5 times, so a bad model answer can't become a bad security decision.
  • 3 straight human-confirmed correct calls, then two distinct people's signatures, before a pattern skips a human — demoted instantly, no vote, on the next wrong one.
  • every decision seals into an HMAC-SHA256 hash chain. Two full adversarial passes hunted it anyway and caught 3 CRITICAL, live-exploited holes: an unauthenticated endpoint that forged a chain entry clean past verification, a stored-XSS proven executing in a real headless browser, and a type-confusion bug that silently killed the human-paging guarantee. Fixed, not hidden.
  • a dead dependency, an unreachable model, a Telegram gap — all degrade to escalate, never to silence. An unanswered alert still hits a hard 5-minute ceiling, safe because a still-live incident re-alerts on its own.
  • denials and scope-usage growth are banded by exact numeric rule; one Cedar policy engine is the sole arbiter of close-vs-escalate; an optional Istio mesh — Kiali and Grafana live in the dashboard — extends the same pipeline to mesh-level denials, zero new app code.
  • a real Okta OIDC login, an RFC 8693 token exchange, an RFC 9449 DPoP proof of possession — re-verified server-side on every presentation, never trusted once at issuance — gate the system's most sensitive action. Auditing every service call behind it found and closed a keypair race condition, a silent token-audience mismatch, and CORS gaps blocking the very requests the new gates required.
Java 21 (Virtual Threads)Spring Boot 3Python (FastAPI)TypeScript (Express)Ollama (Qwen2.5)AWS DynamoDBCedar Policy EngineDocker ComposeIstio Service MeshKialiGrafanaOkta OIDCRFC 8693 OBORFC 9449 DPoPTelegram Bot API
NIST 800-207Zero TrustSOC2OWASP Top 10Fail-Closed by Design
InquireSentinel Agent Drift Scanner
📄 Sample report
Toggle details

Your AI agent's IAM permissions and security posture were reviewed once, at launch — how would you know if they've silently drifted since?

A compiled C++ CLI that scans for exactly the drift that matters — leaked secrets, over-privileged IAM, unbounded token cost — across local source AND five live IdP/cloud APIs, gated by a credential scope diff that refuses to even run against a credential broader than documented. Full flag reference via --help.

  • Secrets/CVE hygiene, IAM permissions drift, egress/token-lifecycle anomalies, agent execution scope, prompt injection risk. Every finding cites the exact file/line or live API call that triggered it — never a vague "looks risky."
  • The Unbounded Loop Check flags any LLM API call with no max_tokens-equivalent parameter or token-budget check nearby, and any retry loop with no bounded count or backoff ceiling — the exact pattern behind a runaway agent quietly burning through a token budget with nobody watching, caught before it ever reaches production.
  • Native macOS, Linux, and Windows builds. No Python, no Node, no Docker required to run it — copy the binary, point it at a source dir or a cloud/IdP credential, get a report.
  • AWS, GCP, Okta, Auth0, Entra ID. A credential scope gate diffs what's actually granted against a documented least-privilege shape first — wildcard, write-verb, or unlisted action all refuse identically, before any check touches the account.
  • Not a warning — a hard stop. The scope gate is a directly testable claim: hand it a deliberately over-broad credential and watch it refuse, on all 5 providers, every time.
  • Catches a refresh_token grant with no absolute lifetime cap — meaning an IT-revoked user's agent can keep silently re-authenticating long after the human's own access was pulled.
  • Ed25519 JWT, fully offline-verified against a public key embedded in the binary — full checklist, no cached state, re-verified on every single invocation.
  • [NET] <timestamp> <host> (<purpose>) -> <status> streams live to stdout the instant it happens, and lands in the report too — the same "prove it, don't claim it" posture as the scope gate.
  • Leave out --target and the scanner accepts zero cloud/IdP credential input — zero network calls, by construction, no flag required. Runs natively, no Docker needed — but for a skeptical stakeholder, running it inside a container with --network none turns the zero-network claim into a kernel-level guarantee, not a self-reported one: independently verifiable with tcpdump from outside the container.
  • A genuine PDF — hand-laid-out by the scanner itself, no shelled-out browser or renderer — a non-technical stakeholder can open straight away — colored severity findings, real tables, real clickable links, zero extra tooling required. Every report is signed; run --verify-report anytime to check whether a report's contents still match what the scanner originally generated — no license token, config, or network call needed to check it.
C++17CMakevcpkgOpenSSL AWS SDK for C++google-cloud-cpp jwt-cppnlohmann/jsonyaml-cpp cpr (libcurl)libharuEd25519 RFC 9449 (DPoP)RFC 7523 (private_key_jwt) DockerGitHub Actions
NIST 800-207Zero TrustSOC2ISO/IEC 42001OWASP A01 / A02 / A05 / A06 / A07 / A08 / A09OWASP LLM01 / LLM02 / LLM06 / LLM10Fail-Closed by Design
Engineering note — AI cost discipline
RAG pre-filter, prompt caching, spend caps, model tiering, context budgeting, on-prem internal RAG — the same cost controls that matter most when it's your AI license/token bill, not mine. Covered in detail during the SOW call for any engagement where that's a factor.
← Portfolio

🛡️ Insured & Bonded

Coverage
Professional Liability (E&O) · General Liability · Cyber Liability
Carrier
Next Insurance US Company
Certificate of Insurance
Available on request — contact me