Guild ships scripts and hooks that run inside your Claude Code session. This document explains the trust model and how we handle security.
- Hook scripts under
hooks/run on every Claude CodeSessionStart,UserPromptSubmit,PreToolUse,PostToolUse,PreCompact,SubagentStop,Stop,TaskCreated,TaskCompleted, andTeammateIdleevent. See hooks/hooks.json for the full wiring and the Guild docs site →https://guildstack.dev/docs/architecturefor each event's purpose. - Tooling scripts under
scripts/run only when invoked by a skill or by/guild evolve,/guild rollback, etc. They are not auto-run. - MCP servers under
mcp-servers/run as long-lived stdio subprocesses when Claude Code loads the plugin. Both are read-only — verified mechanically (nowriteFile/appendFilecalls insrc/). - Skills are Markdown with YAML frontmatter. They contain no executable code; they are interpreted by Claude, not by the shell.
- Agents are similarly Markdown definitions, not executable code.
- No network access is made by default. Only the
researchershipping specialist (agents/researcher.md) declaresWebFetch/WebSearchin itstools:frontmatter. All meta-skills are filesystem-only by policy — any change must be flagged and justified in a PR. - No credentials are read, stored, or transmitted.
- No data is sent to telemetry endpoints.
.guild/runs/and.guild/wiki/are project-local and never leave your machine. - No auto-updates. Version changes flow through the standard
/plugin update guild@guildpath under your explicit control.
Guild ships a built-in security audit at commands/audit.md that delegates to skills/meta/audit/SKILL.md. Run it whenever you install or update a Guild fork:
/guild audit
It produces a static report at .guild/audit/<YYYY-MM-DD>.md
enumerating every hook, script, and MCP server with:
- SHA-256 hash (changes flag upstream drift)
- Lines of code
- Any network-call evidence (
fetch,http,WebFetch) - Any filesystem write outside
.guild/runs//.guild/evolve/ - Declared
tools:/allowed-tools:scope
Echoing Anthropic's standard guidance: install Guild only from sources you trust. Forks from third parties may have modified hooks, skills, or MCP servers that behave differently from the upstream release. Before installing a non-canonical Guild:
- Clone it locally.
- Run
/guild auditagainst the cloned copy. - Compare its hashes to the upstream release tags at github.com/lookatitude/guild.
- Look for any hook script that writes outside
.guild/or any specialist declaringWebFetch/WebSearchbeyondresearcher.
Unknown network access from a non-researcher specialist is a red flag; it is not present in the upstream release.
If you find a security-relevant issue in Guild, please do not open a public GitHub issue. Instead:
- Email:
security@lookatitude.comwith[Guild security]in the subject. - Include: the affected file, a minimal reproducer, Claude Code version,
and the output of
/guild auditat the affected commit if possible.
We'll acknowledge receipt within 3 business days and aim to ship a fix or mitigation within 14 days of confirmation.
These are mitigations that ship in v2. Any future contribution that weakens one of them should be explicitly called out in its PR.
| Risk | Mitigation |
|---|---|
| Cross-group trigger collisions | Pushy TRIGGER / DO NOT TRIGGER blocks + boundary evals under tests/boundary/ |
| Stop hook fires on non-task sessions → spurious reflections | Heuristic gate in hooks/maybe-reflect.ts (≥1 specialist + ≥1 edit + no error) |
| Evolution loop overfits to its own evals | Versioned skill snapshots + held-out evals + shadow-mode |
| Arbitrary code in installed skills | /guild audit (this command) + the trust-source guidance above |
| Meta-skills gaining network access | Meta-skills are filesystem-restricted by convention; any change must be flagged and justified in a PR |
We support the current major release (2.x). Security fixes are
backported one minor version. Pre-release tags (-beta<N>) receive
fixes only through the next pre-release; we do not backport to older
pre-releases.