扫描指令文件,收窄过宽措辞,减少模型幻觉
28/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/19 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add SummerSec/semantic-linter该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · skill
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 81 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件
查看扫描证据(共 24 处,展示前 24 条)
- 读取本地文件dsh/index.js:8
const SKILL_DIRECTORIES = Object.freeze(fs.readdirSync(SKILLS_ROOT, { withFileTypes: true }) - 读取本地文件dsh/index.js:9
.filter((entry) => entry.isDirectory() && fs.existsSync(path.join(SKILLS_ROOT, entry.name, 'SKILL.md'))) - 读取本地文件dsh/index.js:14
const raw = fs.readFileSync(filePath, 'utf8'); - 读取本地文件bin/scan.js:66
entries = fs.readdirSync(currentDir, { withFileTypes: true }); - 读取本地文件bin/scan.js:98
const content = fs.readFileSync(filePath, 'utf8'); - 读取本地文件bin/scan.js:215
if (!fs.existsSync(targetPath)) { - 读取本地文件bin/scan.js:220
const stat = fs.statSync(targetPath); - 读取本地文件hooks/post-tool-use.js:39
content = fs.readFileSync(absFile, 'utf8'); - 读取本地文件hooks/rules-resolver.js:13
if (fs.existsSync(candidate) && fs.statSync(candidate).isFile()) return candidate; - 读取本地文件hooks/rules-resolver.js:40
if (fs.existsSync(pluginRules)) { - 读取本地文件hooks/runtime.js:33
return fs.readFileSync(getModeFilePath(), 'utf8').trim() || null; - 写入本地文件hooks/runtime.js:40
fs.mkdirSync(path.dirname(getModeFilePath()), { recursive: true }); - 写入本地文件hooks/runtime.js:41
fs.writeFileSync(getModeFilePath(), String(mode || '').trim(), 'utf8'); - 删除本地文件hooks/runtime.js:46
fs.unlinkSync(getModeFilePath()); - 读取本地文件lib/config-loader.js:28
if (fs.existsSync(candidate) && fs.statSync(candidate).isFile()) return candidate; - 读取本地文件lib/config-loader.js:39
raw = JSON.parse(fs.readFileSync(configPath, 'utf8')); - 读取本地文件lib/hook-utils.js:16
const data = fs.readFileSync(0, 'utf8'); - 读取本地文件lib/state-manager.js:59
const raw = fs.readFileSync(filePath, 'utf8'); - 写入本地文件lib/state-manager.js:73
fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf8'); - 写入本地文件lib/state-manager.js:84
fs.mkdirSync(STATE_DIR, { recursive: true }); - 读取本地文件lib/state-manager.js:85
if (!fs.existsSync(STATS_FILE)) { - 读取本地文件lib/state-manager.js:88
if (!fs.existsSync(SESSION_FILE)) { - 读取本地文件plugin/lib/config-loader.js:31
if (fs.existsSync(candidate) && fs.statSync(candidate).isFile()) { - 读取本地文件plugin/lib/config-loader.js:48
raw = JSON.parse(fs.readFileSync(configPath, 'utf8'));
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 检测语义过宽用词
- 注入项目级本地规则
- 检查语义陷阱
一款面向 LLM 指令文件的插件和命令行工具,用于检测语义边界过宽的用词,并提供受保护的 Hook、项目级本地规则注入,以及针对 Skill、Prompt 和 Agent 的语义陷阱检查。
README
由 DeepSeek 最新模型翻译生成英文版本
Semantic-Linter
Semantic-Linter 是一个面向 LLM 指令文件的插件与 CLI,用来收窄语义边界过宽的表达。它主要用于 SKILL.md、AGENTS.md、CLAUDE.md、prompt 文档、command 文档等指令资产,帮助减少因为措辞过宽带来的幻觉和范围漂移。
当前架构
Semantic-Linter 现在使用分层设计,不再是旧的 pointer-only 方案:
- SessionStart 注入一条紧凑的 STL: 规则指针,指向当前生效的 semantic-rules.md
- SubagentStart 把同样的规则指针传播给子代理
- UserPromptSubmit 可以在提示词进入模型前提醒宽边界表达
- PreToolUse 会在 Write 和 Edit 修改指令文件前给出预警
- PostToolUse 会在写入后再次检查结果,并记录升级状态
- bin/scan.js 仍然保留为显式 CLI 扫描入口,可扫描单文件、目录或当前工作区
默认运行模式是 guarded:
- off:关闭 semantic-linter
- pointer:只保留轻量规则指针
- guarded:规则指针 + 写入期检查
- strict:规则指针 + 写入期检查 + prompt 扫描
规则来源策略
展开完整文档(README 剩余 1 节)
英文版本
Semantic-Linter
Semantic-Linter 是一个面向 LLM 指令文件的插件与 CLI,用来收窄语义边界过宽的表达。它主要用于 SKILL.md、AGENTS.md、CLAUDE.md、prompt 文档、command 文档等指令资产,帮助减少因为措辞过宽带来的幻觉和范围漂移。
当前架构
Semantic-Linter 现在使用分层设计,不再是旧的 pointer-only 方案:
- SessionStart 注入一条紧凑的 STL: 规则指针,指向当前生效的 semantic-rules.md
- SubagentStart 把同样的规则指针传播给子代理
- UserPromptSubmit 可以在提示词进入模型前提醒宽边界表达
- PreToolUse 会在 Write 和 Edit 修改指令文件前给出预警
- PostToolUse 会在写入后再次检查结果,并记录升级状态
- bin/scan.js 仍然保留为显式 CLI 扫描入口,可扫描单文件、目录或当前工作区
默认运行模式是 guarded:
- off:关闭 semantic-linter
- pointer:只保留轻量规则指针
- guarded:规则指针 + 写入期检查
- strict:规则指针 + 写入期检查 + prompt 扫描
规则来源策略
默认使用 project-first 规则解析策略:
1. 从当前编辑文件或工作区开始,向上查找最近的 semantic-rules.md
2. 如果项目内没有,则回退到插件自带的 semantic-rules.md
你也可以通过 .semantic-linter.json 强制使用 plugin-only。
安装
Claude Code
claude plugin marketplace add SummerSec/semantic-linter
claude plugin install semantic-linter@summersec-semantic-linter
/reload-plugins
Codex
codex plugin marketplace add SummerSec/semantic-linter
codex plugin add semantic-linter@semantic-linter
Codex 不直接消费 Claude 的 hook manifest。它的项目级接入方式是把受管规则块写入 AGENTS.md。
DeepSeek Harness
安装官方 DSH CLI,并把本仓库作为 bundle 加入需要使用的 profile:
npm install -g @deepseek-ai/dsh@0.1.0-rc.6
dsh plugin --profile headless add github:SummerSec/semantic-linter
dsh plugin --profile web add github:SummerSec/semantic-linter
本地开发时可以在仓库根目录执行:
dsh plugin --profile headless add .
如果 pnpm 返回 ERR_PNPM_ADDING_TO_ROOT,在命令末尾追加 --ignore-workspace-root-check 后重试。
这个 DSH bundle 会把仓库根目录 skills/ 下的四个 Skill 注册到 ctx.skills。DSH 还会读取工作区中的 AGENTS.md 或 CLAUDE.md;调用 rules-installer 后,项目可以通过受管规则块按需读取 semantic-rules.md。
DSH 不会直接执行本仓库的 Claude hook manifest。DSH 下提供的是 packaged Skill + 项目 instruction pointer;SessionStart、SubagentStart、UserPromptSubmit、PreToolUse、PostToolUse 和 /stl-mode 仍仅属于 Claude hook 路径。
项目初始化
如果你想把项目本地规则注入到当前仓库,可以运行:
node /absolute/path/to/semantic-linter/scripts/build-rules.js --existing "$(pwd)"
这会生成:
- semantic-rules.md
- AGENTS.md 和或 CLAUDE.md 中的受管规则区块
如果两个文件都不存在,脚本会根据宿主环境创建默认目标:
- Codex 或 auto:AGENTS.md
- Claude:CLAUDE.md
常用命令:
npm run build-rules
npm run build-rules:check
npm run build-lexicon
npm run build-lexicon:check
npm run scan --
npm test
配置
可选配置文件为 .semantic-linter.json。
支持的字段:
{
"ignoreTrapIds": ["T01"],
"ignorePathSubstrings": ["fixtures/generated/"],
"ignoreStructuralTypes": ["open_ended_verb"],
"defaultMode": "guarded",
"ruleSource": "project-first",
"enablePromptScan": false,
"maxFindingsPerHook": 3
}
说明:
- defaultMode 支持 off、pointer、guarded、strict
- ruleSource 支持 project-first 和 plugin-only
- enablePromptScan 会在 guarded 模式下启用 UserPromptSubmit
- strict 会始终开启 prompt 扫描
检测范围
Semantic-Linter 会按路径约定扫描指令类文件:
- 文件名:SKILL.md、AGENTS.md、CLAUDE.md
- 后缀:.prompt.md、_definitions.md、*_examples.md
- 目录:skills/、agents/、commands/、rules/、prompts/
开发说明
核心运行时文件:
- hooks/session-start.js
- hooks/subagent-start.js
- hooks/user-prompt-submit.js
- hooks/pre-tool-use.js
- hooks/post-tool-use.js
- hooks/config.js
- hooks/runtime.js
- hooks/rules-resolver.js
核心库文件:
- lib/content-scanner.js
- lib/structural-analyzer.js
- lib/report-formatter.js
- lib/state-manager.js
- lib/config-loader.js
测试
npm test
npm test 会依次运行:
- build-lexicon:check
- build-rules:check
- tests/test-scanner.js
- tests/test-new-features.js
测试覆盖扫描器行为、生成器幂等性、manifest 一致性,以及基于 stdin 的 hook 入口行为。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
SummerSec/semantic-linter
扫描指令文件,收窄过宽措辞,减少模型幻觉
相关插件 · 技能 / 提示词
人设统管ZiChuanLan/agent-purge
一份人设,统一管理多个 coding agent。
★ 1,141已汉化DSH
74.1
人物画像蒸馏titanwings/distilly
Distilly — 把他们的思考方式提炼成可复用的技能,供任何智能体或机器人使用。原名 Colleague Skill(原同事 Skill)。
★ 25,659已汉化DSH
71.3
推理工作空间套件Tiger3807861189/J-Space-Cognition-Suite
J-Space 是面向复杂推理、大型仓库工程、子代理协作与授权安全分析的推理时工作空间和控制套件。
★ 2,957已汉化DSH
70.5
两阶段工具锚定预设xiaobright/dsh-anchored-standard
实验性 DeepSeek Harness agent preset…
★ 3,742已汉化DSH
70.1
智能体工作流编排nrslib/takt
不再日夜盯着 AI 编码智能体。
★ 1,402已汉化DSH
70
Agent 运行时手册Electricitysheep/dsh-handbook
DeepSeek Harness dsh 从 0 到 1 深度手册:安装/插件开发/性能调优/实测案例/同模型多…
★ 827已汉化DSH
68.7
这是你的仓库?认领条目