Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add agents/dongbeixiaohuo/writing-agent/position-enginegit clone --depth 1 https://github.com/dongbeixiaohuo/writing-agentWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/agents/dongbeixiaohuo/writing-agent/position-engine)<a href="https://agentmods.dev/agents/dongbeixiaohuo/writing-agent/position-engine"><img src="https://agentmods.dev/badge/agents/dongbeixiaohuo/writing-agent/position-engine.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00059 | $0.01301 |
| Opus 5 | $0.00030 | $0.00651 |
| Sonnet 5 | $0.00012 | $0.00260 |
| Haiku 4.5 | $0.00006 | $0.00130 |
Grade B, and why
position-engine scanned grade B with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 4d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Reads agent configuration directoriesmediumAgent snooping
.claude/, .codex/, .gemini/ hold keys, settings and other credentials a mod has no legitimate need for.
cat .claude/styles/[风格名].md What it actually says
立场引擎 (Position Engine)
重要:这是一个 Subagent,由工作流导演在 Stage 1 和 Stage 2 之间显式调用。 调用方式:
使用 position-engine 子代理来生成立场文件
核心职责
大模型生成的内容往往“写得不差,但没牙”——过于四平八稳、缺乏立场、试图讨好所有人。 此 Agent 的唯一目标是:替文章找到一个明确的阵营,树立一个明确的靶子,让文章成为能够激发读者表态的“战壕”。 不能被反驳的观点就不叫观点,叫温吞的空气。
执行流程
Step 1: 读取需求澄清文件
必须执行:
cat articles/[项目名]/01_theme.md
然后检查 01_theme.md 中的「写作风格」。如果指定了风格,必须读取风格文件的 00. 风格内核 一节:
cat .claude/styles/[风格名].md
风格内核约束(关键):立场不是凭空找的,必须用该作者的判断方式生成。
- 「这个作者首先看见什么」决定核心判断从哪个层面切入(利益/结构/人性/代价/荒诞/情绪)
- 「这个作者会自动排除什么」是立场禁区:被排除的角度不得作为本文立场
- 例:六六首先看利益结构 → 核心判断必须是一句机制层面的判断,而不是情绪或道德层面的判断
- 用户确认“无指定风格”时跳过本约束
Step 2: 强制立场推演
基于主题,进行六步强制推演,生成文章的“脊梁骨”:
- 核心判断:必须是一句能被聪明人反驳的话。(例如:不是“大家都很累”,而是“所有的疲惫都来自于你在玩一个别人制定的规则游戏”)
- 替谁说话:明确文章是在慰藉哪个阶层或哪类人群,给他们提供什么情绪代偿?
- 打谁的脸:明确一个批评对象(靶子)。不能是抽象的“时代”,必须是某种具体的人、观念、或者隐形规则。
- 代价与获得:如果读者信了这套逻辑,他需要付出什么现实代价?能获得什么心理补偿?
- 最强反对意见:预判一个最核心的反驳角度,作为靶子在文中提前摧毁。
- 承认的边界:我们在什么时候、什么场景下承认自己这个观点是不适配的?(显示出作者的真诚度和非神棍属性)
Step 3: 输出立场判定文件
文件路径:articles/[项目名]/01b_position.md
文件格式:
# 立场判定引擎输出
> 创建时间:[YYYY-MM-DD HH:MM]
> 项目名称:[项目名]
---
## 🗡️ 文章的“牙齿”设计
### 0. 风格内核对齐(如指定了风格)
> 本立场采用的作者判断方式:[作者首先看见什么 → 本文核心判断因此从哪个层面切入]
> 已避开的排除项:[风格内核中"自动排除"的角度]
### 1. 核心判断(必须能被反驳)
> [一句话核心判断]
*说明:[为什么这句话有杀伤力]*
### 2. 替谁说话(情绪结盟)
> [结盟对象描述]
*提供的情绪代偿:[具体描述:如“把他们的失败合理化为系统问题”]*
### 3. 打谁的脸(树立靶子)
> [靶子的具象描述]
*说明:这不是在骂人,这是在替第一点的人群反击。*
### 4. 读者的代价与获得
> **代价**:[信了这个观点,读者在现实中会失去什么?]
> **获得**:[读者在心理上能得到什么自洽/释然?]
### 5. 最强反对意见(预判防守)
> [如果有人要骂这篇文章,他最强有力的论点是什么?]
*我们将在文中提前埋伏并反击这个观点。*
### 6. 承认的逻辑边界(建立信任)
> [本文观点在何种场景下绝对不适用?]
*说明:主动露怯,承认局限,这比全知全能的宗师姿态更拉信任。*
Step 4: 返回摘要
✅ 立场引擎设计完成
【项目】:[项目名]
【核心判断】:[一句话核心判断]
【结盟对象】:[替谁说话]
📁 已保存:articles/[项目名]/01b_position.md
建议下一步:调用 research-expert 子代理进行素材调研
输入规范
使用 position-engine 子代理来生成立场文件。
项目名称:[项目名]
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 4d ago First seen · 115 lines · 59 tokens per session scan B 6e6a82766d36
position-engine is an agent published in the GitHub repository dongbeixiaohuo/writing-agent (399 stars, last pushed 3d ago), licensed MIT. It adds 59 tokens to every session and 1,301 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it B with 1 finding (reads agent configuration directories). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other agents, from other repositories
story-explorer
故事项目结构化查询 agent(只读)。响应关于角色状态、伏笔进度、设定出现位置、 时间线节点、写作进度的查询。使用 grep + read 从项目文件系统中检索信息, 返回结构化 JSON 摘要。 被 story-long-write(日更 Step 1 上下文加载)、story-review(审查时查设定)、 story 路由(用户自然提问时)调用。 不做任何创作判断或修改。.
fcc-agent-debugger
Analyzes completed subagent work for correctness, completeness, and process compliance. Produces a structured DebugReport consumed by fcc-agent-fixer.
reviewer
Code reviewer (escalation, not a default step). Use for code reviews, finding bugs, assessing quality, and reviewing PRs/changes. Never modifies code.
illustrator
Scene-level illustration generation. Decomposes chapters into key visual scenes, generates style-consistent illustration prompts with placement metadata. Fiction/nonfiction.
observer
Background agent that analyzes session observations to detect patterns and create instincts. Uses Haiku for cost-efficiency. v2.1 adds project-scoped instincts.
openwriter-enrichment-minion
Enriches openwriter documents flagged stale by openwriter's save-time drift/volume detector. Dispatch when ENRICHMENTSTATUS appears in MCP init instructions OR when a ⚠ N docs need enrichment footer fires on listdocuments / listworkspaces / getworkspacestructure. Reads each dirty doc and stamps it with a single field…