Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
226 commits
Select commit Hold shift + click to select a range
8554d18
chore: document post-merge back-merge procedure in RELEASING.md
claude May 17, 2026
157aedd
Use nextest for CI test execution
codex May 17, 2026
fd806dd
fix: Dashboard responsiveness breaks at mid-width: overflowing crew s…
May 17, 2026
29b9000
fix: Dashboard: collapse two-column layout to single column at ~1000p…
May 17, 2026
61f30cc
[ORB-00124] Derive planning duel identity from metadata
May 17, 2026
04bfd3e
refactor: Refactor: split orbit-store v2_store.rs into focused submod…
May 17, 2026
f3143d8
refactor: Refactor: split orbit-store sqlite/task_registry.rs into fo…
May 17, 2026
990d9f8
refactor: Refactor: split orbit-store v2_bundle.rs into focused submo…
May 17, 2026
78388d9
refactor: Refactor: split orbit-mcp adapter.rs into focused submodule…
May 17, 2026
e54e577
refactor: Refactor: split orbit-store learning_store/api.rs into focu…
May 17, 2026
e2a56aa
feat: Make `orbit run duel-plan` submit non-blocking by default [ORB-…
May 17, 2026
c8157e7
refactor: Refactor: split orbit-knowledge graph/sqlite_index.rs into …
May 17, 2026
21fc513
refactor: Refactor: split orbit-exec macos_sandbox.rs into focused su…
May 17, 2026
99ddbd8
refactor: Refactor: split orbit-engine automation/vcs/pr.rs into focu…
May 17, 2026
37dae59
refactor: Refactor: split orbit-core command/job/run.rs into focused …
May 17, 2026
995040b
chore: Make the Orbit workspace pass the full `make ci` gate cleanly …
May 17, 2026
98f9c0d
[ORB-00128] Fix Linux clippy import in sandbox tests
codex May 17, 2026
eaa5e8d
feat: Add orbit-guide skill for first-time user onboarding [ORB-00126]
May 17, 2026
ab6d8dc
docs: Add injection-layer coverage matrix to project-learnings
May 17, 2026
f0c10ce
docs: Add learning entry for Orbit audit-event queries L20260517-9
danieljhkim May 17, 2026
509f362
docs: Add learning entry for Orbit write tools and sandbox policy L20…
danieljhkim May 17, 2026
0bee09a
fix: Fix sandbox write roots for activity-exposed Orbit tool stores […
May 17, 2026
fc0ea32
fix: Guard orbit.task.start at the agent_implement activity instructi…
May 17, 2026
a392498
refactor: Remove `orbit design check` decay-check surface (YAGNI) [OR…
May 17, 2026
31a2aa1
docs: add distribution-boundary learning L20260517-11
May 17, 2026
9f2e344
docs: add ADR-0149 + L20260517-9 inline source citations [ORB-00132]
May 17, 2026
e12b1aa
docs: teach orbit-adr and orbit-learning skills to close the citation…
May 17, 2026
c339c6c
[ORB-00134] Resolve friction side effects when tasks reach done
codex May 17, 2026
c952ccd
docs: Add ADR-0165 to remove per-PR design-doc decay checks
danieljhkim May 17, 2026
959572d
docs: Add learning L20260517-14 — .orbit/config.toml is the knob regi…
May 17, 2026
b2b6f52
docs: Update learning L20260517-9 — clarify the distinction between g…
danieljhkim May 17, 2026
fbc7f46
chore: Stop creating workspace-local `.orbit/orbit.db` at init (canon…
May 17, 2026
2fbdea7
fix: Fix Grok Diagnostics metrics showing zero tokens and tools [ORB-…
May 17, 2026
bdc989d
feat: Apply secret redaction to Orbit artifact write tools [ORB-00138]
May 17, 2026
4f28218
feat: Dashboard audit/diagnostics side panels [ORB-00142]
claude May 18, 2026
21f5ec5
docs(design): convert frontmatter to YAML
claude May 18, 2026
db07046
docs(agent-observations): add observation log with first entry
claude May 18, 2026
0ddb01d
chore: remove stale KNOWLEDGE_BASE.md file
danieljhkim May 18, 2026
da6ac3c
perf: SQL-side aggregation for audit_summary + spawn_blocking [ORB-00…
claude May 18, 2026
ac664f4
refactor: remove avg step duration and p95 wall clock metrics from da…
danieljhkim May 18, 2026
a01fa58
hypothesis: gemini's poor plan-duel performance due to missing agent …
danieljhkim May 18, 2026
15d25e3
[ORB-00144] Group scoreboard dashboard metrics
May 18, 2026
b7d09cc
[ORB-00144] Merge scoreboard dashboard groups
May 18, 2026
5cddf9e
refactor: Spike dashboard JS module split: extract common.js + module…
May 18, 2026
2509a92
fix: Restore scoreboard friction report counts from friction records …
May 18, 2026
fb06190
refactor: Extract dashboard + JSON API into new orbit-dashboard crate…
May 18, 2026
d1c545e
review: address all claude review threads for ORB-00146 (restore lear…
danieljhkim May 18, 2026
38f6c67
Strengthen PLANNING_DUEL_INSTRUCTION with graph-discipline rubric
claude May 18, 2026
34ce5de
docs: add gemini.md
danieljhkim May 18, 2026
5c08011
refactor: Strengthen agent_implement.yaml with scope, duplication, de…
May 18, 2026
03b26a1
feat: Add --planner-a / --planner-b / --arbiter override flags to `or…
May 18, 2026
84e0c43
refactor: Dashboard JS split: extract tasks.js (per-domain split, rou…
May 18, 2026
34d0436
refactor: Teach orbit-review-task to file friction when reviews revea…
May 18, 2026
d9d21fc
feat: Redesign Scoreboard tab UX — current design fragments agent met…
May 18, 2026
cfc88ec
docs: AO-002 observation thread on instruction surface and tool selec…
claude May 18, 2026
4af5206
docs: propose ADR-0167 favoring claude (opus) for planner role
claude May 18, 2026
041e2ef
chore: Update CHANGELOG with breaking changes, new features, fixes, a…
danieljhkim May 19, 2026
d76a22f
chore(ci): resolve ci warnings [ORB-00156]
danieljhkim May 19, 2026
082b1c2
chore: Replace custom TempDir implementation with tempfile crate for …
danieljhkim May 19, 2026
ec89235
refactor: Dashboard JS split: extract audit.js (per-domain split, rou…
May 19, 2026
2918a6a
feat: Rewrite PreToolUse learning-injection hook as `orbit hook preto…
May 19, 2026
88d7c04
chore: Remove orphan orbit-cli dashboard assets [ORB-00161]
May 19, 2026
313322c
feat: Add PreToolUse reminder hook and associated configuration for O…
danieljhkim May 19, 2026
fe3f212
feat: Install PreToolUse learning-injection hooks for Claude/Codex/Ge…
May 19, 2026
b364c4d
feat: Introduce `orbit docs` indexed knowledge base and `orbit-docs` …
May 19, 2026
3b0be77
fix(orbit-docs): unbreak CI for orbit-docs PR [ORB-00163]
May 19, 2026
de4deef
feat: Enhance PreToolUse hooks for Grok and Gemini with orbit-learnin…
danieljhkim May 19, 2026
732ac37
feat: Update PreToolUse hooks in config.toml for Orbit learning remin…
danieljhkim May 19, 2026
ab70ecf
chore: Retire `orbit-design` skill in favor of `orbit-docs` [ORB-00165]
May 19, 2026
4b331c5
refactor: Harden orbit-docs internals: real diff, robust YAML edit, g…
May 19, 2026
52ff60a
docs(orbit-docs): add feature design doc set [ORB-00163]
May 19, 2026
7d12466
fix: Track Gemini learning hook shim for job worktrees [ORB-00171]
May 19, 2026
b105ef2
[ORB-00177] Remove retired orbit-design skill from defaults
codex May 19, 2026
c450004
fix(orbit-dashboard): remove stray `}` causing module parse error in …
May 19, 2026
88abcaa
refactor: Dashboard JS split: extract log-tail.js (per-domain split, …
May 19, 2026
96b9029
fix: Improve dashboard link contrast in task detail markdown [ORB-00170]
May 19, 2026
0d7734d
refactor: Dashboard JS split: extract diagnostics.js (per-domain spli…
May 19, 2026
333389a
refactor: Dashboard JS split: extract router.js (hash routing + tab/s…
May 19, 2026
38f4c85
feat: Wire `orbit docs` retrieval into `task.show --with-context` and…
May 19, 2026
7e043df
refactor: Dashboard asset split: extract inline `<style>` to dashboar…
May 19, 2026
a2ebdc2
refactor: Dashboard JS split: extract scoreboard.js (per-domain split…
May 19, 2026
b327a09
refactor: Dashboard JS split: extract diagnostics.js and router.js (p…
danieljhkim May 19, 2026
f825b5b
refactor: Dashboard JS split: extract runs.js (per-domain split, roun…
May 19, 2026
20f0a53
chore: Update .gitignore to remove .orbit entry and add comment for d…
danieljhkim May 19, 2026
81fa6ca
refactor: Dashboard JS split: extract run-detail.js (per-domain split…
May 19, 2026
f92ab1e
feat: Federate ADRs into docs search [ORB-00179]
May 19, 2026
98afeeb
[ORB-00182] Remove retired orbit-design surface
codex May 20, 2026
07f81b4
chore: Allow bounded implementer scope expansion [ORB-00184]
May 20, 2026
ff40664
fix: Fix dashboard status updates to in-progress returning HTTP 422 […
May 20, 2026
c0a7b19
[ORB-00183] Remove scoreboard CLI command
codex May 20, 2026
629abdd
feat: Display task complexity in web dashboard [ORB-00188]
May 20, 2026
8e4ae47
feat: Fuzzy-match fallback in orbit.graph.search [ORB-00186]
May 20, 2026
129b114
fix: Remove retired ship-auto run subcommand from CLI suggestions [OR…
May 20, 2026
86bcfc0
feat: Add dashboard parity for `orbit metrics` (knowledge, activity, …
May 20, 2026
db464d9
fix: Expose graph search fuzzy fallback through MCP surface [ORB-00195]
May 20, 2026
64f5903
refactor: Remove legacy executor models compatibility shim [ORB-00051]
May 20, 2026
23d8d7b
[ORB-00192] Rename orbit-embed to orbit-search
danieljhkim May 20, 2026
4a400d7
chore: Add learning entry for SQL placeholder replacement in nested f…
danieljhkim May 20, 2026
95dfe3c
chore: Remove `orbit metrics` CLI command (with dashboard parity deci…
May 20, 2026
6e66a4c
[ORB-00198] Encourage complexity assignment in task skill
codex May 20, 2026
eca0c97
[ORB-00197] Remove retired ADR migration surface
codex May 20, 2026
4eaf70f
Update learning entry to clarify usage of --root for worktree-local a…
danieljhkim May 20, 2026
da3946a
refactor: Split Orbit root resolution into shared_root + local_root […
May 20, 2026
555770f
refactor(orbit-cli): drop legacy root aliases from `config show --jso…
claude May 20, 2026
679e099
refactor: Split `orbit semantic` into lifecycle namespace + new `orbi…
May 20, 2026
912ba95
feat: Add ADR-0174 for splitting lifecycle and query search namespaces
danieljhkim May 20, 2026
2d1b165
[ORB-00200] Add global artifact id allocator
codex May 20, 2026
9a5414b
[ORB-00200] Migrate learning ids to L-NNNN
codex May 20, 2026
c79e4c2
[ORB-00204] Rename orbit search flags
codex May 20, 2026
2a0ff1e
refactor: Consolidate per-domain search; add cross-kind --path filter…
danieljhkim May 20, 2026
61601e7
docs: Allocate ADR-0176 + sweep skill / design-doc references [ORB-00…
claude May 20, 2026
3f2c789
[ORB-00201] Add worktree-local artifacts
May 20, 2026
c643dab
Implement ADR-0175: Rename search mode and neighbor flags to align wi…
danieljhkim May 20, 2026
3d63af8
[ORB-00203] Add ADR tags and paths
codex May 21, 2026
bd07955
Implement ADR-0176: Consolidate per-domain search commands into a uni…
danieljhkim May 21, 2026
4d41718
[ORB-00205] Redesign orbit search CLI
May 21, 2026
6141f20
Update learning_id in comments.jsonl for consistency with new ID format
danieljhkim May 21, 2026
df4b3d9
refactor: dashboard: narrow crew dropdown and move complexity+crew in…
May 21, 2026
22b7eed
fix: Record knowledge run metrics for the Metrics / Knowledge dashboa…
May 21, 2026
9548687
[ORB-00206] Add doc corpus embeddings
codex May 21, 2026
95990bc
[ORB-00212] Allow sandboxed Orbit id allocator lock
May 21, 2026
6acfc9d
[ORB-00208] Merge Grok dashboard task detail change
May 21, 2026
8d2fcfd
feat: Dashboard: global task_id resolver in header [ORB-00211]
May 21, 2026
e6c323e
feat: Dashboard: task table column headers + reorder right panel (Det…
May 21, 2026
48e01fb
refactor: Unify index verbs: `orbit semantic index --kind {tasks,docs…
May 21, 2026
1e59aa5
fix: `orbit search` polish: fair `--limit` distribution across kinds …
May 21, 2026
850f586
Add job failure common failures reference
May 21, 2026
48051a0
refactor: drop docs/design/CONVENTIONS.md seeding from orbit init
May 21, 2026
389b779
refactor: Relocate knowledge_stats from orbit-core to orbit-knowledge…
May 21, 2026
ef6995c
feat: Add learning-corpus embeddings: `orbit semantic index --kind le…
May 21, 2026
1a2633c
fix: Increase max_workers in task_auto_pipeline.yaml from 3 to 5
danieljhkim May 21, 2026
a11c170
test: Pin ship fan-out cap [ORB-00218]
May 21, 2026
802f51c
docs: Update testing conventions and introduce per-module tests layout
danieljhkim May 21, 2026
6ee3e4a
refactor: Migrate orbit-agent tests to per-module tests/ layout [ORB-…
May 21, 2026
d8eb09a
refactor: Migrate orbit-mcp tests to per-module tests/ layout [ORB-00…
May 21, 2026
d71c99b
refactor: Migrate orbit-tools tests to per-module tests/ layout [ORB-…
May 21, 2026
d6185cf
refactor: Migrate orbit-dashboard tests to per-module tests/ layout […
May 21, 2026
8c52011
refactor: Migrate orbit-exec tests to per-module tests/ layout [ORB-0…
May 21, 2026
791fe2c
refactor: Migrate orbit-policy tests to per-module tests/ layout [ORB…
May 21, 2026
82d10be
refactor: Migrate orbit-common tests to per-module tests/ layout [ORB…
May 21, 2026
10e579f
refactor: Migrate orbit-knowledge tests to per-module tests/ layout […
May 21, 2026
fb4237f
refactor: Migrate orbit-store tests to per-module tests/ layout [ORB-…
May 21, 2026
499a8eb
feat: Extend orbit.task.update to accept context_files [ORB-00233]
May 21, 2026
66470eb
fix: Skip non-workspace paths in PreToolUse learning hook [ORB-00236]
May 21, 2026
c498522
refactor: Migrate orbit-engine tests to per-module tests/ layout [ORB…
May 21, 2026
d5b492a
feat: Add ADR-corpus embeddings: `orbit semantic index --kind adrs` +…
May 21, 2026
68c41fa
docs: trim CHANGELOG verbosity; pivot release protocol to Breaking + …
claude May 21, 2026
3185265
refactor: Type orbit.graph.pack result payload and drop JSON-key snif…
May 21, 2026
7d54ad3
fix: Re-check task admission before gate dispatch [ORB-00235]
May 21, 2026
030f953
docs: Update test layout documentation to reflect sibling directory s…
danieljhkim May 21, 2026
6941995
refactor: Migrate orbit-search tests to per-module tests/ layout [ORB…
May 21, 2026
21f9172
refactor: Collapse nested test layout to sibling tests/ for orbit-mcp…
May 21, 2026
2aa9a7c
refactor: Collapse nested test layout to sibling tests/ for orbit-age…
May 21, 2026
a1e8978
fix: Make learning ID allocation collision-proof across concurrent wo…
May 21, 2026
c103112
refactor: Collapse nested test layout to sibling tests/ for orbit-exe…
May 21, 2026
999b4e4
refactor: Collapse nested test layout to sibling tests/ for orbit-das…
May 21, 2026
9d12754
refactor: Migrate orbit-cli tests to per-module tests/ layout [ORB-00…
May 21, 2026
9e6303e
fix: Expose orbit-create-task documented fields on orbit_task_add MCP…
May 21, 2026
994ae19
refactor: Collapse nested test layout to sibling tests/ for orbit-sto…
May 21, 2026
e04b4b6
refactor: Migrate orbit-core tests to per-module tests/ layout [ORB-0…
May 21, 2026
809a67d
refactor: Rename learning reindex verb to sync (hard-cut) [ORB-00244]
claude May 22, 2026
2ea22b6
chore: format code
danieljhkim May 22, 2026
9ccf34f
refactor: Migrate orbit-knowledge to per-module sibling tests/ layout…
May 22, 2026
0e18c9c
fix: tolerate stale learning reminders [ORB-00252]
codex May 22, 2026
b413347
refactor: Collapse leftover nested test layout in orbit-tools (task/a…
May 22, 2026
234bc5f
refactor: Collapse leftover nested test layout in orbit-store (invoca…
May 22, 2026
fadf28b
feat: Nudge agents toward context_files on task creation: MCP schema,…
May 22, 2026
93bb118
chore: Remove guideline on using subagents for large tasks in CLAUDE.md
danieljhkim May 22, 2026
813eaa8
refactor: Break up crates/orbit-core/src/command/docs.rs into a comma…
May 22, 2026
3e8e84f
refactor(command): complete sibling test migration for docs/ director…
May 22, 2026
8f871e4
refactor: orbit.task.add: trim schema to 9 fields + model identity (d…
May 22, 2026
61be881
refactor: Dashboard task tab: inline status + crew controls on row, d…
May 22, 2026
ee56111
refactor: consolidate test modules into dedicated test files across r…
danieljhkim May 22, 2026
51264be
refactor: Rename default crews in default-config.toml to family names…
May 22, 2026
bc87616
feat: MCP: ambient session context so workspace can default safely [O…
May 22, 2026
fe04896
fix: Record failed pr_open handoffs on completed task branches [ORB-0…
May 22, 2026
28af73f
[ORB-00257] Fall back to default crew in dashboard tasks
May 22, 2026
c74fa72
refactor: Update crew configurations in config.toml to streamline mod…
danieljhkim May 22, 2026
1bc4050
fix(command): move 'search' command under observe group,
danieljhkim May 22, 2026
230c017
[ORB-00259] Clear stale dashboard crew updates
codex May 22, 2026
4137399
[ORB-00258] Resolve build and clippy warnings
codex May 22, 2026
df0a9ff
[ORB-00258] Fix PR handoff clippy warning
codex May 22, 2026
a8b7f86
style(dashboard): tighten sb-leaderboard borders and zebra-stripe rows
May 22, 2026
7a81869
feat(dashboard): failures-by-tool health card on audit summary
danieljhkim May 22, 2026
624fb4b
refactor: [ORB-00261] [ORB-00260]
danieljhkim May 22, 2026
fe8acd4
fix(dashboard): drop metrics.js include after asset removal [ORB-00261]
May 23, 2026
1d0c797
chore: resolve clippy and ci warnings
danieljhkim May 23, 2026
49c0662
fix: Serve dashboard task artifacts as untrusted content [ORB-00264]
May 23, 2026
f8e6064
fix: Apply env-aware redaction to persisted audit blobs [ORB-00267]
May 23, 2026
933cde4
fix: Bound dashboard run-events JSONL reads [ORB-00268]
May 23, 2026
086383a
fix: Limit dashboard log stream concurrency [ORB-00269]
May 23, 2026
6c33791
fix: Authenticate release installer archives before extraction [ORB-0…
May 23, 2026
06959fc
fix: Address installer review feedback [ORB-00266]
May 23, 2026
514a835
fix: Verify semantic search companion binaries before execution [ORB-…
May 23, 2026
f6020fa
fix: Authenticate semantic companion checksums [ORB-00265]
May 23, 2026
7fc0474
fix: Scope orbit.state tools to the active job run [ORB-00263]
May 23, 2026
34a6687
chore: onboard codegraph
danieljhkim May 23, 2026
2a02c63
fix: Restrict and sandbox v2 agent proc.spawn execution [ORB-00262]
May 23, 2026
e84a866
fix: Close semantic companion freshness-check TOCTOU window [ORB-00271]
May 23, 2026
dc00e5f
review: address PR #415 follow-ups for TOCTOU fix [ORB-00271]
claude May 23, 2026
fd4ac46
feat: Add release signing key rotation support for installers [ORB-00…
May 23, 2026
c8f6d1d
review: address PR #416 follow-ups for installer key rotation [ORB-00…
claude May 23, 2026
d9e659c
refactor: update codegraph commands to use new script for main worktr…
danieljhkim May 23, 2026
08699b1
feat: integrate orbit-file-lock command across multiple configurations
danieljhkim May 23, 2026
97f8d24
chore: Hide ops/maintenance tools from the Orbit MCP tool catalog [OR…
May 23, 2026
ec69581
feat: Add new learning resource L-0039 with associated comments and v…
danieljhkim May 23, 2026
fe45b7a
chore: Update learning resource L-0039 status to superseded
danieljhkim May 23, 2026
2a3aa77
refactor: Migrate hook domain logic from orbit-cli into orbit-core [O…
May 23, 2026
b1a7ce8
chore: tighten team Read() denies and purge committed benchmark runs …
claude May 23, 2026
1fa197f
docs: document Read() override pattern and align ignore rules [ORB-00…
claude May 23, 2026
ab9703a
feat: Hook-driven async steering: surface review-thread asks to execu…
May 23, 2026
364d472
feat: Admin dashboard: bidirectional review-thread message panel [ORB…
May 23, 2026
b742cb3
chore: Re-expose 6 over-hidden tools from MCP_HIDDEN_TOOL_NAMES (corr…
May 23, 2026
157de74
feat: Admin dashboard: bidirectional review-thread message panel [ORB…
May 23, 2026
a7d83b3
fix: Dashboard review-threads panel: hide threads on closed tasks, su…
May 23, 2026
9d26d2d
chore: Mark 15 ops/maintenance tools inactive in the registry and scr…
May 23, 2026
ecd7ded
refactor: Migrate v2 audit / job-runs / sessions JSON stores into glo…
May 23, 2026
e03e65e
[ORB-00279] Flatten orbit-cli command tree
May 23, 2026
85da193
[ORB-00288] Fix make ci: needless_borrow clippy in dashboard + activi…
May 23, 2026
b2a85b3
fix: Resolve ORB-00276 regressions [ORB-00282]
May 23, 2026
180ddb5
[ORB-00286] Fix Claude MCP init permission names for the Orbit server
claude May 23, 2026
648119c
[ORB-00289] Trim 6 admin/destructive tools from the agent MCP surface
claude May 23, 2026
76ea75c
[ORB-00290] Doc + dead-code cleanup after MCP surface trim
claude May 23, 2026
dcc50a1
Implement .claude.json configuration and update references from .mcp.…
danieljhkim May 23, 2026
c8e1b11
Add AGENTS.md to document the CLAUDE agent
danieljhkim May 23, 2026
147881b
Update version to 0.7.0 across all relevant files
danieljhkim May 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
19 changes: 19 additions & 0 deletions .claude.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"mcpServers": {
"codegraph": {
"args": [
"serve",
"--mcp"
],
"command": "codegraph",
"type": "stdio"
},
"orbit": {
"args": [
"mcp",
"serve"
],
"command": "orbit"
}
}
}
115 changes: 1 addition & 114 deletions .claude/hooks/orbit-learning-reminder
Original file line number Diff line number Diff line change
@@ -1,116 +1,3 @@
#!/bin/sh
# Orbit project-learning PreToolUse hook.
#
# Environment:
# - ORBIT_BIN: explicit orbit binary path; falls back to `command -v orbit`.
# - ORBIT_SESSION_ID: shared dedup session id from orbit-engine.
# - ORBIT_LEARNING_PER_CALL_CAP: per-hook cap; default 5.
# - ORBIT_LEARNING_SESSION_CAP: per-session hard cap; default 20.

payload=$(cat)

if command -v python3 >/dev/null 2>&1; then
parsed=$(printf '%s' "$payload" | python3 -c '
import json, sys
try:
data = json.load(sys.stdin)
except Exception:
sys.exit(0)
tool = data.get("tool_name") or data.get("toolName") or ""
tool_input = data.get("tool_input") or data.get("toolInput") or {}
path = tool_input.get("file_path") or tool_input.get("filePath") or tool_input.get("path") or ""
if tool in {"Edit", "Write", "Read"} and isinstance(path, str) and path.strip():
print(tool + "\t" + path.strip())
')
else
parsed=""
fi

[ -n "$parsed" ] || exit 0
tool_name=${parsed%% *}
target_path=${parsed#* }

case "$tool_name" in
Edit|Write|Read) ;;
*) exit 0 ;;
esac

if [ -n "${ORBIT_BIN:-}" ]; then
orbit_bin=$ORBIT_BIN
else
orbit_bin=$(command -v orbit 2>/dev/null || true)
fi
[ -n "$orbit_bin" ] || exit 0

limit=${ORBIT_LEARNING_PER_CALL_CAP:-5}
session_cap=${ORBIT_LEARNING_SESSION_CAP:-20}
results=$("$orbit_bin" learning search --path "$target_path" --limit "$limit" --json 2>/dev/null) || exit 0
[ -n "$results" ] || exit 0

repo_root=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
if [ -n "${ORBIT_SESSION_ID:-}" ]; then
state_file="$repo_root/.orbit/state/sessions/$ORBIT_SESSION_ID/learnings.json"
else
state_file="${TMPDIR:-/tmp}/orbit-learning-hook-${PPID}.json"
fi

ORBIT_LEARNING_RESULTS=$results python3 - "$state_file" "$limit" "$session_cap" <<'PY'
import fcntl
import json
import os
import sys

state_file, per_call_raw, session_cap_raw = sys.argv[1:4]
try:
rows = json.loads(os.environ.get("ORBIT_LEARNING_RESULTS", ""))
except Exception:
sys.exit(0)
try:
per_call = max(1, int(per_call_raw))
except Exception:
per_call = 5
try:
session_cap = max(1, int(session_cap_raw))
except Exception:
session_cap = 20

os.makedirs(os.path.dirname(state_file), exist_ok=True)
with open(state_file, "a+", encoding="utf-8") as handle:
fcntl.flock(handle.fileno(), fcntl.LOCK_EX)
handle.seek(0)
raw = handle.read().strip()
try:
state = json.loads(raw) if raw else {"emitted_ids": [], "count": 0}
except Exception:
state = {"emitted_ids": [], "count": 0}
emitted = set(state.get("emitted_ids", []))
count = int(state.get("count", len(emitted)))
admitted = []
for row in rows:
learning_id = row.get("id")
summary = row.get("summary")
if not learning_id or not summary or learning_id in emitted:
continue
if count >= session_cap or len(admitted) >= per_call:
break
emitted.add(learning_id)
count += 1
admitted.append({"id": learning_id, "summary": summary})
handle.seek(0)
handle.truncate()
json.dump({"emitted_ids": sorted(emitted), "count": count}, handle, indent=2)
handle.write("\n")
fcntl.flock(handle.fileno(), fcntl.LOCK_UN)

if not admitted:
sys.exit(0)

print("<system-reminder>")
print("Project learnings relevant to this task:")
print()
for row in admitted:
print(f"- [{row['id']}] {row['summary']}")
print()
print("Read full body via `orbit.learning.show <id>` if needed.")
print("</system-reminder>")
PY
exec "${ORBIT_BIN:-orbit}" hook pretooluse "$@"
88 changes: 85 additions & 3 deletions .claude/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,96 @@
"hooks": {
"PreToolUse": [
{
"matcher": "Edit|Write|Read",
"hooks": [
{
"command": ".claude/hooks/orbit-learning-reminder",
"type": "command"
}
],
"matcher": "Edit|Write|Read"
},
{
"hooks": [
{
"command": "scripts/orbit-file-lock",
"type": "command"
}
],
"matcher": "Edit|Write"
}
],
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": ".claude/hooks/orbit-learning-reminder"
"command": "scripts/codegraph-if-main mark-dirty",
"async": true
}
]
}
],
"Stop": [
{
"matcher": ".*",
"hooks": [
{
"type": "command",
"command": "scripts/codegraph-if-main sync-if-dirty"
}
]
}
]
},
"permissions": {
"allow": [
"mcp__codegraph__codegraph_search",
"mcp__codegraph__codegraph_context",
"mcp__codegraph__codegraph_callees",
"mcp__codegraph__codegraph_node",
"mcp__codegraph__codegraph_status",
"mcp__orbit__orbit_search",
"mcp__orbit__orbit_friction_add",
"mcp__orbit__orbit_graph_callers",
"mcp__orbit__orbit_graph_deps",
"mcp__orbit__orbit_graph_implementors",
"mcp__orbit__orbit_graph_overview",
"mcp__orbit__orbit_graph_pack",
"mcp__orbit__orbit_graph_refs",
"mcp__orbit__orbit_graph_search",
"mcp__orbit__orbit_graph_show",
"mcp__orbit__orbit_learning_add",
"mcp__orbit__orbit_learning_comment_add",
"mcp__orbit__orbit_learning_comment_list",
"mcp__orbit__orbit_learning_show",
"mcp__orbit__orbit_learning_update",
"mcp__orbit__orbit_learning_upvote",
"mcp__orbit__orbit_task_add",
"mcp__orbit__orbit_task_artifact_put",
"mcp__orbit__orbit_task_list",
"mcp__orbit__orbit_task_show"

],
"deny": [
"Read(./.orbit/tasks/**)",
"Read(./.orbit/runs/**)",
"Read(./.orbit/audit/**)",
"Read(./.orbit/diagnostics/**)",
"Read(./.orbit/**/orbit.db*)",
"Read(./target/**)",
"Read(./.codegraph/**)",
"Read(./node_modules/**)",
"Read(./**/node_modules/**)",
"Read(./dist/**)",
"Read(./build/**)",
"Read(./website/dist/**)",
"Read(./.astro/**)",
"Read(./.ruff_cache/**)",
"Read(./benchmarks/**/runs/**)",
"Read(./benchmarks/**/tasks/**)",
"mcp__codegraph__codegraph_callers",
"mcp__codegraph__codegraph_impact"
]
}
}
}
35 changes: 35 additions & 0 deletions .codex/config.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,42 @@
[[hooks.PreToolUse]]
matcher = '^(Bash|apply_patch|mcp__.*|mcp\..*)$'

[[hooks.PreToolUse.hooks]]
command = '"$(git rev-parse --show-toplevel)/.codex/hooks/orbit-learning-reminder"'
statusMessage = "Loading Orbit learnings"
type = "command"

[[hooks.PreToolUse]]
matcher = '^(Edit|Write|apply_patch)$'

[[hooks.PreToolUse.hooks]]
command = '"$(git rev-parse --show-toplevel)/scripts/orbit-file-lock"'
type = "command"

[[hooks.PostToolUse]]
matcher = '^(Edit|Write)$'

[[hooks.PostToolUse.hooks]]
command = '"$(git rev-parse --show-toplevel)/scripts/codegraph-if-main" mark-dirty'
type = "command"
async = true

[[hooks.Stop]]
matcher = '.*'

[[hooks.Stop.hooks]]
command = '"$(git rev-parse --show-toplevel)/scripts/codegraph-if-main" sync-if-dirty'
type = "command"

[mcp_servers.orbit]
args = [
"mcp",
"serve",
]
command = "orbit"
enabled = true

[mcp_servers.codegraph]
args = ["serve", "--mcp"]
command = "codegraph"
enabled = true
3 changes: 3 additions & 0 deletions .codex/hooks/orbit-learning-reminder
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/sh
# Orbit project-learning PreToolUse hook.
exec "${ORBIT_BIN:-orbit}" hook pretooluse --format codex "$@"
8 changes: 8 additions & 0 deletions .config/nextest.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
nextest-version = { required = "0.9.48" }

[test-groups]
stateful-runtime = { max-threads = 1 }

[[profile.default.overrides]]
filter = 'package(orbit-cli) | package(orbit-core)'
test-group = 'stateful-runtime'
3 changes: 3 additions & 0 deletions .gemini/hooks/orbit-learning-reminder
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/sh
# Orbit project-learning PreToolUse hook.
exec "${ORBIT_BIN:-orbit}" hook pretooluse --format gemini "$@"
51 changes: 51 additions & 0 deletions .gemini/settings.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,62 @@
{
"hooks": {
"BeforeTool": [
{
"hooks": [
{
"command": ".gemini/hooks/orbit-learning-reminder",
"name": "orbit-learning-reminder",
"type": "command"
}
],
"matcher": "*"
},
{
"hooks": [
{
"command": "scripts/orbit-file-lock",
"name": "orbit-file-lock",
"type": "command"
}
],
"matcher": "replace|write_file"
}
],
"AfterTool": [
{
"matcher": "replace|write_file",
"hooks": [
{
"type": "command",
"command": "scripts/codegraph-if-main mark-dirty",
"async": true
}
]
}
],
"Stop": [
{
"matcher": "*",
"hooks": [
{
"type": "command",
"command": "scripts/codegraph-if-main sync-if-dirty"
}
]
}
]
},
"mcpServers": {
"orbit": {
"args": [
"mcp",
"serve"
],
"command": "orbit"
},
"codegraph": {
"command": "codegraph",
"args": ["serve", "--mcp"]
}
}
}
4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,8 @@ body:
- orbit-cli
- orbit-common
- orbit-core
- orbit-embed
- orbit-embed-companion
- orbit-search
- orbit-search-companion
- orbit-engine
- orbit-exec
- orbit-knowledge
Expand Down
4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ body:
- orbit-cli
- orbit-common
- orbit-core
- orbit-embed
- orbit-embed-companion
- orbit-search
- orbit-search-companion
- orbit-engine
- orbit-exec
- orbit-knowledge
Expand Down
Loading
Loading