Skip to main content

Configuration

know-code merges settings from two JSON files (repo wins over home) and a few environment variables.

know-code config # human-readable effective settings
know-code config --json # machine-readable (paths, quiz scope, attest status)

Files

PathCommitted?Purpose
~/.know-code/config.jsonNo (your machine)Optional defaults for all repos
.know-code/config.jsonNo (gitignored)Per-developer repo settings; created by know-code init
~/.know-code/attest/<repoId>/NoPassphrase-encrypted Ed25519 keys + meta.json (never in repo config)

Each developer runs know-code init and know-code attest-init on their machine. Nothing under .know-code/ except committed hook scripts should be shared via git.

Config fields

FieldTypeDefaultSet by init?Description
levellite | standard | deepstandard--levelQuiz difficulty and minimum question count
baseBranchstringmain--base-branchBranch used for merge-base and CI alignment
requireTrailerbooleanfalse--require-trailerWhen true, local/CI verify expects Know-Code-Verified trailers
rangeModeauto | index | rangeautomanual JSONHow quiz hash scope is chosen (see below)
rangeSealreceipt | rewritereceiptmanual JSONDefault range seal behavior when --rewrite omitted
requireAttestbooleantruemanual JSONWhen true, taught / grade / pass / range seal need Ed25519 seals

rangeMode

ValueQuiz hash
autoRange cumulative hash when know-code range begin session is active; otherwise index hash (empty-tree → index tree)
indexAlways index hash (single-commit / staged-only workflow)
rangeAlways range hash from merge-base (even without an active session)

rangeSeal

Valueknow-code range seal
receiptWrites signed .know-code/range-seal.json; HEAD should carry trailer for CI
rewriteSame receipt + rewrites commit messages in range with Know-Code-Verified: <hash> (requires git push --force-with-lease)

CLI flag range seal --rewrite overrides config for that invocation.

requireAttest

When true (default), agents cannot forge taught.json, grade.json, gate.json, or range-seal.json without your attest passphrase. Set false only for local experiments — not recommended for production dogfooding.

Environment overrides

VariableOverrides
KNOW_CODE_LEVELlevel
KNOW_CODE_ATTEST_PASSPHRASENon-interactive attest sealing (human terminal only; denied in agent hooks)
KNOW_CODE_ATTEST_HOMEDirectory for ~/.know-code/attest (default ~/.know-code/attest)
KNOW_CODE_HOMEDirectory for home config (default ~/.know-code)
KNOW_CODE_OVERRIDE=1Emergency bypass after know-code override on a TTY (denied in agent hooks and CI)
KNOW_CODE_QUIZ_PORTDefault port for know-code ask
KNOW_CODE_QUIZ_TIMEOUTSeconds to wait for browser quiz (default 1800)

Example home config

{
"level": "standard",
"rangeMode": "auto",
"rangeSeal": "receipt",
"requireAttest": true
}

Example repo config (local, gitignored)

{
"level": "standard",
"baseBranch": "main",
"requireTrailer": true,
"rangeMode": "auto",
"rangeSeal": "rewrite",
"requireAttest": true
}

init flags

know-code init \
--level standard \
--base-branch main \
--require-trailer \
--agents claude,cursor,codex \
--workflow

init writes .know-code/config.json, updates .gitignore to ignore .know-code/, and installs git pre-commit/pre-push hooks. It does not set rangeMode, rangeSeal, or requireAttest — add those manually or via home config.