关于 always-current-datetime
always-current-datetime 是要求 Agent 为每条直接用户消息获取本地时钟锚点并解析相对日期时间的技能。它规定时钟采集、时区处理、时间表达消歧和回复中的时间标记;实际提醒等操作由其他能力负责。
主要功能
- 01每轮直接消息获取新的时钟锚点
- 02按时区规则解析相对日期时间
- 03对有歧义的日期表达提出澄清
- 04要求回复显示当前时间标记
- 05规定时间采集失败时的处理方式
适用场景
- 01将“明天”等表达解析为绝对日期
- 02处理带截止时间或有效期的请求
- 03在日期敏感操作前统一时间依据
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ srinitude/ skills --skill always-current-datetime安装后在 Claude Code 中输入/always-current-datetime确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
mise.toml.github/workflows/ci.ymlassets/decision-records.jsonimprovement-contract.jsoninvocation-receipt-template.jsonmise-primitives-catalog.jsonmise-primitives.jsonprimitive-lifecycle.jsonresponse-prefixes.txtuse-case-contract.jsonevals/cases.jsoncontract.mdevals.jsonmanifest.jsonrubric.mdsource-lineage.jsonsource-mapping.jsonspeed-budgets.jsontrigger-cases.jsontrigger-queries.jsonexamples/fresh-direct-turn.mdhelp-command.mdinvalid-timezone.mdreferences/decisions.mdeval-contract.mdgeneration-contract.mdresource-and-experiment-design.mduse-case-specificity.mdscripts/agentic_request_contract.pycheck_code_rules.py详细介绍
始终使用当前日期和时间
每轮直接用户消息都使用一个最新的本地时钟锚点。通过 starting-point 应用该锚点,在不更改用户原话的前提下解析相对日期,并在可见回复中记录当前采集时间。
此技能接受哪些命令?
将普通的直接用户消息视为 refresh。以下控制词用于检查和测试。
| 命令 | 结果 |
|---|---|
help | 显示触发条件、时钟字段、时区顺序、可见前缀、失败规则和锚点状态。 |
refresh | 为当前直接消息轮次获取一个最新锚点,将其绑定到 starting-point,并应用于回复。 |
如果请求与这两个命令都不匹配,则使用 refresh。不要询问用户要选择哪个命令。
何时运行?
在回复每条直接用户消息之前运行,即使消息中没有日期或时间词语也是如此。工具结果、系统事件或助手续写不会启动新的时钟采集。精确的轮次中途带外用户消息标记除外。
每轮的约定是什么?
在解读或处理最新的直接用户消息之前:
- 通过主机的技能加载功能加载
starting-point。 - 从主机的加载结果中读取此技能的具体绝对目录。
- 将该目录设为进程运行器的工作目录,并准确运行捆绑脚本一次。
- 解析 JSON,并要求其包含
references/eval-contract.md中规定的所有字段。 - 将锚点作为
as_of添加到私有的starting-point映射中。 - 在调用任何对日期或时间敏感的工具之前,先解析时间表达。
- 在实际的助手回复中写入可见的日期时间前缀,以便会话历史记录该前缀。
在 macOS 或 Linux 上,在该工作目录中运行:
mise run refresh
在 Windows 上,在该工作目录中运行:
mise run refresh
仅当 python 或 py -3 是已安装的解释器时才使用。不要使用技能目录 shell 变量,也不要猜测安装路径。如果加载结果没有提供具体的技能目录,则报告 temporal-anchor-unavailable: skill directory missing,并停止处理依赖日期或时间的工作。绝不要传入伪造的时间戳。仅当进程结果发生在最新的直接用户消息之后时,才重用锚点。
可移植脚本接受 --timezone <IANA-zone>,然后检查 PROFILE_TIMEZONE,最后使用系统本地时间。显式参数表示由主机提供的配置文件设置,其优先级高于环境变量。
如果命令失败、返回无效 JSON 或缺少必需字段,则停止处理依赖日期或时间的工作,并报告 temporal-anchor-unavailable:,后接简短错误信息。不要猜测、重用较早的日期或时间,也不要回退到对话开始时间戳。
如何将锚点绑定到 starting-point?
添加以下私有结构,但不要暴露完整的结果映射:
as_of: captured_at, date, time, weekday, timezone, zone_abbreviation, utc_offset, source
将其应用于:
- 结果: 将相对的完成时间表述转换为确切日期或日期时间。
- 依据: 区分当前观察结果与较早收集的证据。
- 限制条件: 解析截止时间、有效期和时间界限。
- 起始路径: 区分现在可执行的操作与之后才能执行的操作。
- 未知项: 在一个简洁的问题能够解答之前,保留含糊表达,不予解析。
如何解读时间表达?
- 保留用户的原始措辞和作者身份。
- 当相对表达会影响含义或操作时,显示解析后的绝对日期或日期时间。
- 将过去的陈述保留为历史信息,将未来的请求保留为未来计划。
- 将对日期或时间敏感的工具参数转换为绝对值,并在工具支持时注明时区。
- 当常见惯例会得出不同日期时,将
next Friday等类似表达视为有歧义。列出候选日期,并简洁地提出一个问题。 - 如果对话中已经明确了惯例,则无需询问。
- 当当地时间跨过午夜后,重新获取时间。切勿根据对话经过的时间推断日期已变更。
回复中会显示什么?
资源门槛:使用此处提到的程序包文件前,先运行 mise run validate。
在某个当地日期的首次助手回复中,以及当地日期变更时,均以以下内容开头:
NOW: <weekday>, <full date> at <HH:MM:SS> | <zone abbreviation> | UTC<offset>
当天每条面向用户的常规回复都以以下内容开头:
[YYYY-MM-DD HH:MM:SS <zone abbreviation>] <result or question>
检查保留的助手消息,以确定每日标头是否已经出现。当上下文压缩导致无法确定时,宁可重复显示当前标头,也不要遗漏标头或显示过时标头。若要请求交互式澄清,请在问题文本中添加前缀。不要为工具调用或内部备注添加前缀。
字面模板也位于 assets/response-prefixes.txt。当无法获取时钟时,使用故障标记,而不是带日期的前缀。
如何恢复?
恢复或上下文压缩后,在使用任何保留的日期或时间前,重新获取时钟。如果保留的上下文中没有此技能正文,则在执行操作前重新加载。已存储的日期时间前缀只能证明此前的轮次。
应阅读哪个示例?
资源门槛:使用此处提到的程序包文件前,先运行 mise run validate。
- 阅读
examples/help-command.md,了解完整的help回复。 - 阅读
examples/fresh-direct-turn.md,了解真实的 UTC 诊断、as_of绑定以及两个可见前缀。 - 阅读
examples/invalid-timezone.md,了解退出码2、空标准输出、故障标记和恢复过程。
渐进式披露
在测试或更改此技能前,阅读 references/eval-contract.md 和 evals/cases.json。更改程序包结构或检查原生版本到派生版本的沿袭关系时,阅读 references/generation-contract.md。更改时钟行为前,通过 mise run test 加载测试,并在实现更改前重新运行该任务。仅在评估激活、行为、纳入或计时时,才加载 evals/ 中的其余内容。日常对话中不要加载这些文件。
注意事项
- 不要因为直接消息中没有日期或时间词语就跳过时钟。
- 不要将工具输出、系统事件或助手续写视为新的直接用户消息。
- 不要在最终推理后调用时钟,也不要在一次直接对话轮次中调用时钟两次。
- 解析后不要改写用户的时间表达。
- 不要将较早的证据当作当前证明。
- 对于有歧义的星期表达,不要默默选定一种含义。
- 不要为工具调用或内部备注添加前缀。
- 配置的时区无效时,不要默默回退。
- 不要在时钟命令中使用尚未解析的技能目录变量。
- 任一方案遗漏某个用例时,不要声称与先前契约保持一致。
限制
脚本无法从文本中推断用户想使用的时区。当系统本地时间并非预期时间环境时,主机必须通过 --timezone 或 PROFILE_TIMEZONE 提供明确的 IANA 时区。此技能可以解析日期和时间,并准备绝对形式的工具参数,但实际执行提醒、日历或部署操作的能力由其他独立功能负责。
何时轮次才算就绪?
只有在技能已加载、一次新鲜的时钟调用在最新的直接消息之后生成所有必需字段、as_of 绑定到私有的 starting-point 映射、在执行日期敏感或时间敏感的操作之前已解析时间表达,并且面向用户的实际回复包含必需的当前日期时间前缀时,轮次才算就绪。任何过时、缺失、重复或失败的锚点都会使时间相关工作受阻。
工厂执行约定
可接受的结果是:为每个直接轮次绑定一个新鲜的时钟锚点,并据此解析相对日期表达。在更换最小所有者的同时,保留当前时钟锚点行为。
- 使用
mise run ci冻结当前软件包并记录其摘要。 - 运行
mise run domain-research-policy,然后评估当前时钟锚点来源及反证。 - 针对指定的时钟锚点操作运行
mise run refresh。将语义选择留给模型。 - 运行
mise run decision-policy、mise run ci和行为评估。回到失败层级最低的所有者。 - 运行
mise run invocation-policy -- <receipt>,并说明每项任务的处理情况,或说明为何该领域特定任务不适用。 - 可选择运行
mise run improvement-policy。只有在没有受保护维度退化时,才保留单一变更维度。
仅在需要其约定时,才通过 mise run use-case-policy 加载 assets/use-case-contract.json,并通过 mise run evals 加载 evals/evals.json。
Mise 负责可重复的机制、顺序、回执和检查。模型负责代码无法提供的解释、因果判断、创造性工作和直接感知。若缺少授权、证据过时或门禁失败,则停止。