getclaros guard sits in front of an MCP server, local (stdio) or remote (HTTP). Reads pass through. Each write tool call goes to POST /v1/check first; a call that breaks a rule is never forwarded, and the agent gets a tool error with the rule, the owner’s words and who to ask. Your agent doesn’t change.

Set up

  1. Signs you in through the browser (device sign-in) and saves an agent key for the workspace you pick.
  2. Finds your agent clients’ MCP configs and lists their servers.
  3. Wraps every server it can (reads pass straight through, so guarding a read-only server costs nothing), after backing up the file. --servers a,b narrows it; Enter at the prompt takes all, p picks.
  4. Adds a claros entry so agents can read the map up front (MCP server).
Restart the agent client afterwards. init only edits files that exist. Each wrapped server’s command becomes npx -y getclaros guard --server <name> -- <original command>; env, cwd and comments stay. Running it again changes nothing.

Check it: test, status

Exit codes: 0 stopped (test) / OK (status), 1 not stopped, no map to test, or (status) an agent not guarded or changed since setup, or a browser agent here not set up, 2 not signed in or bad usage, 3 Claros unreachable or key rejected. With no guarded server matching a map, test uses your newest map and says DEMO.

Undo

A file still exactly as init wrote it is restored from its backup. A file you changed since is unwrapped in place, keeping your edits.

Run it by hand

The guard logs one line per decision on stderr:

Remote servers

Hosted MCP servers (a url entry instead of a command) are guarded too. Your client still starts a local process; the guard reaches the server over Streamable HTTP:
init does this for you when the entry has static headers (headers, or http_headers in Codex): the entry becomes npx -y getclaros guard --server <name> --remote <url> --header "K: V" …. The headers stay in that same config file (${VAR} and ${input:…} still work) and go only to the app’s server, never to Claros. undo puts the url entry back. Listed but not guarded yet:
  • Servers that sign in with OAuth (no static header in the config).
  • A token from an env var or a helper (Codex bearer_token_env_var / env_http_headers, Claude Code headersHelper).
  • Legacy SSE servers ("type": "sse").

Limits

  • Remote servers: static headers and Streamable HTTP only (see above).
  • Codex servers written as inline tables or dotted keys aren’t found.
  • No Windows .cmd shims.