Config

There is one config file: grimoire.toml. The same filename is used at every level — project, global, and system — and it holds everything: which packages/skills to install, and how you want them applied. Sections inside the file separate the concerns: [[package]] and [dependencies] declare what’s installed, [standards] holds your preferences and compliance thresholds, [core] holds machine-level settings, and [profiles.*] can embed named skill bundles directly in the file.


Override Hierarchy

Grimoire reads three files, in this order. First value found per key wins.

PriorityLevelFileScope
1stProject<project-root>/grimoire.tomlthis project
2ndGlobal~/.config/grimoire/grimoire.toml (respects $XDG_CONFIG_HOME)all projects on this machine
3rdSystem/etc/grimoire/grimoire.toml (%PROGRAMDATA%\grimoire\grimoire.toml on Windows)all users on this machine

Each key resolves independently — a project file can set standards.engineering.practices while the global file supplies standards.profiles, and both apply without conflict.

[core] and [[package]] are user-level only. If a project grimoire.toml sets either, they’re silently stripped and ignored — set them in the global file instead. Everything else ([standards], [dependencies], [profiles.*]) is read normally from the project file.

There’s no separate “personal, gitignored” file — one project file, committed. If you want a preference that only applies to you, set it in your own global grimoire.toml (~/.config/grimoire/grimoire.toml), or ask your AI assistant to pin it for the current conversation only (see Session Pin below — this is a convention some skills follow, not something the grimoire binary itself reads).


Key Reference

[standards] — top-level

KeyTypeDescription
profilesstring[]Activate skill bundles by name — resolved via profile lookup
extendsstring[]Inherit [standards] config from an installed package or one of its presets (<package-name> or <package-name>/<preset>)
report-pathstringWhere grimoire check writes its report
staleness-daysnumberHow many days before a compliance report is considered stale
excludestring[]Glob patterns for files grimoire check should skip

[standards.<domain>] / [standards.<domain>.<subdomain>]

KeyTypeDescription
practicesstring[]Ordered skill/practice hints for this domain — first entry wins conflicts
disabledstring[]Skill names to suppress unconditionally, even if a profile would include them
fallback"ask" | "skip"Behavior when no matching skill is found: "ask" prompts for clarification, "skip" silently moves on
compliance-thresholdnumberMinimum overall criteria coverage % to pass grimoire check
compliance-threshold-errornumberMaximum allowed error-severity violations — 0 means none allowed

Only one level of subdomain nesting is supported. A subdomain overlays its parent domain per key[standards.engineering.architecture] replaces practices for architecture work specifically, while any key it doesn’t set (e.g. fallback) still inherits from [standards.engineering].

[core] (user-level — set in your global file, not the project file)

KeyTypeDescription
homestringOverride where grimoire stores its data (default ~/.grimoire)
agentsstring[]Pin specific agent targets instead of auto-detecting
install-mode"symlink" | "copy"How skill files are placed into agent directories
update-concurrencynumberMax concurrent package updates (default 8; 0 = unlimited)

[[package]] (user-level, table array)

KeyTypeDescription
namestringYour identifier for this package, e.g. "official", "my-team"
urlstringGit URL, owner/repo[@version] shorthand, or a local path
officialbooleanMarks the STANDARD.md-compliant official package — exactly one entry should set this
prioritynumberHigher resolves first; unset defaults to 100 for the official package, 50 otherwise
enabledbooleanfalse skips this package in resolution without removing the entry

registry is accepted as a legacy alias for the same table — if you have an older [[registry]] block it still works, but [[package]] is the current name. Each enabled package can ship its own grimoire.toml with its own [standards] — those are loaded as a base layer beneath yours, which is how standards.extends reaches into an installed package’s defaults.

[profiles.<name>] (inline profiles)

A profile can be embedded directly in grimoire.toml instead of living in its own file — same fields as a standalone profile (description, tags, extends, skills, exclude, compliance-threshold, compliance-threshold-error; see Practice Profiles for the full field reference). Grimoire checks for a file-based profile first and falls back to an inline [profiles.<name>] definition if none exists.


Examples

Global defaults

Applies to every project on this machine.

# ~/.config/grimoire/grimoire.toml
[standards]
profiles = ["oop"]

[standards.engineering]
practices = ["Google Engineering Practices"]

[standards.engineering.testing]
practices = ["apply-tdd"]

[standards.law]
practices = ["ABA Model Rules"]
fallback = "ask"            # always ask before applying a law skill — don't guess jurisdiction

Project config

Committed to the repo. Every team member gets the same baseline.

# grimoire.toml (project root)
[standards]
profiles = ["clean-architecture", "tdd"]   # two profiles — clean-architecture wins conflicts

[standards.engineering]
practices = ["Google Engineering Practices"]
compliance-threshold = 75           # 75% overall coverage to pass CI

[standards.engineering.architecture]
practices = [
  "apply-solid-principles",
  "apply-law-of-demeter",
  "apply-domain-driven-design"
]
compliance-threshold = 80           # architecture held to a higher bar
compliance-threshold-error = 0      # zero tolerance for error-severity findings

[standards.engineering.testing]
practices = ["apply-tdd"]
fallback = "skip"                   # if no exact test skill matches, skip silently

Multi-domain project (startup)

A project spanning engineering, legal, and finance — each domain has its own standard:

# grimoire.toml (project root)
[standards]
profiles = ["lean-startup"]

[standards.engineering]
practices = ["Google Engineering Practices"]
compliance-threshold = 70           # early-stage: 70% is the bar

[standards.law.contracts]
practices = ["review-saas-contract", "audit-gdpr-compliance"]
compliance-threshold-error = 0      # legal errors are always blocking

[standards.finance.personal-finance]
practices = ["CFA Institute standards"]

[standards.writing.copywriting]
practices = ["apply-aida-framework", "write-value-proposition"]

Session Pin (conversational-only)

Some meta skills (like pin-best-practice-preference) can agree to prefer a practice for the rest of the current conversation without writing to any file — a purely conversational convention, not a mechanism grimoire.toml’s loader participates in:

User: For this session, use Facebook's engineering practices instead of Google's.

Claude: Using Facebook Engineering Standards for this conversation.
        Want this saved permanently? [y] global  [p] project

If you confirm, the AI assistant writes it to your global or project grimoire.toml — nothing is persisted until then.


How Layers Compose

Given this setup:

~/.config/grimoire/grimoire.toml          [standards] profiles = ["oop"]
                                          [standards.engineering] practices = ["Google"]

grimoire.toml (project root)              [standards.engineering.architecture] practices = ["SOLID", "LoD"]
                                          [standards.engineering.architecture] compliance-threshold = 80
                                          [standards.engineering] fallback = "ask"

The resolved spec for engineering.architecture work:

KeyValueSource
standards.profiles["oop"]global
standards.engineering.practices["Google"]global (no project override for this key)
standards.engineering.architecture.practices["SOLID", "LoD"]project
standards.engineering.architecture.compliance-threshold80project
standards.engineering.fallback"ask"project

standards.engineering.architecture practices do not fall back to standards.engineering practices — they replace them for architecture-scoped work. Other keys not set at the subdomain level do inherit from the domain level.


Guided Management

Use skills instead of editing TOML directly:

  • /configure-grimoire — view, edit, and validate your grimoire.toml settings
  • /pin-best-practice-preference — pin a preference when two practices conflict; choose session, project, or global scope
  • /resolve-best-practice-conflict — resolve contradictions between two installed skills and record the priority automatically

  • profiles.md — how profiles resolves via depth-anywhere glob matching, the profile file schema, inline [profiles.*] definitions
  • bpdd.md — compliance thresholds in the BPDD cycle, CI gating, incremental mode