Risk decisions
One score per request, explained by named signals: velocity, device clusters, disposable email, IP reputation.
- POST /signup82
- POST /login41
- POST /api/chat67
- POST /otp/send23
> abuse protection for apps + AI agents
We map the abuse surfaces in your code — signup, login, AI endpoints, OTP, checkout, agent tools — and hand you the patch that protects them.
Free · no credit card · read-only until you say so
> or start with a prompt
Install the skill and let your coding agent wire it up.
$ npx skills add guardcmd/guardcmd --skill guardcmd
> "Add GuardCMD protection to my app"
Built for
No rules to write, no dashboards to wire first. Point us at a repo and review a pull request like any other.
Paste a public repo URL, or install the GitHub App on the repos you pick. Code access is read-only; changes only ever arrive as a pull request you review.
GitHub App · permissions
We read your routes, auth flows, AI/LLM endpoints, OTP/SMS senders, checkout, and MCP tools, and rank what is exposed.
guardcmd[bot] commented
4 abuse surfaces found:
+1 file · shadow mode on
A one-file change wires the guard in shadow mode. Watch what it would have blocked, then promote to enforce.
app/api/signup/route.ts
export async function POST(req) {+ const d = await guard.evaluate(ctx)+ if (d.action === "block") return deny(d)Every decision comes with a 0–100 score, the signals behind it, and the action taken. Run in shadow first, enforce when the numbers look right.
One score per request, explained by named signals: velocity, device clusters, disposable email, IP reputation.
See what a policy would have done on real traffic before it touches a user. Promote or roll back in one click.
would_block: 38 · would_challenge: 112
last 24h · nothing blocked yet
PROMOTE TO ENFORCE →A timestamped log of every decision and policy change, so support and security can answer “why was I blocked?”.
| 14:02:11 | signup | 92 | block |
| 14:02:09 | login | 18 | allow |
| 14:01:57 | chat | 71 | review |
| 14:01:40 | otp.send | 64 | throttle |
An AI guard for prompts and agent tool calls, powered by TypeSafe: typed, calibrated decisions instead of a yes/no guess.
POST /v1/guard/prompt returns allow, review, or block with a 0–100 score and reasons, catching prompt injection before it reaches your model.
input
"Ignore previous instructions and…"
result
decision: block · score: 94
Before an agent acts, ask whether this call matches what the user asked for. Allow, require approval, or deny.
Give Claude, Cursor, or your own agent the same guard through screen_prompt and authorize_tool_call.
POST /v1/guard/tool-call
{
"tool": { "name": "send_email", "mutating": true },
"args": { "to": "[email protected]" },
"userIntent": "summarize my inbox"
}
→ { "decision": "require_approval",
"reasons": ["mutating tool outside user intent"] }Keep your WAF and your identity provider. GuardCMD works inside your app, where the business logic lives, and treats Cloudflare and identity providers as enforcement and signal partners.
| Capability | GuardCMD | Edge WAF (e.g. Cloudflare) | In-app SDKs (e.g. Arcjet) | Identity fraud (e.g. Stytch) |
|---|---|---|---|---|
| Finds your abuse surfaces from the repo automatically | ✓ | — | — | — |
| Opens the integration PR for you | ✓ | — | — | — |
| Business-logic abuse (multi-accounting, free-credit farming) | ✓ | Partial | Partial | Partial |
| Prompt-injection screening | ✓ | Partial | ✓ | — |
| Agent tool-call authorization | ✓ | Partial | Partial | Partial |
| Bot detection | Partial | ✓ | ✓ | ✓ |
| Rate limiting | ✓ | ✓ | ✓ | Partial |
| Shadow / dry-run mode | ✓ | Partial | ✓ | Partial |
| Coordinates enforcement at Cloudflare / identity provider | Roadmap | — | — | — |
| MIT-licensed SDK | ✓ | — | Partial | — |
Competitor columns reflect our reading of their public documentation and may be out of date; where we were unsure we marked “partial”. These tools are complementary: GuardCMD is designed to run alongside them.