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.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 50ce21866f127a33214222f77e3d321172c7a006

29GitHub stars
Not availablestars in 7 days
1skill in this repository
8commits in 30 days

Heat

Insufficient history

Not 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

Nov 3, 2026Nov 5, 202629

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 tokens

Always available to the agent

SKILL.md

711 tokens

When the skill is activated

Reference documents

13,068 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. 执行
  2. 边界

Scripts executed separately

  • scripts/daily_report.py
  • scripts/group_nicknames.py
  • scripts/layout_check.py
  • scripts/report_view.py
  • scripts/run_daily.py
  • tests/test_daily_report.py
  • tests/test_examples.py
  • tests/test_group_nicknames.py
  • tests/test_reference_layout.py
  • tests/test_run_daily.py

Files

  • .github/workflows/test.ymlasset2,724 bytes
  • .gitignoreasset210 bytes
  • LICENSEasset1,068 bytes
  • README.mddoc14,527 bytes
  • SKILL.mdcore2,699 bytes
  • SKILL.mdcore2,699 bytes
  • SKILL.mdcore2,699 bytes
  • SKILL.mdcore2,699 bytes
  • agents/interface.yamlasset1,262 bytes
  • agents/openai.yamlasset1,262 bytes
  • assets/config.example.jsonasset360 bytes
  • docs/ecosystem.mddoc3,345 bytes
  • evals/semantic_config.jsonasset765 bytes
  • evals/trigger_cases.jsonasset1,204 bytes
  • examples/README.mddoc2,533 bytes
  • examples/editorial.jsonasset3,139 bytes
  • examples/group-messages.jsonasset2,781 bytes
  • examples/preview.htmlasset12,143 bytes
  • examples/preview.mddoc2,977 bytes
  • examples/preview.pngasset822,738 bytes
  • references/contracts.mddoc7,208 bytes
  • references/editorial.mddoc7,566 bytes
  • references/scheduling.mddoc4,684 bytes
  • references/workflow.mddoc4,403 bytes
  • requirements.txtdoc515 bytes
  • scripts/daily_report.pyruns42,842 bytes
  • scripts/group_nicknames.pyruns7,373 bytes
  • scripts/layout_check.pyruns4,022 bytes
  • scripts/report_view.pyruns14,881 bytes
  • scripts/run_daily.pyruns23,370 bytes
  • tests/test_daily_report.pyruns13,835 bytes
  • tests/test_examples.pyruns4,775 bytes
  • tests/test_group_nicknames.pyruns8,240 bytes
  • tests/test_reference_layout.pyruns7,720 bytes
  • tests/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 GitHub

Skills 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 shell

Automated 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:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • examples/preview.html:52 Analysis incomplete: physical or joined line exceeds character limit
  • examples/preview.html:50 Analysis incomplete: physical or joined line exceeds character limit
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

  • Network accessline 25
    git clone https://github.com/Rion-Wu-tech/wechat-intelligence-hub.git
  • Network accessline 30
    仓库地址:<https://github.com/Rion-Wu-tech/wechat-intelligence-hub>

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

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 144
    [Credential-related source omitted]

scripts/group_nicknames.py

  • Executable scriptline 1
    Executable file

scripts/layout_check.py

  • Executable scriptline 1
    Executable file

scripts/report_view.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 29
    [Credential-related source omitted]

scripts/run_daily.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 35
    [Credential-related source omitted]
  • Access to secretsline 203
    [Credential-related source omitted]
  • Access to secretsline 331
    [Credential-related source omitted]
  • Access to secretsline 368
    [Credential-related source omitted]

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

  • Executable scriptline 1
    Executable file
  • Possible obfuscationline 55
    self.assertEqual(names.parse_group_nicknames(b'\xff\xff\xff\xff'), {})

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

and 39 more

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeCompatibleStandard SKILL.md SKILL.md.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard 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.