Not in the top 1,000 by GitHub stars
kbwzy/wechat-group-daily-report
Turn a WeChat group's day into a verifiable illustrated report (PNG/HTML/Markdown) — evidence-bound editorial, read-only, offline-runnable examples
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 50ce21866f12
No earlier version was observed for comparison.
Heat
Insufficient historyNot enough history yet to measure heat. It appears after a few days of data.
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
How it works
wechat-group-daily-report
When your agent uses it
单群图文日报:将指定微信群一天或明确时间段的聊天,编辑为结论式话题卡、观点总结、选题线索、个人提醒和今日链接,输出 PNG 长图、HTML、Markdown。用于群聊总结、单群日报、群日报长图及每日定时生成;依托 wechat-intelligence-hub 读取证据。不负责跨群综合情报、联系人私聊、商机状态更新或微信发送。
What it loads into context
Frontmatter
111 tokensAlways available to the agent
SKILL.md
711 tokensWhen the skill is activated
Reference documents
13,068 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 执行
- 边界
Scripts executed separately
scripts/daily_report.pyscripts/group_nicknames.pyscripts/layout_check.pyscripts/report_view.pyscripts/run_daily.pytests/test_daily_report.pytests/test_examples.pytests/test_group_nicknames.pytests/test_reference_layout.pytests/test_run_daily.py
Files
.github/workflows/test.ymlasset2,724 bytes.gitignoreasset210 bytesLICENSEasset1,068 bytesREADME.mddoc14,527 bytesSKILL.mdcore2,699 bytesSKILL.mdcore2,699 bytesSKILL.mdcore2,699 bytesSKILL.mdcore2,699 bytesagents/interface.yamlasset1,262 bytesagents/openai.yamlasset1,262 bytesassets/config.example.jsonasset360 bytesdocs/ecosystem.mddoc3,345 bytesevals/semantic_config.jsonasset765 bytesevals/trigger_cases.jsonasset1,204 bytesexamples/README.mddoc2,533 bytesexamples/editorial.jsonasset3,139 bytesexamples/group-messages.jsonasset2,781 bytesexamples/preview.htmlasset12,143 bytesexamples/preview.mddoc2,977 bytesexamples/preview.pngasset822,738 bytesreferences/contracts.mddoc7,208 bytesreferences/editorial.mddoc7,566 bytesreferences/scheduling.mddoc4,684 bytesreferences/workflow.mddoc4,403 bytesrequirements.txtdoc515 bytesscripts/daily_report.pyruns42,842 bytesscripts/group_nicknames.pyruns7,373 bytesscripts/layout_check.pyruns4,022 bytesscripts/report_view.pyruns14,881 bytesscripts/run_daily.pyruns23,370 bytestests/test_daily_report.pyruns13,835 bytestests/test_examples.pyruns4,775 bytestests/test_group_nicknames.pyruns8,240 bytestests/test_reference_layout.pyruns7,720 bytestests/test_run_daily.pyruns14,676 bytes
Read SKILL.md
# 微信个人情报助手 · 单群图文日报
目标是让人读懂发生了什么、讨论揭示了什么,不是聊天缩写。保留情报库原功能。
## 执行
1. 读 [流程](references/workflow.md)。准确群名与半开时间窗必须明确;定时默认用户时区昨日自然日,不能混用机器日期。
2. 已有原始 JSON 就复用;最新请求限定单群刷新,不运行全微信扫描。不把旧摘要当消息源。
3. 发言人默认用**群昵称**(`names` 子命令或 `--names auto --chat-id` 生成映射);只有显式 `--name-mode display` 才用联系人备注/昵称。用 `scripts/daily_report.py prepare` 生成素材与证据 ID;读完整素材和 [编辑准则](references/editorial.md),按format_version=2写 `editorial.json`。像熟悉群聊的编辑说话,姓名加粗、重点句高亮、总结轻快但不虚构。不允许停在骨架或机器初筛。
4. 用 `validate --strict` 校验并修正,再 `render --png`。固定模板和版式合同,不让模型自由设计HTML。PNG失败仍交Markdown/HTML,明确降级,不能声称出图成功。
5. 交付最终三种文件与覆盖说明;JSON/素材仅供本机核查。
```bash
python3 "$SKILL/scripts/daily_report.py" names --chat-id "$CHATROOM_ID" --out "$NAMES_JSON" # 首次/昵称有变时View the complete source on GitHubSkills included
- wechat-group-daily-report
Repository facts
- License
- MIT
- Created
- Oct 24, 2026
- Last pushed
- Oct 24, 2026
- Forks
- 6
- Open issues
- 0
- Project activity
- Active
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 5, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 5 notes
SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedexamples/preview.html:52Analysis incomplete: physical or joined line exceeds character limitexamples/preview.html:50Analysis incomplete: physical or joined line exceeds character limit
- No broad tool permissions
- 3 dangerous shell commandsin 3 files: .github/workflows/test.yml:53 README.md:75 examples/README.md:23
- 76 network referencesin 9 files: tests/test_daily_report.py:21 tests/test_reference_layout.py:12 README.md:11 and 6 more
- 1 obfuscation signalin 1 file: tests/test_group_nicknames.py:55
- 5 instruction override signalsin 3 files: tests/test_run_daily.py:68 README.md:191 references/scheduling.md:39
- 10 executable scriptsin 10 files: scripts/daily_report.py:1 scripts/group_nicknames.py:1 scripts/layout_check.py:1 and 7 more
- 10 references to secretsin 4 files: scripts/run_daily.py:35 tests/test_run_daily.py:204 scripts/daily_report.py:144 and 1 more
- No requests to vote in Hot
Show all 105 signals by file
.github/workflows/test.yml
- Dangerous shell operationline 53
rm -rf /tmp/deg
README.md
- Network accessline 11
<p align="center"> <a href="https://github.com/kbwzy/wechat-group-daily-report/actions/workflows/test.yml"><img alt="test" src="https://github.com/kbwzy/wechat-group-daily-report/actions/workflows/test.yml/badge.svg"></a> - Network accessline 12
<a href="https://github.com/kbwzy/wechat-group-daily-report/actions/workflows/test.yml"><img alt="test" src="https://github.com/kbwzy/wechat-group-daily-report/actions/workflows/test.yml/badge.svg"></a> - Network accessline 13
<a href="https://www.python.org/downloads/"><img alt="Python 3.9+" src="https://img.shields.io/badge/python-3.9%2B-blue.svg"></a> - Network accessline 14
<a href="LICENSE"><img alt="MIT" src="https://img.shields.io/badge/license-MIT-green.svg"></a> - Network accessline 15
<img alt="stdlib only" src="https://img.shields.io/badge/runtime-stdlib%20only-brightgreen.svg"> - Network accessline 16
<img alt="read-only" src="https://img.shields.io/badge/WeChat-read--only-informational.svg"> - Dangerous shell operationline 75
RUN=/tmp/wechat-daily-demo && rm -rf "$RUN" - Network accessline 96
# 1. 克隆到 skills 根目录之外(或任意你放仓库的地方) git clone https://github.com/kbwzy/wechat-group-daily-report.git - Network accessline 97
git clone https://github.com/kbwzy/wechat-group-daily-report.git - Network accessline 127
|---|---|---|---| | Python | **3.9+**(3.13、3.14 实测可用) | 全部脚本;用到 `zoneinfo` | 是 | | [wechat-intelligence-hub](https://github.com/Rion-Wu-tech/wechat-intelligence-hub) | `v0.9.2-preview.2` 或更新 | 从本地微信库取数(`chat-history`、`members`、`sql`) | **实时 - Network accessline 128
| Python | **3.9+**(3.13、3.14 实测可用) | 全部脚本;用到 `zoneinfo` | 是 | | [wechat-intelligence-hub](https://github.com/Rion-Wu-tech/wechat-intelligence-hub) | `v0.9.2-preview.2` 或更新 | 从本地微信库取数(`chat-history`、`members`、`sql`) | **实时取数时必需** | | Playwr - Network accessline 129
| [wechat-intelligence-hub](https://github.com/Rion-Wu-tech/wechat-intelligence-hub) | `v0.9.2-preview.2` 或更新 | 从本地微信库取数(`chat-history`、`members`、`sql`) | **实时取数时必需** | - Network accessline 140
git clone https://github.com/Rion-Wu-tech/wechat-intelligence-hub.git - Network accessline 147
> **注意**:装好 ≠ 能读。完整数据库模式还需要你已经获得本机微信数据库的访问材料(key)。没有时 `doctor` 会失败,本 Skill 会如实报错并保留素材,不会退化成通知预览。接入请参考上游的 [五步首次接入工作流](https://github.com/Rion-Wu-tech/wechat-intelligence-hub/blob/main/skills/wechat-cli/references/access-onboarding.md)。 - Instruction override signalline 191
`run_daily.py` 会把「取数 → prepare → 调 Claude Code 写稿 → validate → render」串起来。编辑子进程只拿到 `Read,Write` 两个工具,跑在 restricted 模式,不给 Shell、浏览器和 MCP,也不会传 `--dangerously-skip-permissions`。详见 [`references/scheduling.md`](references/scheduling.md)。
docs/ecosystem.md
examples/README.md
- Dangerous shell operationline 23
RUN=/tmp/wechat-daily-demo && rm -rf "$RUN"
examples/editorial.json
- Network accessline 46
], "links": [ {"url": "https://example.org/export-postmortem", "title": "王五做的导出功能三个月复盘", "evidence_ids": ["E00003"]}, - Network accessline 47
"links": [ {"url": "https://example.org/export-postmortem", "title": "王五做的导出功能三个月复盘", "evidence_ids": ["E00003"]}, {"url": "https://example.org/analytics-basics", "title": "按需求频次决定排期的基础方法", "evidence_ids": ["E00005"]}, - Network accessline 48
{"url": "https://example.org/export-postmortem", "title": "王五做的导出功能三个月复盘", "evidence_ids": ["E00003"]}, - Network accessline 49
{"url": "https://example.org/analytics-basics", "title": "按需求频次决定排期的基础方法", "evidence_ids": ["E00005"]}, - Network accessline 50
{"url": "https://example.org/pricing-guide", "title": "独立产品定价的详细说明", "evidence_ids": ["E00009"]}
examples/group-messages.json
- Network accessline 13
{"chat": "示例·独立开发者交流群", "sender": "张三", "time": "2026-10-20T09:12:00+08:00", "content": "想给我那个记账小工具加一个导出 PDF 的按钮,你们觉得值不值?", "source_file": "example"}, {"chat": "示例·独立开发者交流群", "sender": "李四", "time": "2026-10-20T09:15:00+08:00", "content - Network accessline 14
{"chat": "示例·独立开发者交流群", "sender": "李四", "time": "2026-10-20T09:15:00+08:00", "content": "先别做。上个月你说要加的那个都没人点,导出这种功能做出来大概率也是放着。", "source_file": "example"}, {"chat": "示例·独立开发者交流群", "sender": "王五", "time": "2026-10-20T09:20:00+08:00", "con - Network accessline 15
{"chat": "示例·独立开发者交流群", "sender": "王五", "time": "2026-10-20T09:20:00+08:00", "content": "我真做过导出,做完三个月一共 7 次点击。复盘写在这里 https://example.org/export-postmortem", "source_file": "example"}, - Network accessline 16
{"chat": "示例·独立开发者交流群", "sender": "李四", "time": "2026-10-20T09:31:00+08:00", "content": "补充一下,你那个不是导出没用,是入口藏在设置第三层。导出本身是要的,位置不对而已。", "source_file": "example"}, {"chat": "示例·独立开发者交流群", "sender": "孙七", "time": "2026-10-20T10:05:00+08:00", - Network accessline 17
{"chat": "示例·独立开发者交流群", "sender": "孙七", "time": "2026-10-20T10:05:00+08:00", "content": "我们做法是先看有没有人问过,过去半年客服记录里出现两次以上才排期。基础方法可以参考 https://example.org/analytics-basics", "source_file": "example"}, - Network accessline 19
{"chat": "示例·独立开发者交流群", "sender": "孙七", "time": "2026-10-20T11:02:00+08:00", "content": "自己想的。名字唯一要过的是注册和搜索,先查重再纠结好不好听。", "source_file": "example"}, {"chat": "示例·独立开发者交流群", "sender": "张三", "time": "2026-10-20T14:02:00+08:00", "content": - Network accessline 20
{"chat": "示例·独立开发者交流群", "sender": "张三", "time": "2026-10-20T14:02:00+08:00", "content": "@示例读者 你那个日报工具最后加导出了吗?我想参考一下。", "source_file": "example"}, {"chat": "示例·独立开发者交流群", "sender": "王五", "time": "2026-10-20T16:30:00+08:00", "content": " - Network accessline 21
{"chat": "示例·独立开发者交流群", "sender": "王五", "time": "2026-10-20T16:30:00+08:00", "content": "定价这篇讲得比较细 https://example.org/pricing-guide 有需要的自取。", "source_file": "example"},
examples/preview.html
- Network accessline 50
@media(max-width:360px){.stat b{font-size:18px}.stats{gap:7px}.card{padding:14px}.rank li{grid-template-columns:98px minmax(0,1fr)}} @media print{.card{break-inside:avoid}} </style></head><body><main class="page" data-layout="editorial-v2"> - Network accessline 52
</style></head><body><main class="page" data-layout="editorial-v2"><header><p class="meta">2026-10-20(周二) · 00:00 – 24:00</p><h1>示例·独立开发者交流群<br>今日内容总结</h1><p class="lede">今天两件事:该不该加导出,最后变成了入口该放哪;起名卡一周,答案其实是先去查重。</p></header><section class="
examples/preview.md
- Network accessline 63
- 09:20 **王五**|王五做的导出功能三个月复盘|[https://example\.org/export-postmortem](https://example.org/export-postmortem) - Network accessline 64
- 10:05 **孙七**|按需求频次决定排期的基础方法|[https://example\.org/analytics-basics](https://example.org/analytics-basics) - Network accessline 65
- 16:30 **王五**|独立产品定价的详细说明|[https://example\.org/pricing-guide](https://example.org/pricing-guide)
references/contracts.md
- Network accessline 59
], "links": [ {"url": "https://example.org/actual-source", "title": "有原消息依据的中文说明", "evidence_ids": ["实际含链接的ID"]} - Network accessline 60
"links": [ {"url": "https://example.org/actual-source", "title": "有原消息依据的中文说明", "evidence_ids": ["实际含链接的ID"]} ] - Network accessline 61
{"url": "https://example.org/actual-source", "title": "有原消息依据的中文说明", "evidence_ids": ["实际含链接的ID"]}
references/scheduling.md
- Instruction override signalline 39
run_daily 仅给编辑子进程 Read/Write 工具,restricted模式,无Shell/浏览器/搜索和MCP;当前Agent只编辑本轮文件,不承担采集与运行脚本。不会传 `--dangerously-skip-permissions`。模型处理使用已授权Claude Code会话对应服务,可能消耗额度/费用;本机取数、存储、截图不代表模型在本机。`local_only=true` 时桥接拒绝启动云端Agent,需明确配置本地编辑方案,不能悄悄回退。
scripts/daily_report.py
scripts/group_nicknames.py
- Executable scriptline 1
Executable file
scripts/layout_check.py
- Executable scriptline 1
Executable file
scripts/report_view.py
scripts/run_daily.py
tests/test_daily_report.py
- Executable scriptline 1
Executable file - Network accessline 21
{"chat":"群B","sender":"同名","time":"2026-10-01T12:30:00+08:00","content":"跨群不可引用","source_file":"b"}, {"chat":"群A","sender":"乙","time":"2026-10-02T00:00:00+08:00","content":"右端排除","source_file":"a"}, {"chat":"群A","sen - Network accessline 22
{"chat":"群A","sender":"乙","time":"2026-10-02T00:00:00+08:00","content":"右端排除","source_file":"a"}, {"chat":"群A","sender":"丙","time":"2026-10-01T13:00:00+08:00","content":"实用链接 https://example.org/post","source_file":"a"}, - Network accessline 23
{"chat":"群A","sender":"丙","time":"2026-10-01T13:00:00+08:00","content":"实用链接 https://example.org/post","source_file":"a"}, - Network accessline 24
{"chat":"群A","sender":"丁","time":"2026-10-01T13:01:00+08:00","content":"技术链接 https://weixin.qq.com/s/secret","source_file":"a"}, - Network accessline 25
{"chat":"群A","sender":"戊","time":"2026-10-01T13:02:00+08:00","content":"[红包]","source_file":"a"}, {"chat":"群A","sender":"长文","time":"2026-10-01T13:03:00+08:00","content":"长"*10000,"source_file":"a"}, {"chat":"群A","se - Network accessline 26
{"chat":"群A","sender":"长文","time":"2026-10-01T13:03:00+08:00","content":"长"*10000,"source_file":"a"}, {"chat":"群A","sender":"丙","time":"2026-10-01T13:04:00+08:00","content":"再看一次 https://example.org/post","source_file":"a"}, - Network accessline 27
{"chat":"群A","sender":"丙","time":"2026-10-01T13:04:00+08:00","content":"再看一次 https://example.org/post","source_file":"a"}, - Network accessline 74
def test_validate_rejects_vague_title_duplicate_insight_and_old_status(self): mat={"chat":"群A","message_count":1,"effective_evidence_count":1,"messages":[{"evidence_id":"E1","chat":"群A","time":"2026-01-01T10:00:00+08:00"}]} - Network accessline 75
mat={"chat":"群A","message_count":1,"effective_evidence_count":1,"messages":[{"evidence_id":"E1","chat":"群A","time":"2026-01-01T10:00:00+08:00"}]} ed={"lede":"明确导语","topics":[{"title":"AI 产品/模型","evidence_ids":["E1"],"bullets":[{"tex - Network accessline 76
ed={"lede":"明确导语","topics":[{"title":"AI 产品/模型","evidence_ids":["E1"],"bullets":[{"text":"同一条具体事实","evidence_ids":["E1"]}],"insight":"同一条具体事实","boundary":"证据有限,仅一条"}],"angles":[],"attention":[{"text":"可能应该回复","status":"待核实","evidence_ids":[ - Network accessline 82
self.assertTrue(any("topics_note" in e for e in mod.validate_data(mat,{"lede":"暂无","topics":[],"angles":[],"attention":[],"links":[]}))) def test_editorial_links_status_and_accessible_html(self): mat={"chat":"群A","since":"2026-0 - Network accessline 83
def test_editorial_links_status_and_accessible_html(self): mat={"chat":"群A","since":"2026-01-01T00:00:00+08:00","until":"2026-01-02T00:00:00+08:00","timezone":"Asia/Shanghai","message_count":1,"effective_evidence_count":1,"speaker_c - Network accessline 84
mat={"chat":"群A","since":"2026-01-01T00:00:00+08:00","until":"2026-01-02T00:00:00+08:00","timezone":"Asia/Shanghai","message_count":1,"effective_evidence_count":1,"speaker_count":1,"speakers":[{"name":"甲","count":1}],"messages":[{"evidence_ - Network accessline 85
ed={"lede":"群内有一项需要观察的进展","topics":[{"title":"项目进展仍待进一步确认","start":"2026-01-01T10:03:00+08:00","end":"2026-01-01T10:03:00+08:00","evidence_ids":["E1"],"bullets":[{"text":"甲提出了一个具体观察。","evidence_ids":["E1"]}],"insight":"现有证据不足以形成最终结论","bound - Network accessline 117
self.assertEqual(mod.inline_md('**张三** reads'), '**张三** reads') self.assertEqual(mod.md_escape('张三\nreads'), '张三 reads') self.assertEqual(mod.md_url('https://example.org/a(b)'), 'https://example.org/a%28b%29') - Network accessline 119
self.assertEqual(mod.md_url('https://example.org/a(b)'), 'https://example.org/a%28b%29') - Network accessline 124
self.assertEqual(cleaned,'本条回应') self.assertEqual(links,[]) cleaned,links=mod.clean_content('文章 https://mp.weixin.qq.com/s/readable 技术 https://wxapp.tc.qq.com/stodownload') - Network accessline 125
self.assertEqual(links,[]) cleaned,links=mod.clean_content('文章 https://mp.weixin.qq.com/s/readable 技术 https://wxapp.tc.qq.com/stodownload') self.assertEqual(links,['https://mp.weixin.qq.com/s/readable']) - Network accessline 126
cleaned,links=mod.clean_content('文章 https://mp.weixin.qq.com/s/readable 技术 https://wxapp.tc.qq.com/stodownload') - Network accessline 127
self.assertEqual(links,['https://mp.weixin.qq.com/s/readable']) - Network accessline 129
def test_url_glued_to_chinese_text_is_split_and_kept_clickable(self): cleaned,links=mod.clean_content('基于开源仓库 https://github.com/Rion-Wu-tech/wechat-intelligence-hub只读微信 ,然后适配下') - Network accessline 130
cleaned,links=mod.clean_content('基于开源仓库 https://github.com/Rion-Wu-tech/wechat-intelligence-hub只读微信 ,然后适配下') - Network accessline 131
self.assertEqual(links,['https://github.com/Rion-Wu-tech/wechat-intelligence-hub']) - Network accessline 135
def test_topic_times_cover_every_bullet_and_links_cannot_be_fabricated(self): mat={'chat':'群A','messages':[{'evidence_id':'E1','chat':'群A','time':'2026-01-01T10:00:00+08:00'},{'evidence_id':'E2','chat':'群A','time':'2026-01-01T11:00: - Network accessline 136
mat={'chat':'群A','messages':[{'evidence_id':'E1','chat':'群A','time':'2026-01-01T10:00:00+08:00'},{'evidence_id':'E2','chat':'群A','time':'2026-01-01T11:00:00+08:00'}],'links':[]} ed={'lede':'具体导语','topics':[{'title':'具体项目出现新变化','evid - Network accessline 137
ed={'lede':'具体导语','topics':[{'title':'具体项目出现新变化','evidence_ids':['E1'],'bullets':[{'text':'第一项观察','evidence_ids':['E1']},{'text':'后续出现纠正','evidence_ids':['E2']}],'insight':'先读后续修正再判断适用条件'}],'angles':[],'attention':[],'links':[{'url':'https:
tests/test_examples.py
- Executable scriptline 1
Executable file
tests/test_group_nicknames.py
tests/test_reference_layout.py
- Executable scriptline 1
Executable file - Network accessline 12
def fixture(): messages = [ {'evidence_id': 'A', 'chat': '测试群', 'sender': '甲', 'time': '2026-10-23T09:01:00+08:00', 'content': '先把剪辑流程做简单 https://example.org/guide', 'reply_to': ''}, - Network accessline 13
messages = [ {'evidence_id': 'A', 'chat': '测试群', 'sender': '甲', 'time': '2026-10-23T09:01:00+08:00', 'content': '先把剪辑流程做简单 https://example.org/guide', 'reply_to': ''}, {'evidence_id': 'B', 'chat': '测试群', 'sender': '乙', 'time - Network accessline 14
{'evidence_id': 'A', 'chat': '测试群', 'sender': '甲', 'time': '2026-10-23T09:01:00+08:00', 'content': '先把剪辑流程做简单 https://example.org/guide', 'reply_to': ''}, - Network accessline 17
mat = {'chat': '测试群', 'since': '2026-10-23T00:00:00+08:00', 'until': '2026-10-23T18:00:00+08:00', 'timezone': 'Asia/Shanghai', 'message_count': 2, 'effective_evidence_count': 2, 'speaker_count': 2, 'speakers': [{'name': '甲', 'cou - Network accessline 18
'message_count': 2, 'effective_evidence_count': 2, 'speaker_count': 2, 'speakers': [{'name': '甲', 'count': 1}, {'name': '乙', 'count': 1}], 'audience': {'owner_aliases': ['读者']}, 'messages': messages, 'links': [{'url': 'https://ex - Network accessline 19
'audience': {'owner_aliases': ['读者']}, 'messages': messages, 'links': [{'url': 'https://example.org/guide', 'evidence_ids': ['A']}], 'coverage': {}} - Network accessline 25
'angles': [{'title': '别给小需求配大装备', 'text': '**甲**这次的澄清,适合写成一次需求收窄练习。', 'evidence_ids': ['A', 'B']}], 'attention': [{'scope': 'direct', 'anchor_id': 'B', 'text': '**乙**已经接住你的问题,给出了简化方向。', 'status': '无需处理', 'evidence_ids': ['B']}], - Network accessline 26
'attention': [{'scope': 'direct', 'anchor_id': 'B', 'text': '**乙**已经接住你的问题,给出了简化方向。', 'status': '无需处理', 'evidence_ids': ['B']}], 'links': [{'url': 'https://example.org/guide', 'title': '剪辑流程参考', 'evidence_ids': ['A']}]} return - Network accessline 27
'links': [{'url': 'https://example.org/guide', 'title': '剪辑流程参考', 'evidence_ids': ['A']}]} - Network accessline 49
page = daily.render_html(mat, ed) self.assertIn('09:01 <strong>甲</strong>|剪辑流程参考|<a', page) self.assertIn('>https://example.org/guide</a>', page) - Network accessline 51
self.assertIn('>https://example.org/guide</a>', page) - Network accessline 108
changed = page.replace('>今日链接</h2>', '>资源推荐</h2>') self.assertTrue(any('栏目名称' in e for e in daily.local_module('layout_check').check_html(changed, mat, ed, 1))) changed = page.replace('>https://example.org/guide</a>', '>点击这里 - Network accessline 109
self.assertTrue(any('栏目名称' in e for e in daily.local_module('layout_check').check_html(changed, mat, ed, 1))) changed = page.replace('>https://example.org/guide</a>', '>点击这里</a>') self.assertTrue(any('实际URL' in e for e in da - Network accessline 110
changed = page.replace('>https://example.org/guide</a>', '>点击这里</a>')
tests/test_run_daily.py
- Executable scriptline 1
Executable file - Instruction override signalline 68
self.assertIn('--strict-mcp-config', command) self.assertEqual(command[command.index('--tools') + 1], 'Read,Write') self.assertNotIn('--dangerously-skip-permissions', command) - Instruction override signalline 69
self.assertEqual(command[command.index('--tools') + 1], 'Read,Write') self.assertNotIn('--dangerously-skip-permissions', command) self.assertNotIn('--model', command) - Instruction override signalline 70
self.assertNotIn('--dangerously-skip-permissions', command) - Access to secretsline 204
[Credential-related source omitted] - Access to secretsline 206
[Credential-related source omitted] - Access to secretsline 223
[Credential-related source omitted] - Access to secretsline 225
[Credential-related source omitted]
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Signal confidence: 89 facts
- Network access in prose of documentationREADME.md:11Low confidence
- Network access in prose of documentationREADME.md:12Low confidence
- Network access in prose of documentationREADME.md:13Low confidence
- Network access in prose of documentationREADME.md:14Low confidence
- Network access in prose of documentationREADME.md:15Low confidence
- Network access in prose of documentationREADME.md:16Low confidence
- Dangerous shell operation in code of documentationREADME.md:75Low confidence
- Network access in code of documentationREADME.md:96Low confidence
- Network access in code of documentationREADME.md:97Low confidence
- Network access in prose of documentationREADME.md:127Low confidence
- Network access in prose of documentationREADME.md:128Low confidence
- Network access in prose of documentationREADME.md:129Low confidence
- Network access in code of documentationREADME.md:140Low confidence
- Network access in prose of documentationREADME.md:147Low confidence
- Instruction override signal in prose of documentationREADME.md:191Low confidence
- Network access in code of documentationdocs/ecosystem.md:25Low confidence
- Network access in prose of documentationdocs/ecosystem.md:30Low confidence
- Dangerous shell operation in code of documentationexamples/README.md:23Low confidence
- Network access in prose of documentationexamples/preview.md:63Low confidence
- Network access in prose of documentationexamples/preview.md:64Low confidence
- Network access in prose of documentationexamples/preview.md:65Low confidence
- Network access in code of documentationreferences/contracts.md:59Low confidence
- Network access in code of documentationreferences/contracts.md:60Low confidence
- Network access in code of documentationreferences/contracts.md:61Low confidence
- Instruction override signal in prose of documentationreferences/scheduling.md:39Low confidence
- Executable script in code of a file that runsscripts/daily_report.py:1High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuescripts/daily_report.py:144Low confidence
- Executable script in prose of a file that runsscripts/group_nicknames.py:1Low confidence
- Executable script in prose of a file that runsscripts/layout_check.py:1Low confidence
- Executable script in prose of a file that runsscripts/report_view.py:1Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuescripts/report_view.py:29Low confidence
- Executable script in code of a file that runsscripts/run_daily.py:1High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuescripts/run_daily.py:35Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuescripts/run_daily.py:203Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuescripts/run_daily.py:331Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuescripts/run_daily.py:368Low confidence
- Executable script in code of a testtests/test_daily_report.py:1Low confidence
- Network access in code of a testtests/test_daily_report.py:21Low confidence
- Network access in code of a testtests/test_daily_report.py:22Low confidence
- Network access in code of a testtests/test_daily_report.py:23Low confidence
- Network access in code of a testtests/test_daily_report.py:24Low confidence
- Network access in code of a testtests/test_daily_report.py:25Low confidence
- Network access in code of a testtests/test_daily_report.py:26Low confidence
- Network access in code of a testtests/test_daily_report.py:27Low confidence
- Network access in code of a testtests/test_daily_report.py:74Low confidence
- Network access in code of a testtests/test_daily_report.py:75Low confidence
- Network access in code of a testtests/test_daily_report.py:76Low confidence
- Network access in code of a testtests/test_daily_report.py:82Low confidence
- Network access in code of a testtests/test_daily_report.py:83Low confidence
- Network access in code of a testtests/test_daily_report.py:84Low confidence
and 39 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Compatible | Standard SKILL.md SKILL.md | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.