renewal-tracker
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
Chinese/renewal-tracker
/renewal-tracker
Surfaces what's renewing and when you have to cancel by.
展示即将续约的事项以及对应的取消截止日期。
Instructions
使用说明
-
Read(the config directory — survives plugin updates).
~/.claude/plugins/config/claude-for-legal/commercial-legal/renewal-register.yaml -
Default mode: Mode 2 — what's coming up in the next 90 days, grouped by urgency using half-open intervals so each deadline lands in exactly one band: 🔴 0–13 days, 🟠 14–44 days, 🟡 45–89 days. Days 14, 45, and 90 are boundaries — each belongs to exactly one band, not two.
-
: Change the window.
--days N -
: Mode 4 — cancel-by deadlines that passed without recorded cancellation.
--missed -
If register is empty and the [CLM] is connected: Offer Mode 3 — scan the [CLM] for active agreements with renewal dates and bulk-load.
-
Output includes recommended actions: who to ping (the business owner from each register entry), which ones have uncapped pricing (get leverage before window closes).
-
读取(配置目录——插件更新后仍会保留)。
~/.claude/plugins/config/claude-for-legal/commercial-legal/renewal-register.yaml -
**默认模式:**模式2——显示未来90天内即将到来的事项,使用半开区间按紧急程度分组,确保每个截止日期仅属于一个区间:🔴 0–13天,🟠14–44天,🟡45–89天。第14、45和90天为边界值——每个边界值仅属于一个区间,而非两个。
-
**:**调整时间窗口。
--days N -
**:**模式4——显示已过取消截止日期但未记录取消操作的合同。
--missed -
**若登记册为空且已连接[CLM]:**提供模式3——扫描[CLM]获取带有续约日期的有效协议并批量导入。
-
**输出包含建议操作:**需要联系的人员(每个登记条目对应的业务负责人)、哪些合同定价无上限(需在窗口关闭前获取谈判筹码)。
Examples
示例
/commercial-legal:renewal-tracker/commercial-legal:renewal-tracker --days 180/commercial-legal:renewal-tracker --missed/commercial-legal:renewal-tracker/commercial-legal:renewal-tracker --days 180/commercial-legal:renewal-tracker --missedPurpose
目的
Nobody reads a contract twice. The renewal date is extracted once, at review time, and then it lives somewhere — ideally somewhere that shouts at you 45 days before the cancel-by deadline, not 45 days after.
This skill maintains the renewal register and surfaces what's coming.
没人会读两遍合同。续约日期只会在审核时提取一次,之后需要存放在一个合适的地方——理想情况下,它会在取消截止日期前45天提醒你,而不是过期45天后才通知。
本技能负责维护续约登记册并展示即将到来的续约事项。
The register
登记册
Lives at (the config directory — survives plugin updates). Each entry:
~/.claude/plugins/config/claude-for-legal/commercial-legal/renewal-register.yamlyaml
- counterparty: "Acme SaaS Inc."
agreement: "Acme Platform Subscription Agreement"
signed_date: 2025-06-15
initial_term_end: 2026-06-15
current_term_end: 2026-06-15 # rolls forward after each auto-renewal; compute cancel_by_* from this
renewal_mechanism: "auto-renew annual"
notice_period_days: 60
notice_method: "email" # email / portal / certified mail / registered post / courier / per contract §X
transit_buffer_days: 0 # 0 for electronic, 5 for domestic certified mail, 10 for international registered post — or per contract if specified
cancel_by_calendar: 2026-04-16 # current_term_end minus notice_period_days
cancel_by_effective: 2026-04-16 # rolled back to last business day if needed
send_by_effective: 2026-04-16 # cancel_by_effective minus transit_buffer_days — the date you must SEND the notice
cancel_by_roll_note: "" # e.g., "rolled back from Sunday 2026-11-01; verify against contract's business-day definition"
cancel_by_provenance: "[model calculation — verify against the notice clause]"
price_on_renewal: "then-current list (uncapped)"
annual_value: 48000
business_owner: "jane@company.com"
clm_id: "IC-12345" # if connected
docusign_envelope: "abc-123" # if connected
status: "active" # active | cancelled | renewed | lapsed
notes: "Pricing uncapped — revisit before renewal. Alt vendors: X, Y."Notice transit time — alert off , not . A 60-day window with a certified-mail requirement is really ~55 days. The tracker that alerts on the received-by date is the tracker that misses the deadline. Compute and fire alerts (the 🔴 / 🟠 / 🟡 urgency bands in Mode 2) off . Mode 2's urgency column shows ; a detail column surfaces , , and so the reader can see the delta and challenge the buffer.
send_by_effectivecancel_by_effectivesend_by_effective = cancel_by_effective - transit_buffer_dayssend_by_effectivesend_by_effectivecancel_by_effectivenotice_methodtransit_buffer_daysRolling renewals — the register that doesn't roll forward is the register that's right once. Store for the record, but compute from . When a renewal fires (the cancel window passes and no notice was given), prompt:
initial_term_endcancel_by_*current_term_endThis contract auto-renewed on [date]. Update the register: newis [date + renewal period], newcurrent_term_endis [computed], newcancel_by_effectiveis [computed]. Confirm?send_by_effective
After year one, is wrong and only produces a correct cancel-by date.
initial_term_endcurrent_term_end存储在(配置目录——插件更新后仍会保留)。每个条目格式如下:
~/.claude/plugins/config/claude-for-legal/commercial-legal/renewal-register.yamlyaml
- counterparty: "Acme SaaS Inc."
agreement: "Acme Platform Subscription Agreement"
signed_date: 2025-06-15
initial_term_end: 2026-06-15
current_term_end: 2026-06-15 # 每次自动续约后更新;据此计算cancel_by_*
renewal_mechanism: "auto-renew annual"
notice_period_days: 60
notice_method: "email" # email / portal / certified mail / registered post / courier / per contract §X
transit_buffer_days: 0 # 电子通知为0,国内挂号信为5,国际挂号信为10——或按合同指定
cancel_by_calendar: 2026-04-16 # current_term_end减去notice_period_days
cancel_by_effective: 2026-04-16 # 如有必要,回滚至最近的工作日
send_by_effective: 2026-04-16 # cancel_by_effective减去transit_buffer_days——必须发出通知的日期
cancel_by_roll_note: "" # 例如:"从2026-11-01(周日)回滚;请对照合同中的工作日定义验证"
cancel_by_provenance: "[model calculation — verify against the notice clause]"
price_on_renewal: "then-current list (uncapped)"
annual_value: 48000
business_owner: "jane@company.com"
clm_id: "IC-12345" # 若已连接
docusign_envelope: "abc-123" # 若已连接
status: "active" # active | cancelled | renewed | lapsed
notes: "Pricing uncapped — revisit before renewal. Alt vendors: X, Y."**通知传输时间——基于而非发出提醒。**如果要求用挂号信通知,60天的窗口期实际约为55天。若跟踪器基于收件日期提醒,很可能会错过截止日期。计算,并基于触发提醒(模式2中的🔴/🟠/🟡紧急区间)。模式2的紧急程度列显示;详情列会展示、和,以便查看时间差并验证缓冲天数是否合理。
send_by_effectivecancel_by_effectivesend_by_effective = cancel_by_effective - transit_buffer_dayssend_by_effectivesend_by_effectivecancel_by_effectivenotice_methodtransit_buffer_days滚动续约——不更新的登记册只会正确一次。仅用于记录,需基于计算。当续约触发(取消窗口已过且未发出通知)时,会提示:
initial_term_endcurrent_term_endcancel_by_*本合同已于[日期]自动续约。请更新登记册:新的为[日期+续约周期],新的current_term_end为[计算值],新的cancel_by_effective为[计算值]。确认更新?send_by_effective
第一年之后,将失效,只有能得出正确的取消截止日期。
initial_term_endcurrent_term_endBusiness-day check on every cancel-by date
对每个取消截止日期进行工作日校验
The register's cancel-by date must be the last BUSINESS DAY on which notice
is effective, not the calendar date. A calendar date that falls on a
weekend is the single most common way a renewal deadline gets missed. The
register catches it.
When you compute (or ingest) a cancel-by date:
- Compute the calendar date. (or whatever the clause specifies). This is the raw arithmetic.
cancel_by_calendar = initial_term_end − notice_period_days - Business-day roll-back keyed to governing law. The contract's governing law determines which holidays count. US: federal holidays + the state's holidays if governing law is a state. England & Wales: bank holidays. Germany: Feiertage (vary by Bundesland — ask which). Canada: federal + provincial. Singapore: public holidays. If Saturday, roll back to Friday. If Sunday, roll back to Friday. If a holiday in the governing-law jurisdiction, roll back to the prior business day. Roll BACK, never forward — forward means notice arrives after the window closes. For non-US governing law, if you can't determine the holiday calendar, flag it: "Governing law is [X] — business-day roll-back uses US federal holidays as a placeholder. Verify against the [jurisdiction] holiday calendar before relying on the effective date."
- Check the contract's own day-counting rule. Look for "business day," "received by," "deemed received," "5:00 p.m. [local time]," or a notice-method clause. If the contract defines "business day" or specifies receipt mechanics (certified mail, email with read receipt), that definition controls. Flag any mismatch between the default roll-back and the contract's own rule.
- Record BOTH dates in the register. is the raw arithmetic;
cancel_by_calendaris the last business day on which notice is effective;cancel_by_effectiverecords why they differ (e.g., "rolled back from Sunday 2026-11-01; verify against contract's business-day definition"). Every computedcancel_by_roll_notecarries acancel_by_effectivetag ofcancel_by_provenanceso the verify flag travels with the date, not with the surrounding prose.[model calculation — verify against the notice clause] - Fire alerts off the EFFECTIVE date, not the calendar date. Urgency bands (🔴 / 🟠 / 🟡 in Mode 2) use . Mode 2 output shows
cancel_by_effectivein the urgency column and surfacescancel_by_effectiveandcancel_by_calendarin a detail column where the roll-back happened, so the reader can see it and challenge it.cancel_by_roll_note
A Mode 2 report that prints (a Sunday) with no weekday and no warning is a silently wrong effective deadline. The register is the place to catch it — once, at ingest — not later, when the window has already moved.
cancel_by: 2026-11-01**登记册中的取消截止日期必须是通知生效的最后一个工作日,而非日历日期。**日历日期恰逢周末是错过续约截止日期最常见的原因,登记册会对此进行校验。
计算(或导入)取消截止日期时:
- 计算日历日期。(或按合同条款指定的方式计算)。这是原始计算结果。
cancel_by_calendar = initial_term_end − notice_period_days - **根据管辖法律回滚至工作日。**合同的管辖法律决定哪些日期属于节假日。美国:联邦节假日+管辖州的节假日;英格兰和威尔士:银行假日;德国:Feiertage(因联邦州而异——需确认);加拿大:联邦+省节假日;新加坡:公共假日。若为周六,回滚至周五;若为周日,回滚至周五;若为管辖法律规定的节假日,回滚至前一个工作日。仅回滚,绝不向前推进——向前推进意味着通知会在窗口关闭后才送达。若为非美国管辖法律且无法确定节假日日历,需标记:"管辖法律为[X]——工作日回滚暂使用美国联邦节假日日历。在依赖生效日期前,请对照[管辖地区]的节假日日历进行验证。"
- **检查合同自身的天数计算规则。**查找"工作日""收件日期""视为已收到""下午5:00[当地时间]"或通知方式条款。若合同定义了"工作日"或指定了收件机制(挂号信、带已读回执的邮件),则以该定义为准。若默认回滚规则与合同自身规则不符,需标记。
- 在登记册中记录两个日期。是原始计算结果;
cancel_by_calendar是通知生效的最后一个工作日;cancel_by_effective记录两者不同的原因(例如:"从2026-11-01(周日)回滚;请对照合同中的工作日定义验证")。每个计算得出的cancel_by_roll_note都会带有cancel_by_effective标签cancel_by_provenance,以便验证标记随日期一同留存,而非仅存在于周边文本中。[model calculation — verify against the notice clause] - **基于生效日期而非日历日期触发提醒。**紧急区间(模式2中的🔴/🟠/🟡)使用。模式2的输出在紧急程度列显示
cancel_by_effective,并在详情列展示cancel_by_effective和cancel_by_calendar(若进行了回滚),以便查看并验证。cancel_by_roll_note
若模式2报告显示(周日)但未标注工作日和警告,这会导致生效截止日期被错误呈现。登记册应在导入时就捕获此类问题——而非等到窗口已过期才发现。
cancel_by: 2026-11-01Modes
模式
Mode 1: Ingest a renewal (handoff from review)
模式1:导入续约信息(来自审核的移交)
When saas-msa-review or vendor-agreement-review finds a renewal clause, it hands off a record. Append it to the register. If the counterparty already has an entry, ask whether this is a replacement (renewed agreement) or an additional agreement.
当saas-msa-review或vendor-agreement-review发现续约条款时,会移交一条记录。将其追加到登记册中。若交易对手已有条目,需询问此条目是替换(续约协议)还是新增协议。
Mode 2: What's coming up
模式2:即将到来的续约事项
Default lookback window: next 90 days.
Urgency bands are half-open intervals — a deadline lives in exactly one band. Use days-until-cancel-by (). Day 14, 45, and 90 each belong to exactly one band, not two; an off-by-one here puts the most-urgent items into the less-urgent bucket.
cancel_by_effective - today- 🔴 0–13 days (cancel-by in less than 14 days — including today)
- 🟠 14–44 days
- 🟡 45–89 days
- (everything 90+ days is outside the default lookback window; include only if the user passed beyond 90)
--horizon
markdown
undefined**默认时间窗口:**未来90天。
**紧急区间为半开区间——每个截止日期仅属于一个区间。**使用距离取消截止日的天数()。第14、45和90天各属于一个区间,而非两个;此处的差一错误会将最紧急的事项归入较不紧急的区间。
cancel_by_effective - 今日- 🔴 0–13天(取消截止日在14天内——含今日)
- 🟠 14–44天
- 🟡 45–89天
- (90天以上的事项不在默认时间窗口内;仅当用户指定超过90天时才会包含)
--horizon
markdown
undefinedRenewals — next 90 days
续约事项——未来90天
🔴 Cancel-by deadline in 0–13 days
🔴 取消截止日在0–13天内
| Counterparty | Cancel by | Renewal date | Annual $ | Owner | Notes |
|---|---|---|---|---|---|
| [name] | [date] | [date] | $[n] | [email] | [notes] |
| 交易对手 | 取消截止日 | 续约日期 | 年度金额 | 负责人 | 备注 |
|---|---|---|---|---|---|
| [名称] | [日期] | [日期] | $[金额] | [邮箱] | [备注] |
🟠 Cancel-by deadline in 14–44 days
🟠 取消截止日在14–44天内
[same table]
[同上述表格]
🟡 Cancel-by deadline in 45–89 days
🟡 取消截止日在45–89天内
[same table]
Recommended actions:
- [Counterparty] — ping [business owner]: do we want to keep this?
- [Counterparty] — pricing is uncapped; get a quote from an alternative before we lose leverage
If the register has more than ~10 renewals in the window, or any time the user asks: offer the dashboard (see CLAUDE.md `## Outputs → Dashboard offer for data-heavy outputs`). Shape the offer for this output — counts by urgency tier (🔴 / 🟠 / 🟡), a cancel-by timeline, and a sortable register with counterparty, renewal date, annual $, and owner.[同上述表格]
建议操作:
- [交易对手] — 联系[业务负责人]:我们是否要继续使用该服务?
- [交易对手] — 定价无上限;在失去谈判筹码前获取替代供应商报价
若登记册中该时间窗口内的续约事项超过约10项,或用户有要求:提供仪表盘(参见CLAUDE.md `## 输出 → 数据密集型输出的仪表盘选项`)。针对本输出定制选项——按紧急程度层级(🔴/🟠/🟡)统计数量、取消截止日时间线,以及包含交易对手、续约日期、年度金额和负责人的可排序登记册。Mode 3: Scan the [CLM] / e-signature tool to populate the register
模式3:扫描[CLM]/电子签名工具以填充登记册
If MCPs are connected and the register is empty or stale:
- Query the [CLM] for all agreements with status "Active" and a renewal date field
- Query DocuSign for completed envelopes in the last 24 months with "subscription" / "renewal" / "auto-renew" in metadata
- For each hit, extract renewal mechanics and add to register
- Flag any where the renewal date can't be determined from metadata — those need a human to read the contract
This is a one-time bulk load. After that, ingest happens at review time.
若已连接MCP且登记册为空或过时:
- 查询[CLM]获取所有状态为“有效”且带有续约日期字段的协议
- 查询DocuSign获取过去24个月内元数据包含“subscription”/“renewal”/“auto-renew”的已完成信封
- 为每个命中结果提取续约机制并添加到登记册
- 标记那些无法从元数据中确定续约日期的条目——这些需要人工阅读合同
此操作为一次性批量导入。之后的导入将在审核时进行。
Mode 4: Missed windows (the bad news report)
模式4:已错过的窗口(问题报告)
markdown
undefinedmarkdown
undefinedMissed cancellation windows
已错过的取消窗口
The following agreements had cancel-by deadlines that have passed and no
cancellation was recorded:
| Counterparty | Cancel-by was | Renewal date | Status |
|---|---|---|---|
| [name] | [date] | [date] | Will auto-renew on [date] |
Options:
- Negotiate late cancellation (rarely works but worth asking)
- Accept the renewal, mark next year's cancel-by now
- Check the agreement for any other termination rights (for convenience, for cause)
undefined以下协议的取消截止日期已过且未记录取消操作:
| 交易对手 | 取消截止日 | 续约日期 | 状态 |
|---|---|---|---|
| [名称] | [日期] | [日期] | 将在[日期]自动续约 |
可选方案:
- 协商延迟取消(很少成功但值得尝试)
- 接受续约,立即标记明年的取消截止日
- 检查协议是否有其他终止权利(方便终止、因故终止)
undefinedGate: accepting or declining a renewal
审批环节:接受或拒绝续约
Tracking a renewal date is research. Acting on it — sending a notice of non-renewal, letting an auto-renewal fire, or countersigning a renewal form — is a consequential legal step.
Before proceeding to accept or decline a renewal (including sending a non-renewal notice or letting an auto-renewal run past the cancel-by date): Read in . If the Role is Non-lawyer:
## Who's using this~/.claude/plugins/config/claude-for-legal/commercial-legal/CLAUDE.mdThis step has legal consequences (you're either committing to another term or terminating the relationship). Have you reviewed this with an attorney? If yes, proceed. If no, here's a brief to bring to them:[Generate a 1-page summary: counterparty, current term end and cancel-by date, renewal price mechanism, what happens if we do nothing, alternative vendors if we want to shop, and the three things to ask the attorney before the window closes.]If you need to find an attorney, solicitor, barrister, or other authorised legal professional: contact your professional regulator (state bar in the US, SRA/Bar Standards Board in England & Wales, Law Society in Scotland/NI/Ireland/Canada/Australia, or your jurisdiction's equivalent) for a referral service.
Do not proceed past this gate without an explicit yes.
跟踪续约日期属于调研工作。而采取行动——发送不续约通知、任由自动续约触发或签署续约文件——是具有法律后果的重要步骤。
**在进行接受或拒绝续约的操作前(包括发送不续约通知或任由自动续约超过取消截止日):**请阅读中的部分。若角色为非法务人员:
~/.claude/plugins/config/claude-for-legal/commercial-legal/CLAUDE.md## 使用者此步骤具有法律后果(你要么承诺续约,要么终止合作关系)。你是否已咨询律师?若是,请继续。若否,请准备以下简要材料咨询律师:[生成1页摘要:交易对手、当前期限结束日期和取消截止日、续约定价机制、不采取任何行动的后果、替代供应商(若考虑更换),以及在窗口关闭前需向律师咨询的三个问题。]若你需要寻找律师、事务律师、出庭律师或其他授权法律专业人士:联系所在地区的专业监管机构(美国为州律师协会,英格兰和威尔士为SRA/律师标准委员会,苏格兰/北爱尔兰/爱尔兰/加拿大/澳大利亚为律师协会,或所在地区的等效机构)获取推荐服务。
未得到明确同意前,不得继续此步骤。
Integration: renewal-watcher agent
集成:renewal-watcher代理
The renewal-watcher agent in this plugin runs this skill on a schedule (weekly by default) and posts the "coming up" report to the channel named in → → where work product goes. Mode 2 is the agent's primary output.
~/.claude/plugins/config/claude-for-legal/commercial-legal/CLAUDE.md## House style本插件中的renewal-watcher代理会按计划(默认每周)运行本技能,并将“即将到来的续约”报告发布到→→工作成果存放位置指定的渠道。模式2是该代理的主要输出。
~/.claude/plugins/config/claude-for-legal/commercial-legal/CLAUDE.md## 格式规范What this skill does not do
本技能不具备的功能
- It does not cancel contracts. It tells you when to decide.
- It does not decide whether to renew. It surfaces the deadline and the business owner.
- It does not read contracts to find renewal dates — that happens at review time. If a contract is in the register without a renewal date, it was added manually and someone needs to fill in the gap.
- 不负责取消合同,仅告知决策截止时间。
- 不决定是否续约,仅展示截止日期和业务负责人。
- 不读取合同以查找续约日期——此操作在审核时完成。若登记册中的合同无续约日期,则是手动添加的,需有人补充该信息。