Groundrule

io.github.Metricall-AI-LabPublished by GitHub account Metricall-AI-Labv0.23.1Updated Oct 29, 2026

Your repository's engineering standards for coding agents: rules per file, CI check, rule proposals.

VerifiedSTDIODesktop onlyKnowledge & MemoryDeveloper Tools

Overview

AI-generated overview

Serves a repository's engineering standards to coding agents over MCP, so they can look up applicable rules, check their own changes, and propose new rules.

What you can do
  • List the standards in effect in the repository, so the agent follows them
  • Look up the rules that name the files about to be changed, by path or language, blocking ones first
  • Run the same check CI runs on the agent's uncommitted changes, a base ref, or all files, with where and how to fix each finding
  • Propose a rule to the organization's review inbox when a correction should apply to everyone
When to use it
Useful when a repository keeps its engineering standards as YAML in git and you want coding agents to read the applicable rules before editing and verify their changes before finishing. It is aimed at teams already using Groundrule for local and CI checks.
Requirements
Runs as a local stdio process via npx from the npm package @groundrule/cli, started with the mcp subcommand. The list, rules-for and check tools work offline without an account; proposing a rule needs a repository connected to the Groundrule platform and a prior browser sign-in.
Before you install
The check tool reports per-rule counts to the connected workspace when the repository has a platform config and the machine is signed in; this can be turned off with platform.reports: none. Proposing a rule sends the rule text, your reason, and an optional file and line to the platform, and nothing changes until a reviewer accepts it. Sign-in credentials are stored locally.

Installation

In SourceWeft

  1. Open Groundrule in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

Groundrule

[npm] [CI] [License] [Docs]

Your engineering standards, taught to every coding agent and checked on every PR.

Write a standard once, as a small YAML file in git. Groundrule:

  • teaches your coding agents. It generates AGENTS.md, CLAUDE.md, Cursor rules, and Copilot instructions containing only the standards that apply, without touching what you wrote by hand. An MCP server and hooks let Claude Code, Codex, Cursor and Copilot follow action policies before each tool call and check their own changes before they finish.
  • checks the code. It runs locally and in CI against your changes or the whole repository, with deterministic checks (files, patterns, dependencies, imports, layout, metrics, change sets), Semgrep, and optional AI checks on the Groundrule platform.
  • tells you why. Every finding names the standard, shows the evidence, says how to fix it, and labels whether it came from a deterministic check or AI.

Everything in this repository works offline and without an account. The Groundrule platform adds a shared rulebook, staged rollout, hosted checks and a compliance report on top of it.

Status: 0.x. Groundrule checks its own repositories with it. The document format is groundrule.dev/v1alpha1 and may still change before 1.0; changes are announced in Discussions.

See it in 60 seconds

[Groundrule in 60 seconds]

Quick start

Thirty seconds, no account, nothing leaves your machine:

bash
npx @groundrule/cli init      # detects your stack, picks packs, writes .groundrule/config.yamlnpx @groundrule/cli sync      # writes AGENTS.md / CLAUDE.md / Cursor / Copilot instructionsnpx @groundrule/cli check     # checks your uncommitted changes
text
 groundrule check · 11 standards · 2 files changed
 ✕ TS-003  No eval or new Function   BLOCKER · deterministic (regex)   src/app.ts:3     eval or new Function in application code     3: return eval(input);   → Parse the input instead: JSON.parse, a schema, or a lookup table of allowed operations.   → groundrule explain TS-003
 Failed  ✓ 7 passed  ✕ 1 failed  ◇ 2 guidance  · 0.1s

A standard

yaml
apiVersion: groundrule.dev/v1alpha1kind: Standardmetadata:  id: DEP-008  title: Use the platform HTTP client  type: forbidden-tech  owner: team:platformspec:  severity: warning  requirement: Backend services must use @acme/http-client for outbound HTTP calls.  examples:    forbidden: ["import axios from 'axios'"]  checks:    - evaluator: dependencies      forbid: [axios, got, node-fetch]      allowInstead: ["@acme/http-client"]

More in examples/foundation.

Commands

CommandWhat it does
groundrule initCreate .groundrule/config.yaml with packs for your stack
groundrule sync [--check] [--upload]Write (or verify) coding-agent instructions; --upload reports what the repository delivers to agents
groundrule check [--base <ref>] [--all]Check changes, a branch, or everything. -f json|sarif|markdown, --summary <file>
groundrule standardsList the standards in effect
groundrule keys generateCreate a signing key pair for check results (RFC 0008)
groundrule verify <run.json> --key <public.pem>Check a run's signature offline
groundrule explain <ID>Why a standard exists, examples, how to comply, exceptions
groundrule doctorCheck configuration, tools, and agent files
groundrule packsList bundled packs
groundrule scan [--json] [--upload]Observe this repository against the whole catalog: stack, agent files, tools, and how every rule would do today. Changes nothing
groundrule propose "<rule>"Propose a rule for your team to review on the platform. --why, --example, --file path[:line]
groundrule mcpServe your standards to coding agents over MCP, let them check their changes and propose rules (see below)
groundrule hooks [--agents <list>] [--remove]Have Claude Code, Codex, Cursor, or Copilot follow action policies before each tool call and run the check when they finish a task (see below)
groundrule loginSign in to your organization on the Groundrule platform (browser approval)
groundrule whoami / logoutShow or remove (and revoke) your saved sign-in

Exit codes: 0 passed, 1 failed, 2 configuration or usage error.

Using the Groundrule platform (optional)

Everything above works offline. If your organization manages its standards on the Groundrule platform, connect a repository instead of listing packs:

bash
npx @groundrule/cli login               # approve this computer in your browsernpx @groundrule/cli init --org acme     # writes platform: { org: acme } to .groundrule/config.yamlnpx @groundrule/cli sync                # your organization's rules, with every customization

groundrule scan --upload shares a scan with your organization so it can see which rules fit each repository. It also imports what you already have as proposals: instructions from AGENTS.md, CLAUDE.md, Cursor, and Copilot files; ESLint, Biome, Ruff, golangci-lint, Checkstyle, PMD, and tsconfig settings that match catalog rules; CODEOWNERS; and the architecture the code already keeps, as proposed boundary rules with the files that would fail each today (RFC 0011; use --no-import to leave these out). Reports contain counts and at most three one-line, redacted snippets per rule (none for security rules, none at all with --no-snippets); --json shows exactly what would be sent. When uploading, the scan also tests your organization's own rules that have checks, drafts included, so you see their impact before publishing them.

groundrule check --upload sends the result to your organization as a compliance record (RFC 0007): which rules were in effect (as a digest anyone with the same rules can recompute), each rule's version, rollout stage and whether it could fail the change, the exceptions that applied, and which coding agents the change's commits declare, from Co-Authored-By trailers and bot authors (counts only; never commit messages or email addresses). Agent counts are a declaration, not proof; leave them out with --no-authorship.

With a signing key in CI (groundrule keys generate, then the private key as GROUNDRULE_SIGNING_KEY), every uploaded run is signed with Ed25519 (RFC 0008); groundrule verify proves later, offline, that a run wasn't altered. The signature covers everything but code snippets. In GitHub Actions, --sigstore signs with the job's own identity instead of a key (RFC 0009, needs id-token: write; opt-in, since the identity and the result's hash go to Sigstore's public log).

What each command takes from the platform depends on the rule's rollout stage: sync writes rules at Teach, Advise, and Enforce into your agent files; check runs Enforce rules as set and Advise rules as warnings. Rules your repository defines in .groundrule/standards/ still apply. In CI, set GROUNDRULE_TOKEN to a token from Settings → API tokens. Sign-ins are saved in ~/.config/groundrule/credentials.json, readable only by you.

Coding agents (MCP)

groundrule mcp is a Model Context Protocol server (stdio) with four tools:

  • list_standards: the rules in effect in the repository, so the agent follows them. Works offline.
  • rules_for: the rules that name the files the agent is about to change (by path or language), blocking first, with how to comply (ADR 0010). The server's instructions tell the agent to call it before editing a file; rules that apply everywhere stay in the agent file. Works offline.
  • check: the same check CI runs, on the agent's uncommitted changes (or since a base ref, or all files). It lists only what the change introduced, with where and how to fix it, so the agent fixes it before it finishes. Works offline. In a repository connected to its workspace, the counts per rule are reported to the workspace (see below).
  • propose_rule: when you correct your agent and say (or agree) that it should apply to everyone, it proposes the rule to your organization's review inbox, with where it came up. Nothing changes until a reviewer accepts it. Needs a connected repository and groundrule login.

Add it to your agent once per repository or user:

bash
claude mcp add groundrule -- npx -y @groundrule/cli mcp          # Claude Code
json
{ "mcpServers": { "groundrule": { "command": "npx", "args": ["-y", "@groundrule/cli", "mcp"] } } }

The JSON form goes in .cursor/mcp.json for Cursor, .vscode/mcp.json for VS Code (as servers), or your agent's MCP settings. Proposals carry the rule, your reason, and a file and line if given; nothing else from the repository is sent.

Hooks: before each action, and when the agent finishes

groundrule hooks adds two hooks to the agent's project settings. A before-tool hook decides what the agent is about to do against your action policies, and a stop hook runs the check every time the agent finishes a task, whether or not it remembered to:

bash
npx @groundrule/cli hooks        # Claude Code, plus Codex, Cursor and Copilot if the repository uses them
AgentFileBefore an actionWhen the check fails
Claude Code.claude/settings.jsonallow, ask or deny, with the reason; the rules for a file ride along before an edit (ADR 0010)The agent is stopped from finishing and told what to fix
Codex.codex/hooks.jsonallow or deny (ask is delivered as deny, with the reason); each developer trusts the hooks once with /hooksThe same
Cursor.cursor/hooks.jsonshell commands, MCP calls and file reads (ask on a read is deny)What to fix is sent as a follow-up message
Copilot (CLI and cloud agent).github/hooks/groundrule.jsonallow, ask or deny (the cloud agent treats ask as deny)The agent takes another turn with what to fix

Existing settings and hooks are kept. Without an action policy the before-tool hook answers nothing, and without a Groundrule configuration neither hook does anything. The stop hook asks once per turn, so an agent that can't fix something isn't kept going forever. Commit the files so every developer's agent runs them; --remove takes the hooks out again.

What agents may do (action policies)

A standard says what the code must be. An action policy (RFC 0017) says what the agent may do: which shell commands, edits, reads, fetches and MCP calls it may run on its own (allow), which a person confirms first (ask, the default), and which are refused (deny). It lives next to your standards, with the same identity, scope, owner, exceptions and rollout stages:

yaml
apiVersion: groundrule.dev/v1alpha1kind: ActionPolicymetadata:  id: ACT-001  title: Never force-pushspec:  severity: blocker  effect: deny  requirement: Never force-push. Ask the developer, or push to a new branch.  when:    actions: [shell]    commands: ["git push --force*", "git push -f*"]

The before-tool hook decides it in the agent's own permission flow, on your computer, in milliseconds, and the reason names the policy and what to do instead. A matching exception in .groundrule/exceptions.yaml lifts it; a wrong decision never holds up the agent, because any problem means no decision. groundrule:packs/agent-actions ships ten policies to start from: force-pushes, history rewrites, hook bypass, piping downloads into a shell, publishing, infrastructure changes, elevated privileges, deleting outside the repository, secret files and CI workflows. Agent files get a section "What you may not do alone", so an agent without the hook knows too.

What the workspace learns. In a repository with platform: in its config, when this computer is signed in, the hook and the MCP check tool send the workspace a report after the agent has its answer (RFC 0012): the agent, which rules found something and how many times, how many files and rules were checked, and whether the agent was stopped. Never a path, a line, a snippet, or anything the agent or you wrote. It is sent with a two-second timeout and every failure is ignored, so it can't slow the agent or change the check. The workspace uses it to show how much is caught before a commit exists. platform.reports: none turns it off; groundrule doctor says which applies. Offline repositories send nothing.

Checks

EvaluatorSourceUse it for
filesdeterministicRequired or forbidden files (CODEOWNERS, .env)
regexdeterministicForbidden or required patterns in code
dependenciesdeterministicForbidden packages (npm, Maven, Gradle, pip, Go, Cargo)
change-setdeterministicRules about a change ("entity changes need a migration")
semgrepstatic analysisSemgrep rules you already have
llmAIA question about the change, answered by Groundrule's hosted checks (RFC 0013); advisory, never fails a change. Reported as not run locally and in CI

Packs

groundrule packs lists the bundled packs (security, TypeScript/Node, React, Python, Java/Spring, Go, Docker, Kubernetes, Terraform, GitHub Actions, HTTP APIs, testing, AI agent hygiene, and what agents may do). Your organization's own packs work the same way: github:your-org/engineering-standards//packs/backend@v1.

GitHub

Metricall-AI-Lab/groundrule-action@v1 checks every pull request, writes a job summary, and uploads findings to code scanning. Source in action/.

Development

bash
pnpm installpnpm check

See CONTRIBUTING.md. Groundrule checks itself: see .groundrule/.

License

Apache-2.0. "Groundrule" is a trademark; see GOVERNANCE.md.

Source: README.md at commit b815665

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.23.1LatestOct 29, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts