Product Positioning and Routing
Generate a high-frequency information outreach package for existing clients. Typical frequency is daily, weekly, or triggered by major events, with the goal of continuously providing useful information and maintaining relationships, without repeatedly producing complete industry research.
| Dimension | legal-client-brief |
legal-industry-report |
|---|---|---|
| Usage Stage | Daily/Weekly Incremental Tracking | Monthly/Quarterly Comprehensive Research |
| Core Relationship | Existing Client Maintenance | Market Display and Prospect Acquisition |
| Information Scope | New changes within this window | Industry panorama, structure, and trends |
| Delivery | Briefing + WeChat Moments + Official Account | One formal report |
| Visual Tone | Compact, mobile-friendly | Formal, institutional, retainable |
| Status | Always stop first at DRAFT |
PUBLIC_REVIEW |
When the user needs to produce a long-term displayable monthly or quarterly report, switch to legal-industry-report. This skill must not re-publish the full text of the previous issue after changing the date; when there is no effective increment, it should output "No important changes worth reaching out about in this issue" rather than padding the list.
Real Capability Boundaries
This skill is responsible for "running one issue": reading the profile, limiting the window, retrieval, verification, drafting three channel copies, validation, and local packaging. Pure cron, launchd, or CI can only repackage existing Markdown; periodic research must be triggered by an Agent scheduler capable of online research.
This skill does not send WeChat, WeChat Moments, official account, email, or client system messages, does not automatically remove DRAFT, and does not modify the source whitelist. All publishing actions are completed by the lawyer outside this skill.
Inputs and Configuration
For first-time use, copy and fill in:
config/report-profile.example.md→config/report-profile.md: Brand, editor, and briefing visuals.config/audience-profile.example.md→config/audience-profile.md: De-identified industry profiles, business priorities, and risk themes of existing clients.config/sources-whitelist.example.txt→config/sources-whitelist.txt: Domains allowed to be cited in the body and the two channel copies.- Optional:
config/industry-rules.local.example.yaml→config/industry-rules.local.yaml: Supplementary rules for subdivided industries.
Real configuration is excluded by the root directory .gitignore ; if any of the first three items is missing, stop and do not generate client-facing drafts with default values.
Parameters for each issue:
| Parameter | Required | Default | Description |
|---|---|---|---|
period_start / period_end |
Yes | None | Incremental information window |
cadence |
Yes | None | daily、weekly or event |
industry_keywords |
No | Client profile | Search terms for this issue |
previous_cutoff |
No | Previous issue cutoff date | Deduplication and determining new changes |
max_items |
No | 5 | Maximum number of key changes |
Permissions and Security Boundaries
This skill sends de-identified keywords to whitelisted public websites or user-authorized databases, reads local configuration and templates, and writes Markdown, HTML, PDF, metadata, and a review checklist.
Customer profiles only include industry, size range, business stage, and risk themes; avoid full names of real customers, contact accounts, undisclosed business data, and unnecessary personal information about natural persons. Pages outside the whitelist may be used for lead discovery, but must not enter the fact chain, main text, Moments posts, or official account posts.
Single-issue generation process
-
Load window and profile: check the configuration, confirm
cadence / period_start / period_end / previous_cutoff。 -
Parse industry rules:
python3 scripts/resolve_industry_rules.py \ --industry "<行业>" \ --mode brief \ --output <追踪计划.json>The rule pack provides events to monitor and customer-relevant questions, but candidate sources must still pass the local whitelist.
-
Find only increments: record the title, publisher, publication date, URL, whether it is within the window, new changes relative to the previous issue, relationship to the customer profile, and reason for adoption/rejection.
-
Select 1–5 signals: prioritize items that are "new, true, relevant to the customer, and convertible into action." Do not pad the count when there is insufficient value.
-
Verify cases: cases must have a case number, court, judgment date, verification link, and verification date; if verification is impossible, write "No verifiable cases were included in this issue."
-
Draft the three-piece set:
templates/brief-skeleton.md: complete briefing that explains the changes, customer relevance, and action recommendations.templates/moments-copy.md: short Moments copy, highlighting one core signal and one action prompt.templates/wechat-draft.md: draft official account article, suitable for mobile reading and retaining sources and disclaimer.
-
Run gates:
python3 scripts/validate_report.py \ --kind brief \ --input <客户简报_DRAFT.md> \ --whitelist config/sources-whitelist.txt python3 scripts/validate_channels.py \ --moments <朋友圈_DRAFT.md> \ --wechat <公众号_DRAFT.md> \ --whitelist config/sources-whitelist.txt \ --brief <客户简报_DRAFT.md> -
Build draft package:
python3 scripts/build_report.py \ --kind brief \ --input <客户简报_DRAFT.md> \ --moments-copy <朋友圈_DRAFT.md> \ --wechat-draft <公众号_DRAFT.md> \ --profile config/report-profile.md \ --audience-profile config/audience-profile.md \ --whitelist config/sources-whitelist.txt \ --cadence weekly \ --period-start <YYYY-MM-DD> \ --period-end <YYYY-MM-DD> -
Visual and manual review: render all PDF pages as images, check compactness, tables, cropping, and abnormal blank space; open sources one by one, and review legal meaning and channel expression.
-
Stop at DRAFT: report only local paths, automated gate results, and matters pending manual judgment.
Three-channel writing discipline
- Complete briefing: answer "what happened, why it is relevant to this type of customer, and what can be done now."
- Moments: one core judgment, at most three key points, and one lightweight action prompt; do not pile up links and do not write definitive conclusions about individual cases.
- Official account: the title and lead may be shareable, but the main text must still retain factual boundaries, sources, and disclaimer; marketing slogans must not be written as legal conclusions.
- The facts, dates, and conclusion direction of the three drafts must be consistent; channel compression may only reduce information and must not change facts.
Output contract
客户简报_<audience>_<cadence>_<period_end>_DRAFT.md- Same name
.html、.pdf、.meta.json、.checklist.md 朋友圈_<audience>_<period_end>_DRAFT.md公众号_<audience>_<period_end>_DRAFT.md
Metadata status is fixed as DRAFT, binding the hashes of the three Markdown files, PDF, profile, whitelist, and brand configuration.
Hard Fail
Stop if any of the following occurs:
- The three required configurations are missing, empty, or
report_kindis notbrief。 - Any file in the three-piece set is missing
_DRAFTfilename or main-text DRAFT marker. - Residual placeholders,
[P?]or standalone...。 - Any file contains a URL outside the whitelist.
- A key change is not within the window, or the new change relative to the previous issue is not explained.
- The case evidence fields are incomplete and have not been rewritten as "No verifiable cases were included in this issue."
- The three drafts conflict on facts, or present industry information as definitive legal advice for a specific client.
- The PDF is empty, not A4, visibly cropped/overlapping/garbled, or contains abnormal blank pages.
- Any automatic sending, external push, or automatic removal of
DRAFTpaths.
Automated gates do not prove that legal judgments and channel propagation effects are correct; before lawyer review, keep NOT_VERIFIED。
Scheduling
Read only one according to the deployment environment:
- Agent automation platform:
deploy/workbuddy-deploy.md - OpenClaw or other Agent scheduler:
deploy/openclaw-deploy.md - Pure cron / launchd / CI capability boundaries:
deploy/generic-cron-deploy.md
Dependencies
Unified installation of Python packages:
python3 -m pip install -r scripts/requirements.txt
python3 -m playwright install chromium
Mermaid CLI is an optional dependency:npm install -g @mermaid-js/mermaid-cli. When missing, it degrades to a code block; the script will not install it automatically.
Read on demand
- Industry rules:
references/industry-rules.yaml - Full briefing and channel templates:
templates/brief-skeleton.md、templates/moments-copy.md、templates/wechat-draft.md - Manual review:
templates/checklist-template.md - Visual specifications:
references/design-spec.md - Troubleshooting: run in sequence
validate_industry_rules.py、industry_rules_selftest.py、validate_report_selftest.py、validate_channels_selftest.py