Configuration
The .lore directory
Three things, all written by lore init and all yours to edit: the schema of note types, a template for each type, and the workflow the agent skills follow.
The schema
.lore/schema.yml at the repo root says where notes live, what to ignore, and which types of note exist. This is the default, with every option shown:
notes: docs
ignore: [test/fixtures/**] # globs excluded everywhere
types:
Spec:
dir: docs/specs # notes here are Specs unless they say otherwise
format: md # or org: what lore new writes
fields:
status: { enum: [draft, accepted, retired], required: true }
Decision:
dir: docs/decisions
id: "{n:4}" # lore new numbers these 0001, 0002, ...
summary: Decision # the summary comes from the "## Decision" section
fields:
status: { enum: [proposed, accepted, superseded], required: true }
supersedes: { link: Decision, many: true }
Effort:
dir: docs/efforts
freeze: [specs] # fields lore freeze follows
fields:
specs: { link: Spec, many: true, required: true }
status: { enum: [planned, active, done] }
Types
Fields
Each field can be required, limited to an enum, or a link to another type, optionally many. The first value of a status enum is the one lore new starts a note with.
Say your team wants an owner on every decision, and a Runbook type:
Decision:
dir: docs/decisions
id: "{n:4}"
summary: Decision
fields:
status: { enum: [proposed, accepted, superseded], required: true }
supersedes: { link: Decision, many: true }
owner: { required: true }
Runbook:
dir: docs/runbooks
fields:
status: { enum: [current, stale] }
service: { link: Spec }
From then on, lore check reports any decision without an owner, and lore set refuses a runbook whose service is not a Spec:
lore check
docs/decisions/0001-hard-expiry.md:1: Decision needs 'owner'
docs/decisions/0002-rotating-refresh-tokens.md:1: Decision needs 'owner'
docs/decisions/0003-money-is-integer-cents.md:1: Decision needs 'owner'
8 notes, 2 citations: 3 problems
lore new Runbook "Restart auth"
created docs/runbooks/restart-auth.md
lore set runbook/restart-auth service=decision/0002
lore set: docs/runbooks/restart-auth.md: 'service' links to decision/0002-rotating-refresh-tokens, a Decision; expected a Spec
lore set runbook/restart-auth service=spec/auth
updated docs/runbooks/restart-auth.md
service: "[[spec/auth]]"
Templates
lore new fills .lore/templates/<Type>.md, or .org for an Org type, replacing {{title}}, and adds the type and first status as fields. The default Decision template:
# {{title}}
## Context
## Decision
## Consequences
A type with no template gets a note with just its title.
WORKFLOW.md
.lore/WORKFLOW.md is the project’s version of the flow. Every lore-* skill reads it first, and where it disagrees with the skill, it wins. Its Size section says what counts as small work, which skips the flow.
Without a schema
With no .lore/schema.yml, lore uses the git root and docs/, and still checks links, citations and anchors. It just has no types to check fields against, and lore next has no efforts to read.