74 lines
2.2 KiB
Plaintext
74 lines
2.2 KiB
Plaintext
|
|
{
|
||
|
|
id = "0009",
|
||
|
|
slug = "claude-session-context",
|
||
|
|
description = "Add SessionStart hook and static project-context.md for auto-loading project identity into Claude Code sessions",
|
||
|
|
check = {
|
||
|
|
tag = "NuCmd",
|
||
|
|
cmd = "let root = $env.ONTOREF_PROJECT_ROOT; let hook = $\"($root)/.claude/hooks/session-context.sh\"; let ctx = $\"($root)/.claude/project-context.md\"; if ($hook | path exists) and ($ctx | path exists) { exit 0 } else { exit 1 }",
|
||
|
|
expect_exit = 0,
|
||
|
|
},
|
||
|
|
instructions = "
|
||
|
|
1. Create .claude/hooks/session-context.sh with the following content and make it executable:
|
||
|
|
|
||
|
|
#!/usr/bin/env bash
|
||
|
|
# Hook: SessionStart
|
||
|
|
# Injects current project identity, state dimensions, and hard constraints
|
||
|
|
# as initial context for every Claude Code session in this directory.
|
||
|
|
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
REPO_ROOT=\"$(git rev-parse --show-toplevel 2>/dev/null || pwd)\"
|
||
|
|
|
||
|
|
if ! command -v nu &>/dev/null; then
|
||
|
|
exit 0
|
||
|
|
fi
|
||
|
|
|
||
|
|
export ONTOREF_ACTOR=developer
|
||
|
|
|
||
|
|
echo \"## Project Context (auto-loaded at session start)\"
|
||
|
|
echo \"\"
|
||
|
|
|
||
|
|
ontoref describe project --fmt text 2>/dev/null || true
|
||
|
|
|
||
|
|
echo \"\"
|
||
|
|
|
||
|
|
ontoref describe state 2>/dev/null || true
|
||
|
|
|
||
|
|
chmod +x .claude/hooks/session-context.sh
|
||
|
|
|
||
|
|
2. Add the following to .claude/settings.local.json (merge into existing JSON):
|
||
|
|
|
||
|
|
\"hooks\": {
|
||
|
|
\"SessionStart\": [
|
||
|
|
{
|
||
|
|
\"hooks\": [
|
||
|
|
{
|
||
|
|
\"type\": \"command\",
|
||
|
|
\"command\": \".claude/hooks/session-context.sh\"
|
||
|
|
}
|
||
|
|
]
|
||
|
|
}
|
||
|
|
]
|
||
|
|
}
|
||
|
|
|
||
|
|
3. Generate the static fallback file:
|
||
|
|
|
||
|
|
ONTOREF_ACTOR=developer ontoref describe project --fmt text > .claude/project-context.md
|
||
|
|
|
||
|
|
4. Add the import at the top of .claude/CLAUDE.md (immediately after the # heading):
|
||
|
|
|
||
|
|
@.claude/project-context.md
|
||
|
|
|
||
|
|
5. In reflection/hooks/git-event.nu, add regeneration of project-context.md on post-merge/post-checkout.
|
||
|
|
After the mode-detect call, insert:
|
||
|
|
|
||
|
|
let context_file = $\"($ontoref_root)/.claude/project-context.md\"
|
||
|
|
if ($context_file | path parent | path exists) {
|
||
|
|
let r = (do { ^nu $wrapper describe project --fmt text } | complete)
|
||
|
|
if $r.exit_code == 0 {
|
||
|
|
$r.stdout | save --force $context_file
|
||
|
|
}
|
||
|
|
}
|
||
|
|
",
|
||
|
|
}
|