Configuration
Configuration lives at ~/.config/postlyra/config.json, written with mode 600 because it holds your API token.
| Key | Default | Meaning |
|---|---|---|
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. |
days | 7 | Default mining window. Bounds vault notes by modification time as well as commits by date. |
maxIdeas | 8 | How many ideas one run asks for, and the hard cap on what gets pushed. |
allBranches | true | When true, git log --all is used so commits on other branches are included. |
Environment variables
| Variable | Meaning |
|---|---|
POSTLYRA_API_URL | Overrides the configured API URL for one invocation. Always wins. |
ANTHROPIC_API_KEY | Fallback AI backend when the claude CLI is not on your PATH. |
A full example
{
"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.
| Pattern | Matches | Does not match |
|---|---|---|
*/website | Sites/website | a/b/website |
Sites/* | Sites/myproject | Other/myproject |
scratch | scratch | Sites/scratch |
vault
Any folder of markdown. It only needs a 0-inbox/ directory. Two things get mined from it:
- Every
0-inbox/*.mdnote 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.