Please report security issues privately via GitHub Security Advisories rather than opening a public issue. Expect an initial response within a few days.
feature-loop runs claude --dangerously-skip-permissions, which removes Claude Code's
approval prompts. This is only safe inside the container, whose isolation bounds the
blast radius — never run the engine that way directly on a host you care about.
- No secrets are baked into images;
ANTHROPIC_API_KEYis passed at runtime only. - The agent-skills plugin is installed from a pinned commit (
AGENT_SKILLS_REF). gitleaksruns in pre-commit and CI to catch committed secrets.- The overlay creates a non-root user; Claude refuses skip-permissions as root.
- The target repo's
.featureloop— it is sourced as bash before anything enters the container, so any code in it runs on your host. Treat trust in.featureloopas equal to trust in the target repo. Pass--no-configto skip sourcing when running against an unfamiliar repo. - The base image you bring (
--image/FL_IMAGE/FL_DOCKERFILE) —docker buildruns itsRUNlines as root inside the build container.TICKET,SLUG, and image refs are validated to block shell- and Dockerfile-injection, but a malicious base image is still a base image. - The agent-skills plugin at the pinned
AGENT_SKILLS_REFcommit. Bumping that arg is a deliberate decision; consider reviewing the diff first. - The Claude CLI at the version installed by
npm install -g @anthropic-ai/claude-codeinside the overlay. In CI, the CLI is instead pinned via a tracked lockfile: thevalidate-pluginjob installs fromtools/package.json(npm --prefix tools ci) rather than pullinglateston every run, so a compromised release can't execute against PR builds unnoticed.tools/package.jsonis the source of truth for that pin and dependabot bumps it weekly.
- Bind-mount the repo into the container
read-write(/workspace). Agents commit to the feature branch on your behalf — that is the point. The loop never pushes and never auto-merges; you review and push. - Write under
tasks/and.worktrees/and add both to.git/info/excludeso the artefacts don't leak into commits. - Run
make/ yourFL_GATESwith the container's egress to the internet. If your gates echo secrets (e.g.env, a test printing a database URL), the redirected output is captured intasks/logs/gates-*.log. Redact secrets in gate output; remove the worktree (or runmake clean) when finished.
- It does not exfiltrate your
ANTHROPIC_API_KEYto anywhere except the Anthropic API (the key is passed only via the-eenv to the run container). Any process inside the container — including the pinned agent-skills plugin — can read that env, so trust in the in-container code is trust in that exact pinned commit.
The latest main is supported. Pre-1.0, there are no backports.