mcpField
A
always-current-datetime

always-current-datetime

github.com/srinitudeAgent 工作流2558 次安装1 周前更新
代码仓库

关于 always-current-datetime

always-current-datetime 是要求 Agent 为每条直接用户消息获取本地时钟锚点并解析相对日期时间的技能。它规定时钟采集、时区处理、时间表达消歧和回复中的时间标记;实际提醒等操作由其他能力负责。

主要功能

  1. 01每轮直接消息获取新的时钟锚点
  2. 02按时区规则解析相对日期时间
  3. 03对有歧义的日期表达提出澄清
  4. 04要求回复显示当前时间标记
  5. 05规定时间采集失败时的处理方式

适用场景

  1. 01将“明天”等表达解析为绝对日期
  2. 02处理带截止时间或有效期的请求
  3. 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.yml
assets/
decision-records.json
improvement-contract.json
invocation-receipt-template.json
mise-primitives-catalog.json
mise-primitives.json
primitive-lifecycle.json
response-prefixes.txt
use-case-contract.json
evals/
cases.json
contract.md
evals.json
manifest.json
rubric.md
source-lineage.json
source-mapping.json
speed-budgets.json
trigger-cases.json
trigger-queries.json
examples/
fresh-direct-turn.md
help-command.md
invalid-timezone.md
references/
decisions.md
eval-contract.md
generation-contract.md
resource-and-experiment-design.md
use-case-specificity.md
scripts/
agentic_request_contract.py
check_code_rules.py

详细介绍

始终使用当前日期和时间

每轮直接用户消息都使用一个最新的本地时钟锚点。通过 starting-point 应用该锚点,在不更改用户原话的前提下解析相对日期,并在可见回复中记录当前采集时间。

此技能接受哪些命令?

将普通的直接用户消息视为 refresh。以下控制词用于检查和测试。

命令结果
help显示触发条件、时钟字段、时区顺序、可见前缀、失败规则和锚点状态。
refresh为当前直接消息轮次获取一个最新锚点,将其绑定到 starting-point,并应用于回复。

如果请求与这两个命令都不匹配,则使用 refresh。不要询问用户要选择哪个命令。

何时运行?

在回复每条直接用户消息之前运行,即使消息中没有日期或时间词语也是如此。工具结果、系统事件或助手续写不会启动新的时钟采集。精确的轮次中途带外用户消息标记除外。

每轮的约定是什么?

在解读或处理最新的直接用户消息之前:

  1. 通过主机的技能加载功能加载 starting-point。
  2. 从主机的加载结果中读取此技能的具体绝对目录。
  3. 将该目录设为进程运行器的工作目录,并准确运行捆绑脚本一次。
  4. 解析 JSON,并要求其包含 references/eval-contract.md 中规定的所有字段。
  5. 将锚点作为 as_of 添加到私有的 starting-point 映射中。
  6. 在调用任何对日期或时间敏感的工具之前,先解析时间表达。
  7. 在实际的助手回复中写入可见的日期时间前缀,以便会话历史记录该前缀。

在 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 映射、在执行日期敏感或时间敏感的操作之前已解析时间表达,并且面向用户的实际回复包含必需的当前日期时间前缀时,轮次才算就绪。任何过时、缺失、重复或失败的锚点都会使时间相关工作受阻。

工厂执行约定

可接受的结果是:为每个直接轮次绑定一个新鲜的时钟锚点,并据此解析相对日期表达。在更换最小所有者的同时,保留当前时钟锚点行为。

  1. 使用 mise run ci 冻结当前软件包并记录其摘要。
  2. 运行 mise run domain-research-policy,然后评估当前时钟锚点来源及反证。
  3. 针对指定的时钟锚点操作运行 mise run refresh。将语义选择留给模型。
  4. 运行 mise run decision-policy、mise run ci 和行为评估。回到失败层级最低的所有者。
  5. 运行 mise run invocation-policy -- <receipt>,并说明每项任务的处理情况,或说明为何该领域特定任务不适用。
  6. 可选择运行 mise run improvement-policy。只有在没有受保护维度退化时,才保留单一变更维度。

仅在需要其约定时,才通过 mise run use-case-policy 加载 assets/use-case-contract.json,并通过 mise run evals 加载 evals/evals.json。

Mise 负责可重复的机制、顺序、回执和检查。模型负责代码无法提供的解释、因果判断、创造性工作和直接感知。若缺少授权、证据过时或门禁失败,则停止。

评论

支持 Markdown