Evaluate: Typed tool hooks (beforeToolCall/afterToolCall) for terraphim-skills

未关闭
#686 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
5/5
预计耗时
一周以上
新手友好度
30/100
Issue 类型
功能
描述清晰度
基本清楚
活跃度
停滞
技术栈
rust, shell
领域
ai, tooling

调研方向

Read ~/.claude/hooks/pre_tool_use.sh and ~/.claude/hooks/post_tool_use.sh to understand the current shell-hook contracts, then review knowledge/claude-agent-sdk-reference.md and the linked Pi hook design. Define a compatible Rust trait, compare shell invocation with Rust dispatch, and prototype the git-safety guard. Done means the benchmark, prototype, and an explicit adopt, retain, or hybrid decision are documented.

由索引模型根据 Issue 内容生成。

描述

enhancement

Parent Epic

#682 -- Evaluate Pi architectural patterns

Pattern

Pi's agent-core provides typed hooks at the tool execution boundary:

beforeToolCall: async ({ toolCall, args, context }) => {
  if (toolCall.name === "bash" && args.command.includes("rm -rf")) {
    return { block: true, reason: "Destructive command blocked" };
  }
}

afterToolCall: async ({ toolCall, result, isError, context }) => {
  return { details: { ...result.details, audited: true } };
}

These hooks:

  • Run after argument validation but before execution (beforeToolCall)
  • Can block execution with a typed reason
  • Can modify tool results before they reach the LLM (afterToolCall)
  • Are in-process callbacks with full type safety (not JSON over shell)

Current State

terraphim-skills hooks system:

  • PreToolUse (~/.claude/hooks/pre_tool_use.sh): git safety guard + KG text replacement. Shell script, receives JSON on stdin, returns JSON on stdout.
  • PostToolUse (~/.claude/hooks/post_tool_use.sh): learning capture for failed commands. Shell script.
  • Both are shell commands -- no type safety, JSON parsing overhead, subprocess spawn cost.

Claude Code hooks:

  • 22 lifecycle events
  • Shell command, HTTP POST, or prompt/agent types
  • JSON-based input/output contract
  • Exit code 2 for blocking

Claude Agent SDK hooks:

  • Callback functions (Python/TypeScript) -- closer to Pi's model
  • Typed input objects, structured output
  • permissionDecision: "deny" for blocking

Evaluation Questions

  1. Should terraphim-skills adopt typed Rust hooks? Current shell hooks have subprocess overhead (~50ms per invocation). A Rust-native hook system would be sub-millisecond.
  2. What's the right abstraction? Pi uses { block: true, reason }. Claude uses { permissionDecision: "deny", permissionDecisionReason }. terraphim could use a trait: fn before_tool_call(&self, tool: &ToolCall, args: &Value) -> HookResult.
  3. Does this replace or complement shell hooks? Shell hooks are user-facing (CLAUDE.md configurable). Rust hooks would be for skill/extension developers.
  4. Integration with terraphim-skills Markdown format: Skills are currently Markdown files. Typed hooks would require a Rust module alongside the Markdown. Is this acceptable complexity?

Acceptance Criteria

  • Design a Rust hook trait compatible with terraphim-skills
  • Benchmark: shell hook invocation time vs Rust trait dispatch
  • Prototype: port git-safety-guard from shell to Rust hook
  • Decision: adopt Rust hooks, keep shell-only, or hybrid approach

References

主要语言
Rust
星标
62
派生
5
平均合并
2 小时 27 分钟
30 天内合并 PR
1

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

terraphim/terraphim-ai 的其他 Issue

查看 terraphim/terraphim-ai 的全部 Issue

相似的 Issue

更多 Rust Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。