Loading...
Loading...
Knowledge graph-based text replacement using Terraphim hooks. Intercepts commands and text to apply transformations defined in the knowledge graph. Works with Claude Code PreToolUse hooks and Git prepare-commit-msg hooks.
npx skill4agent add terraphim/terraphim-skills terraphim-hooksterraphim-agent replace┌─────────────────────────────────────────────────────────────────┐
│ Knowledge Graph (docs/src/kg/) │
│ ┌──────────────┐ ┌──────────────────┐ ┌──────────────────┐ │
│ │ bun.md │ │ bun install.md │ │ terraphim ai.md │ │
│ │ synonyms:: │ │ synonyms:: │ │ synonyms:: │ │
│ │ npm, yarn, │ │ npm install, │ │ Claude Code, │ │
│ │ pnpm, npx │ │ yarn install... │ │ Claude Opus... │ │
│ └──────────────┘ └──────────────────┘ └──────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌───────────────────────────────┐
│ Aho-Corasick Automata │
│ (LeftmostLongest matching) │
└───────────────────────────────┘
│
┌───────────────┴───────────────┐
│ │
▼ ▼
┌──────────────────────┐ ┌──────────────────────┐
│ PreToolUse Hook │ │ Git Hook │
│ (npm → bun) │ │ (Claude → Terraphim)│
│ │ │ │
│ Input: Bash command │ │ Input: Commit msg │
│ Output: Modified │ │ Output: Modified │
└──────────────────────┘ └──────────────────────┘# Download and install terraphim-agent from GitHub releases (latest version)
# macOS ARM64 (Apple Silicon)
gh release download --repo terraphim/terraphim-ai \
--pattern "terraphim-agent-aarch64-apple-darwin" --dir /tmp
chmod +x /tmp/terraphim-agent-aarch64-apple-darwin
mv /tmp/terraphim-agent-aarch64-apple-darwin ~/.cargo/bin/terraphim-agent
# macOS x86_64 (Intel)
# gh release download --repo terraphim/terraphim-ai \
# --pattern "terraphim-agent-x86_64-apple-darwin" --dir /tmp
# Linux x86_64
# gh release download --repo terraphim/terraphim-ai \
# --pattern "terraphim-agent-x86_64-unknown-linux-gnu" --dir /tmp
# Note: crates.io version (cargo install terraphim_agent) is outdated (v1.0.0)
# and missing hook/guard commands. Use GitHub releases for latest features.
# Create knowledge graph directory
mkdir -p ~/.config/terraphim/docs/src/kg
# Create replacement rules (example: npm -> bun)
cat > ~/.config/terraphim/docs/src/kg/"bun install.md" << 'EOF'
# bun install
Install dependencies using Bun package manager.
synonyms:: npm install, yarn install, pnpm install, npm i
EOF
# Create hooks directory and script
mkdir -p ~/.claude/hooks
cat > ~/.claude/hooks/pre_tool_use.sh << 'EOF'
#!/bin/bash
INPUT=$(cat)
cd ~/.config/terraphim 2>/dev/null || exit 0
terraphim-agent hook --hook-type pre-tool-use --json <<< "$INPUT" 2>/dev/null
EOF
chmod +x ~/.claude/hooks/pre_tool_use.sh
# Test replacement
echo "npm install react" | ~/.claude/hooks/pre_tool_use.sh
# Output: {"tool_input":{"command":"bun install react"},"tool_name":"Bash"}~/.claude/settings.local.json{
"hooks": {
"PreToolUse": [{
"matcher": "Bash",
"hooks": [{
"type": "command",
"command": "~/.claude/hooks/pre_tool_use.sh"
}]
}]
}
}# Clone terraphim-ai repository
git clone https://github.com/terraphim/terraphim-ai
cd terraphim-ai
# Build the agent
cargo build -p terraphim_agent --release
# Install to cargo bin
cp target/release/terraphim-agent ~/.cargo/bin/# Basic replacement
echo "npm install package" | terraphim-agent replace
# Output: bun install package
# With JSON output (for programmatic use)
echo "npm install" | terraphim-agent replace --json
# Output: {"result":"bun install","original":"npm install","replacements":1,"changed":true}
# Fail-open mode (returns original on error)
echo "npm install" | terraphim-agent replace --fail-open~/.config/terraphim/docs/src/kg/# replacement term
Description of the replacement term.
synonyms:: term_to_replace, another_term, third_term#~/.config/terraphim/docs/src/kg/cargo test.md# cargo test
Rust's built-in test runner using Cargo.
synonyms:: pytest, py.test, python -m pytest# Check if agent is available
if command -v terraphim-agent >/dev/null 2>&1; then
echo "Terraphim agent available"
elif [ -x "./target/release/terraphim-agent" ]; then
AGENT="./target/release/terraphim-agent"
elif [ -x "$HOME/.cargo/bin/terraphim-agent" ]; then
AGENT="$HOME/.cargo/bin/terraphim-agent"
fi#!/bin/bash
# Read JSON input
INPUT=$(cat)
TOOL_NAME=$(echo "$INPUT" | jq -r '.tool_name')
COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command')
# Only process Bash commands
[ "$TOOL_NAME" != "Bash" ] && exit 0
# Perform replacement with fail-open
REPLACED=$(terraphim-agent replace --fail-open <<< "$COMMAND")
# Output modified tool_input if changed
if [ "$REPLACED" != "$COMMAND" ]; then
echo "$INPUT" | jq --arg cmd "$REPLACED" '.tool_input.command = $cmd'
fi#!/bin/bash
COMMIT_MSG_FILE=$1
# Read original message
ORIGINAL=$(cat "$COMMIT_MSG_FILE")
# Replace using knowledge graph
REPLACED=$(terraphim-agent replace --fail-open <<< "$ORIGINAL")
# Write back if changed
if [ "$REPLACED" != "$ORIGINAL" ]; then
echo "$REPLACED" > "$COMMIT_MSG_FILE"
fiuse terraphim_hooks::{ReplacementService, HookResult};
use terraphim_types::Thesaurus;
// Load thesaurus from knowledge graph
let thesaurus = load_thesaurus_from_kg("docs/src/kg/");
// Create replacement service
let service = ReplacementService::new(thesaurus);
// Perform replacement
let result: HookResult = service.replace_fail_open("npm install react");
// result.result == "bun install react"
// result.changed == true
// result.replacements == 1replace_matches{
"tool": "replace_matches",
"arguments": {
"text": "npm install react",
"role": "Default"
}
}| Hook Type | Trigger Point | Use Case |
|---|---|---|
| PreToolUse | Before tool execution | Transform commands (npm→bun) |
| PostToolUse | After tool execution | Validate outputs |
| prepare-commit-msg | Before commit | Transform attribution |
| pre-commit | Before commit | Block unwanted patterns |
export TERRAPHIM_VERBOSE=1# term_name
Optional description.
synonyms:: synonym1, synonym2, synonym3# Run test script
./scripts/test-terraphim-hooks.sh
# Manual test - PreToolUse
echo '{"tool_name":"Bash","tool_input":{"command":"npm install"}}' | .claude/hooks/npm_to_bun_guard.sh
# Manual test - Git hook
echo "Claude Code generated this" | terraphim-agent replace| Issue | Solution |
|---|---|
| Hook not triggering | Check |
| No replacement happening | Verify knowledge graph files exist in |
| Agent not found | Build with |
| Permission denied | Run |
| jq not found | Install jq: |
implementationtestingdevops