Positioning
The outbound outreach side of retention.The consumer is the client—turn "proactively reaching out to clients" into a scheduled task, rather than sending only when you remember to.
This skill is part of the XX Lawyer Legal AI Course System (see 知识整理/课程体系/XX 律师法律AI课程主题体系.md) inthe outreach end of the client relationship main axis. Skill 1 (industry-research-report) handles the client acquisition side background intelligence, while this skill handles scheduled outreach on the retention side, with reusable materials produced in between through the existing suite (legal-proposal-generator / litigation-analysis).
⚠️ Hard constraints(The boundaries of this skill are completely different from Skill 1; this is the core reason the two skills are not merged)
- Never automatically send externally — the output of this skill is always
_DRAFTa draft; email / WeChat group sending / client system push are all not done, and the publishing action is physically left to humans - Whitelist source system — sources not in
config/sources-whitelist.txtare never included in the draft - Cases must carry case numbers — anything included in the "Case Studies" section must be verifiable through public channels; cases whose case numbers cannot be found are not included in the draft
- Configuration first — before the first run, you must first fill in
config/report-profile.md(personalization) +config/sources-whitelist.txt(source whitelist) +config/audience-profile.md(client profile) - Scheduling after deployment is handled by the platform — this skill is only responsible for "running one issue"; scheduling is handled by platforms such as WorkBuddy / OpenClaw / Claude Code cron
Trigger scenarios
- "I want to set up a legal weekly briefing for XX client"
- "From now on, send a legal research report to the client every Monday"
- "The client wants a legal weekly briefing; how do we implement it"
- "Automatically generate a legal newsletter for the XX industry every week"
- "Set up a scheduled task to run a weekly briefing every week"
Key differences from Skill 1
| Dimension | Skill 1 industry-research-report | Skill 2 weekly-legal-briefing |
|---|---|---|
| Purpose | Client acquisition (for lawyers' own use) | Retention (for clients to read) |
| Output | Single in-depth report | Periodic lightweight weekly briefing |
| Source discipline | Priority tiers (P1-P5), non-P5 labeling | Strict whitelist; items outside the whitelist are discarded by default |
| Quality gates | Disclaimer + traceability appendix | DRAFT gate + case number verification + clickable sources |
| Lifecycle | Fast-moving consumable | Subscription asset, accumulated in archives |
| Scheduling | Pull on demand | Scheduled push (platform-driven after deployment) |
| Output suffix | {industry}_{region}_{YYYYMMDD}.pdf |
..._第N期_DRAFT.pdf |
Personalized configuration (three files, required for first deployment)
First-run wizard (first use · one-time)
Same as Skill 1: see
industry-research-report/SKILL.md"First-run wizard" section. The Agent uses the harness's actual questioning mechanism (not tied to a fixed tool) to ask all 7 core questions at once (firm name / series name / primary color / design intensity / cover variant / lead attorney / contact info), and writes them intoconfig/report-profile.md(gitignore), and all subsequent weekly reports read from here.
1. config/report-profile.md(required, inherits Skill 1's system)
Shares the same configuration fields with Skill 1 (primary color / accent color / palette group / cover variant / design intensity all inherit the 5 palettes from v0.3.0); see
config/report-profile.example.md. This skill adds two more fields on top of Skill 1's fields:
| Field | Default | Description |
|---|---|---|
audience_label |
科技型制造企业 |
Client persona tag, displayed in the "Target Readers" slot on the cover |
period_label |
第 N 期 · {YYYY-MM-DD} |
Issue number tag template, replaced per issue when render.py renders |
2. config/audience-profile.md(required, client persona)
Determines the baseline for topic filtering and source whitelist matching. Suggested structure:
## 客户画像
- industry_focus: [科技型制造 / 具身智能 / 低空经济 / ...]
- employee_scale: [500-2000 人 / 2000+ 人 / ...]
- business_focus: [劳动 / 知识产权 / 投融资 / 跨境合规 / ...]
- risk_focus: [竞业限制 / 商业秘密 / 股权激励 / 数据合规 / ...]
## 选题优先级(决定本期选哪 3-5 条)
- 高频议题: [...]
- 行业动态: [...]
- 监管动向: [...]
## 联系人
- editor: {本期编辑署名}
- contact_wechat: {微信号}
- contact_phone: {电话}
3. config/sources-whitelist.txt(required, whitelisted sources)
One domain or WeChat official account ID per line,sources outside the whitelist are discarded by default. Suggested starting point:
# 官媒
xinhuanet.com
people.com.cn
jjjcb.com # 经济参考报
stcn.com # 证券时报
cs.com.cn # 中国证券报
21jingji.com # 21 世纪经济报道
yicai.com # 第一财经
# 法律法规
gov.cn # 国务院
court.gov.cn # 最高人民法院
chinacourt.org # 中国法院网
pkulaw.com # 北大法宝(仅法规原文链接)
# 行业协会
caam.org.cn # 中国汽车工业协会
semi.org.cn # SEMI 中国
# 律所与法律自媒体(按需)
zhichanlaw.com # 知产力
iphouse.cn # IPR Daily
Whitelist update rule: only the lawyer themself may add or remove entries; AI must not be allowed to automatically expand the list.
IO Contract
Input
Configuration (one-time):config/report-profile.md + config/audience-profile.md + config/sources-whitelist.txt
Runtime parameters (each run):
--period-number N: issue number (by default automatically increments based on existing files in archive/)--industry-keywords [k1 k2 ...]: the featured topic for this issue (by default extracted from the "Topic Priority" in audience-profile.md)
Outputs (marked with _DRAFT, never remove DRAFT)
archive/法律周报_{audience}_{YYYY}第{N}期_DRAFT.md—— intermediate draftarchive/法律周报_{audience}_{YYYY}第{N}期_DRAFT.pdf—— final draft (A4 fine layout, bluebook style)archive/法律周报_{audience}_{YYYY}第{N}期_DRAFT.meta.json—— metadata (including source list, case number list, generation time)
Publishing action: after manual review passes, remove the
_DRAFTsuffix (e.g.cp ..._DRAFT.pdf ..._V1.pdf),Prohibited to automatically rename or automatically send via this skill.
Research report skeleton (mandatory five-section format)
- This Issue's Highlights —— 3-5 items, by section (e.g. tax / labor / social security base)
- Case Studies —— typical cases focused on audience_profile,must include case number + source
- This Week's Developments —— summaries of whitelisted sources, with source and date noted for each item
- Three practical tips for such enterprises
- Footer —— editor of this issue / contact phone (audience-profile placeholder)
Full template see
templates/briefing-skeleton.md, all five sections must be complete.
Data source dependencies
Search discipline (whitelist system)
- Only search
config/sources-whitelist.txtthe domains / official accounts listed in - Hit a non-whitelisted source → discard, do not annotate, do not include in the draft
- Key conclusions must be cross-verified by at least 2 whitelisted sources
Case verification
- Each case included in the "Case Studies" section must includecase number + trial court + judgment date
- The case number must be searchable on
https://wenshu.court.gov.cn(China Judgments Online) - Cases whose case numbers cannot be foundare not included in the draft, instead marked as "recent similar cases (case number pending)"
SOP (single generation process)
- Load configuration —— three config files; if any is missing, abort and prompt
- Topic extraction —— Take 3-5 items from the "topic priorities" in audience-profile.md or this issue's --industry-keywords
- Whitelist source search —— Search the web for each topic, filtering out results outside the whitelist
- Case verification —— Check each case study candidate one by one against case numbers on China Judgements Online, filtering out entries whose case numbers cannot be found
- Generate markdown —— Fill in according to the five-section format of briefing-skeleton.md
- Render PDF —— Same pipeline as Skill 1 (render.py + pdf.py, blue book format)
- Write metadata + archive —— Append metadata JSONL incrementally to
archive/_meta.jsonl, to facilitate the aggregation of materials for the annual service report - Hard stop at DRAFT —— This skill physically ends at this step; automatic renaming / pushing is not allowed
Quality discipline
- Source whitelist system —— Sources not on the whitelist are never included in the draft
- Cases must include case numbers —— Must include case number / trial court / judgment date; the case number must be verifiable on China Judgements Online
- Post-generation self-check list —— Automatically generate one per issue
archive/法律周报_..._DRAFT.checklist.mdlisting: each source is clickable / dates fall within the current issue / no speculative statements - Manual review before publication —— Skill output always stops at DRAFT; this is a hard rule
Rendering pipeline (same origin as Skill 1, blue book format)
briefing-skeleton.md (填充后的 md)
→ scripts/render.py # md → A4 HTML
→ references/report-template.html + references/covers/cover-{C,D,E,F}.html
→ scripts/pdf.py # HTML → PDF
Differences from the Skill 1 rendering pipeline:
- Cover kicker field:
本期 · 法律周报 · 第 N 期 - Footer right side:
footer_branddefaults to法律周报 · 第 N 期 - Metadata page: one additional item "number of whitelist source hits / number of cases / word count of this issue", to facilitate review
For detailed design specifications, see
references/design-spec.md(same origin as Skill 1, sharing the:rootvariable).
Scheduling hookup (platform-agnostic design)
The skill itself only handles "running one issue"; scheduling is handled by the deployment platform. Write one deployment note for each of the two platforms:
WorkBuddy automation task
See deploy/workbuddy-deploy.md. Three-piece set:
- Name:
{audience} 法律周报 - Working time: every Monday 09:00
- Prompt: call
python3 scripts/render.py ... && python3 scripts/pdf.py ...
OpenClaw / Claude Code cron
See deploy/openclaw-deploy.md. Three-piece set:
- Name:
{audience} 周报 - cron:
0 9 * * 1(every Monday 09:00) - Command:
python3 scripts/render.py -i ... && python3 scripts/pdf.py -i ... - Channel push: can push
_DRAFT.pdfto the channel, butthe publish action still requires manual confirmation in the channel reply
Other platforms (crontab / launchd / Cloud Functions)
See deploy/generic-cron-deploy.md。
Acceptance criteria
- Run 4 consecutive issues (simulating one month, running once every Monday)
- Sources outside the whitelist 0 leaks(verified by sampling)
- Case section spot check: case numbers 100% verifiable through public channels
- Review experience: manual from DRAFT to publishable ≤ 15 minutes/issue(exceeding this indicates the generation quality is substandard, requiring adjustment of the whitelist or topics)
What v1 does not do (minimum viable boundary)
- No automatic outbound sending (email/WeChat mass sending is never done; publishing is always manual)
- No multi-client personalization (v1 single audience; v2 will do audience multi-configuration split reports)
- No fine typography polishing (headers and footers use preset Blue Book templates)
- No connection to the Yuandian case database (whitelist sources + case number re-verification is already enough for v1 validation)
- No intelligent topic selection (v1 topics come from explicit declarations in audience-profile.md)
v2 iteration direction
- Multi-client split reports: derive N copies from one set of materials according to audience_profile
- Annual service report linkage: weekly report archives serve as the "workload evidence source" for the annual report (file naming rules aligned) — the endpoint of the client relationship main axis on the reach side
- Orchestration with industry-research-report: use Skill 1 to build background for new industry clients (customer acquisition), use Skill 2 for continuous tracking (retention), and use the existing suite in the middle — the full chain of the client relationship main axis v2 takes shape
- Automatic topic selection(controlled): AI automatically suggests 3-5 candidates based on audience_profile, and generates after manual selection
Troubleshooting
| Symptom | Troubleshooting |
|---|---|
sources-whitelist.txt 不存在 |
Copy config/sources-whitelist.example.txt as config/sources-whitelist.txt, fill in the real whitelist |
audience-profile.md 不存在 |
Copy config/audience-profile.example.md as config/audience-profile.md |
| All items in the case section were removed | All case number re-verifications failed → first troubleshoot China Judgments Online connectivity + case number format |
| Source hit rate < 50% | The whitelist may be too strict; follow the references/source-priority.md prompt to expand |
playwright 未安装 |
Same as Skill 1 |
| Automatic outbound sending triggered by mistake | Impossible— this skill has no outbound sending code path; if outbound sending is needed, please handle it manually |
Referenced resources
- Template:
templates/briefing-skeleton.md/templates/checklist-template.md - Design:
references/report-template.html/references/design-spec.md/references/covers/cover-{C,D,E,F}.html(same source as Skill 1) - Script:
scripts/render.py/scripts/pdf.py(same source as Skill 1, can be reused directly) - Configuration:
config/report-profile.example.md/config/audience-profile.example.md/config/sources-whitelist.example.txt - Deployment:
deploy/workbuddy-deploy.md/deploy/openclaw-deploy.md/deploy/generic-cron-deploy.md - Archiving:
archive/(_meta.jsonlaccumulate, facilitating annual service report aggregation)