Skip to content

Configuration

Configuration lives at ~/.config/postlyra/config.json, written with mode 600 because it holds your API token.

KeyDefaultMeaning
apiUrl"https://api.postlyra.com"The Postlyra API base URL. POSTLYRA_API_URL overrides it for one invocation.
token""The API token from postlyra login. Never commit or share this file.
brand""The brand this machine mines into, as a brand id from postlyra brands. Sent as the X-Postlyra-Brand header.
brandName""Display only.
folders[]Paths to scan. Each entry is either a git repo itself or a parent folder holding several repos one level down. ~ expands to your home directory.
exclude[]Glob-ish patterns matched against the repo label, e.g. */website. * matches within one path segment only.
vault""Optional path to a notes folder. It only needs a 0-inbox/ directory. Leave empty to mine commits only.
days7Default mining window. Bounds vault notes by modification time as well as commits by date.
maxIdeas8How many ideas one run asks for, and the hard cap on what gets pushed.
allBranchestrueWhen true, git log --all is used so commits on other branches are included.

Environment variables

VariableMeaning
POSTLYRA_API_URLOverrides the configured API URL for one invocation. Always wins.
ANTHROPIC_API_KEYFallback AI backend when the claude CLI is not on your PATH.

A full example

json
{
  "apiUrl": "https://api.postlyra.com",
  "token": "1|AbCdEf...",
  "brand": "0f8fad5b-d9cb-469f-a165-70867728950e",
  "brandName": "My Brand",
  "folders": ["~/Sites/myproject", "~/code"],
  "exclude": ["*/website"],
  "vault": "~/Sites/second-brain",
  "days": 7,
  "maxIdeas": 8,
  "allBranches": true
}

folders

Each entry is either a git repo itself (it has a .git directory) or a parent folder holding several repos one level down.

~/Sites/                      <- configure this
  myproject/.git              -> labelled "Sites/myproject"
  website/.git                -> labelled "Sites/website"

A folder that is a repo itself is labelled by its own name. ~ expands to your home directory.

The label is the only thing about a repo that reaches Postlyra. Not the path, not the remote, not the contents.

exclude

Glob-ish patterns matched against the label. * matches within one path segment only.

PatternMatchesDoes not match
*/websiteSites/websitea/b/website
Sites/*Sites/myprojectOther/myproject
scratchscratchSites/scratch

vault

Any folder of markdown. It only needs a 0-inbox/ directory. Two things get mined from it:

  • Every 0-inbox/*.md note modified inside the window, first couple of lines each.
  • Every bullet in 0-inbox/content-inbox.md, the file you dump one-liners into.

The inbox file is a list you append to forever, so the file cannot be the unit. Each bullet is mined separately.

A vault with no 0-inbox/ is skipped with a warning rather than an error. Leave vault empty, or pass --no-vault, to mine commits only.

days

The mining window. It bounds vault notes by modification time as well as commits by date. --days N overrides it for one run.

maxIdeas

How many ideas a run asks the AI for, and the hard cap on what gets pushed. --max N overrides it.

Lower is often better. --max 3 tends to produce three usable ideas, where --max 12 produces three usable ones and nine you will dismiss.

allBranches

When true, git log --all is used, so commits on branches other than the checked-out one are included. Set it false if you work in throwaway branches you would rather not mine.

Per-repo caps

Not configurable, but worth knowing: at most 60 commits per repo per run, 40 vault notes, and 60 inbox bullets. A window that exceeds those is truncated newest-first.

The token

token is your Postlyra API token. The file is written with mode 600. Never commit it or share it. Revoke it from your profile, under API tokens, if it leaks.

Postlyra, by MAVA Design