Repository navigation
Expand file tree
/
Copy path.env.example
More file actions
134 lines (121 loc) · 7.58 KB
/
Copy path.env.example
File metadata and controls
134 lines (121 loc) · 7.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# ─── CodeJury — configuration ───────────────────────────────────────
# Copy to .env and fill in. Everything here has a sensible default except the
# API keys. The app reads this file regardless of the launch directory.
#
# NOTE: almost all of this is also editable at runtime from Settings in the UI
# (admin role). UI-saved values are stored in the DB and override this file;
# this file remains the baseline for anything never touched in the UI.
#
# First boot creates an `admin` account. Set ADMIN_PASSWORD below to choose its
# password, or leave it blank and a random one is printed to the server log once.
# ── LLM providers ─────────────────────────────────────────────────────────
# OpenAI powers the PM + QA agents and synthesizes knowledge-base answers.
# This is the one key you really want set. Get one at https://platform.openai.com
OPENAI_API_KEY=
# Optional: Anthropic key so the Dev/Review agents use the Claude Code CLI.
# If unset, the app uses your host `claude` login, or falls back to OpenAI.
ANTHROPIC_API_KEY=
# Dev (code-writing) agent provider: auto (Claude → OpenAI fallback) | claude | openai
# "auto" is strongly recommended: code-writing is the ONE stage that needs a
# frontier model — small free-tier models reliably fail at precise multi-file
# edits — so Dev uses the Claude Code CLI when it's installed & authenticated
# and falls back to the OpenAI-compatible edit loop otherwise. QA/Review stay
# on a different provider for an unbiased second opinion.
CODING_PROVIDER=auto
CLAUDE_MODEL=sonnet
# ── Knowledge base ────────────────────────────────────────────────────────
# Code graph — the KB's localization + structural engine. On ingest each repo
# is indexed by the external `codebase-memory-mcp` static binary into a
# persistent knowledge graph (definitions, call edges, imports, HTTP routes;
# 158 languages) with BM25 + bundled-embedding search. Deterministic and free.
# Install the binary separately (npm/PyPI/Homebrew/Scoop/release). When absent,
# the KB degrades to a built-in symbol map + git grep.
GRAPH_ENABLED=true
# Binary name on PATH, or an absolute path to it.
GRAPH_BINARY=codebase-memory-mcp
# full = structural + similarity + semantic-embedding edges · moderate =
# structural + similarity · fast = structural only (quickest).
GRAPH_INDEX_MODE=full
# Semantic search — the graph's symbols are also embedded with a local model
# (fastembed/ONNX on CPU: no Docker, no Ollama, no API key) into an embedded
# Qdrant store, then fused with keyword search by weighted RRF. Doubles
# "describe it in English → find the code" recall. Needs `pip install -e
# ".[semantic]"`; without it retrieval is keyword-only.
LOCAL_EMBEDDINGS=true
EMBEDDING_MODEL=nomic-ai/nomic-embed-text-v1.5-Q
QDRANT_PATH=./.qdrant
# How much the semantic channel outweighs keyword search when fused (1 = equal,
# which measures WORSE than semantic alone; 2 is the tuned default).
RRF_DENSE_WEIGHT=2.0
# Optional external Deep Analysis (AST+LLM) precision service
USE_DEEP_ANALYSIS=false
FUNCTIONAL_ANALYSIS_URL=http://localhost:8002
# ── Review jury ───────────────────────────────────────────────────────────
# The Review stage is a JURY: judges review the same change independently and in
# parallel, each on its own model. WHICH judges are seated is edited in the app
# (Settings → Review jury) — it's a roster, not a setting. These are the
# jury-wide knobs.
#
# Off = the classic single reviewer (REVIEW_PROVIDER/REVIEW_MODEL) reviews alone.
JURY_ENABLED=true
#
# How the jury reaches a verdict:
# pair — THE DEFAULT. Two judges whose briefs split the whole review between
# them: one takes requirements/wiring/edge cases/tests, the other takes
# security/architecture/scale. Decided by UNANIMITY and no foreperson —
# both approve, or it goes back to Dev with the dissent attached. Two
# model calls per review round.
# panel — N narrow specialists (correctness, reliability, security,
# architecture, performance, tests) plus a foreperson that merges their
# opinions and decides. Deeper, ~5x a single reviewer.
# Each mode keeps its own roster, so switching back and forth never discards the
# seats you configured for the other one.
JURY_MODE=pair
# Judges polled at once. Lower it if a free-tier provider rate-limits the jury.
JURY_MAX_PARALLEL=4
# Findings a judge reports below this confidence are dismissed rather than sent
# back to Dev as a paid revision round.
JURY_MIN_CONFIDENCE=0.5
# The foreperson (synthesis) stage — PANEL MODE ONLY; the pair decides by rule
# and never calls it. Empty = reuse the Review stage's provider and model. Worth
# a strong model: it's a cheap call (no diff, just opinions) and it decides.
JURY_SYNTHESIS_PROVIDER=
JURY_SYNTHESIS_MODEL=
#
# NOTE ON COST: every seated judge is one LLM call per review round. The default
# pair is 2 calls and no foreperson; a 4-judge panel + foreperson is ~5x a single
# reviewer. Each judge is billed to its own run on the Costs page.
# ── Pipeline limits ───────────────────────────────────────────────────────
# If QA fails or Review requests changes, feedback goes back to Dev and
# QA+Review re-run — up to this many rounds (0 disables the revise loop).
MAX_REVISION_ROUNDS=2
# Skip the paid LLM QA + Review passes when a scope is deterministically
# trivial (one ticket, grep-pinned localization) AND the change passes the
# test gate with zero new failures and a small diff. Any doubt (no runnable
# suite, new failures, bigger diff) falls back to the full QA+Review loop.
FAST_PATH_ENABLED=true
# ── Safety ────────────────────────────────────────────────────────────────
# true → PR stage is a dry-run (logs the PR it would open; never pushes).
# false → really push the branch and open a PR (needs gh + OPEN_REAL_PR=true).
DEMO_MODE=true
OPEN_REAL_PR=true
# Seed demo data on first boot (empty by default).
# Password for the `admin` account created on first boot. Blank → a random one
# is generated and printed to the server log exactly once. There is no default
# password, so an exposed instance can't be taken over by guessing.
ADMIN_PASSWORD=
# ── Optional Jira integration (leave blank to disable) ────────────────────
JIRA_BASE_URL=
JIRA_EMAIL=
JIRA_API_TOKEN=
JIRA_PROJECT_KEY=
# Custom field IDs vary per Jira site (check GET /rest/api/3/field).
# JIRA_STORY_POINTS_FIELDS=customfield_10016
# JIRA_SPRINT_FIELD=customfield_10020
# ── Agent workspace ───────────────────────────────────────────────────────
# Where agent git clones + per-repo test envs live. MUST be a path with NO
# spaces: some repos' tests (e.g. Textualize/rich) assert on rendered file
# paths and fail spuriously under a spaced path — QA then reads that as a
# code failure and burns revision rounds. `~` is expanded to your home directory;
# use a path with no spaces.
REPOS_DIR=~/.codejury/workspace