site-mariage/.claude/hooks/inject-soul.js
Corentin Joguet bff653acd6 first commit
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 10:30:37 +02:00

43 lines
1.2 KiB
JavaScript
Executable file

#!/usr/bin/env node
/**
* SessionStart hook — loads BYAN soul/tao/soul-memory and injects them
* into the session's initial context via additionalContext.
*
* Safe: missing files are skipped silently, script always exits 0.
*/
const fs = require('fs');
const path = require('path');
const projectDir = process.env.CLAUDE_PROJECT_DIR || process.cwd();
const files = [
{ label: 'soul', path: path.join(projectDir, '_byan', 'soul.md') },
{ label: 'tao', path: path.join(projectDir, '_byan', 'tao.md') },
{ label: 'soul-memory', path: path.join(projectDir, '_byan', 'soul-memory.md') },
];
const chunks = [];
for (const f of files) {
try {
if (fs.existsSync(f.path)) {
const content = fs.readFileSync(f.path, 'utf8').trim();
if (content.length > 0) {
chunks.push(`=== BYAN ${f.label.toUpperCase()} (${path.relative(projectDir, f.path)}) ===\n${content}`);
}
}
} catch {
// Ignore read errors — hook must never block session start.
}
}
const additionalContext =
chunks.length > 0
? `BYAN Soul System (loaded at session start):\n\n${chunks.join('\n\n')}`
: '';
if (additionalContext) {
process.stdout.write(JSON.stringify({ systemMessage: additionalContext }));
} else {
process.stdout.write('{}');
}