@masonchow/pi-claude-rules
Pi extension: consume .claude/rules/ with Claude Code semantics (paths frontmatter, glob matching, /rules command)
Package details
Install @masonchow/pi-claude-rules from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@masonchow/pi-claude-rules- Package
@masonchow/pi-claude-rules- Version
0.1.0- Published
- Aug 3, 2026
- Downloads
- 88/mo · 88/wk
- Author
- masonchow
- License
- MIT
- Types
- extension
- Size
- 18.7 KB
- Dependencies
- 0 dependencies · 1 peer
Pi manifest JSON
{
"extensions": [
"./src/index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
@masonchow/pi-claude-rules
让 Pi 按 Claude Code 的语义消费 .claude/rules/:无条件规则挂 system prompt,带 paths 的规则等 agent 读到匹配文件时才注入。同一套规则库,Claude Code 和 Pi 表现一致。
快速开始
pi install npm:@masonchow/pi-claude-rules
已有 ~/.claude/rules/ 或项目内 .claude/rules/ 的话,重启 Pi 即生效:
claude-rules: 3 unconditional + 8 path-scoped rule(s) loaded
/rules 查看当前加载状态:
[user] ~/.claude/rules/typescript.md — paths: **/*.ts, **/*.tsx [injected]
[user] ~/.claude/rules/readme-writing.md — always
[project] .claude/rules/api-contract.md — paths: src/api/**
[injected] 表示本会话已因 read 命中而注入过。
规则文件写法
无条件规则——每次 agent 启动都注入:
# 提交规范
所有 commit message 使用中文祈使句。
按路径生效的规则——只在 agent 读到匹配文件时注入到那次 tool result:
---
paths: "src/**/*.ts, tests/**/*.ts"
---
# TS 约定
禁止 any,外部数据用 unknown + 类型守卫收窄。
paths 支持逗号分隔字符串、YAML 列表、内联数组三种写法。
适用范围
✅ 用户级 ~/.claude/rules/ + 项目级 <project>/.claude/rules/(从 cwd 逐级向上查找),递归扫描 .md
✅ glob:**、*、?、{a,b}、[...];symlink 路径与 realpath 双路径匹配
✅ 目录与文件 symlink 均解析,循环 symlink 跳过,realpath 去重
✅ 与 Pi 内建 contextFiles(AGENTS.md / CLAUDE.md)按 realpath 去重,不重复注入
✅ 注入顺序:用户级先、项目级后(项目优先级更高),同级字典序
✅ compact 后 path-scoped 规则可重新触发
❌ Claude Code 文档未定义的触发方式(只有 read 触发;write / edit 不触发)
❌ 规则内容的模板变量、条件表达式、include
❌ 无效括号表达式的 glob(静默不匹配,对齐 Claude Code v2.1.207 行为)
工作方式
sequenceDiagram
participant Pi as Pi
participant Ext as claude-rules
participant FS as rules 目录
Pi->>Ext: session_start
Ext->>FS: 扫描用户级 + 项目级 .claude/rules
FS-->>Ext: 规则列表(含 paths frontmatter)
Pi->>Ext: before_agent_start
Ext-->>Pi: system prompt 追加无条件规则块
Pi->>Ext: tool_result(read 某文件)
alt 该文件命中某条 paths 规则且本会话未注入
Ext-->>Pi: 该 tool result 追加 system-reminder
else 无命中
Ext-->>Pi: 原样放行
end
为什么这样注入
- 无条件规则挂 system prompt:会话内字节稳定,compact 之后天然存活,且不会每轮重写缓存前缀。
- path-scoped 规则走 tool result:消息落库前修改,append-only,不回写历史。
两条不变量共同保证扩展对 Anthropic prompt cache 中性:注入内容在会话内字节稳定(规则只在 session_start 读盘一次、确定性排序渲染),且从不回改历史消息。改动前先确认没破坏这两条。
许可
MIT