temporal-cortex-datetime
Convert timezones, resolve natural language times ("next Tuesday at 2pm"), compute durations, and adjust timestamps with DST awareness. No credentials needed — all tools run fully offline after one-time binary install.
Packaged view
This page reorganizes the original catalog entry around fit, installability, and workflow context first. The original raw source lives below.
Install command
npx @skill-hub/cli install openclaw-skills-temporal-cortex-datetime
Repository
Skill path: skills/billylui/temporal-cortex-datetime
Convert timezones, resolve natural language times ("next Tuesday at 2pm"), compute durations, and adjust timestamps with DST awareness. No credentials needed — all tools run fully offline after one-time binary install.
Open repositoryBest for
Primary workflow: Ship Full Stack.
Technical facets: Full Stack.
Target audience: everyone.
License: MIT.
Original source
Catalog source: SkillHub Club.
Repository owner: openclaw.
This is still a mirrored public skill entry. Review the repository before installing into production workflows.
What it helps with
- Install temporal-cortex-datetime into Claude Code, Codex CLI, Gemini CLI, or OpenCode workflows
- Review https://github.com/openclaw/skills before adding temporal-cortex-datetime to shared team environments
- Use temporal-cortex-datetime for development workflows
Works across
Favorites: 0.
Sub-skills: 0.
Aggregator: No.
Original source / Raw SKILL.md
---
name: temporal-cortex-datetime
description: |-
Convert timezones, resolve natural language times ("next Tuesday at 2pm"), compute durations, and adjust timestamps with DST awareness. No credentials needed — all tools run fully offline after one-time binary install.
license: MIT
compatibility: |-
Requires npx (Node.js 18+) or Docker to install the MCP server binary (one-time). After installation, all 5 tools run fully offline with zero network access. No OAuth or credentials needed. Works with Claude Code, Claude Desktop, Cursor, Windsurf, and any MCP-compatible client.
metadata:
author: temporal-cortex
version: "0.9.1"
mcp-server: "@temporal-cortex/cortex-mcp"
homepage: "https://temporal-cortex.com"
repository: "https://github.com/temporal-cortex/skills"
openclaw:
install:
- kind: node
package: "@temporal-cortex/[email protected]"
bins: [cortex-mcp]
requires:
bins:
- npx
config:
- ~/.config/temporal-cortex/config.json
---
# Temporal Context & Datetime Resolution
5 tools for temporal orientation and datetime computation. All tools execute locally within the compiled MCP server binary — no external API calls, no network access at runtime, no credential files. The binary is installed once via npm (or built from source with Docker) and all subsequent executions are fully offline. No OAuth or credentials required. Timezone and week-start preferences are stored in `config.json`. Unset fields default to system timezone and Monday week-start.
## Source & Provenance
- **Homepage:** [temporal-cortex.com](https://temporal-cortex.com)
- **Source code:** [github.com/temporal-cortex/mcp](https://github.com/temporal-cortex/mcp) (open-source Rust)
- **npm package:** [@temporal-cortex/cortex-mcp](https://www.npmjs.com/package/@temporal-cortex/cortex-mcp)
- **Skills repo:** [github.com/temporal-cortex/skills](https://github.com/temporal-cortex/skills)
## Tools
| Tool | When to Use |
|------|------------|
| `get_temporal_context` | First call in any session. Returns current time, timezone, UTC offset, DST status, DST prediction, day of week. |
| `resolve_datetime` | Convert human expressions to RFC 3339. Supports 60+ patterns: `"next Tuesday at 2pm"`, `"tomorrow morning"`, `"+2h"`, `"start of next week"`, `"third Friday of March"`. |
| `convert_timezone` | Convert RFC 3339 datetime between IANA timezones. |
| `compute_duration` | Duration between two timestamps (days, hours, minutes). |
| `adjust_timestamp` | DST-aware timestamp adjustment. `"+1d"` across spring-forward = same wall-clock time. |
## Runtime
These tools run inside the [Temporal Cortex MCP server](https://github.com/temporal-cortex/mcp) (`@temporal-cortex/cortex-mcp`), a compiled Rust binary distributed as an npm package.
**Install and startup lifecycle:**
1. `npx` resolves `@temporal-cortex/cortex-mcp` from the npm registry (one-time, cached locally after first download)
2. The postinstall script downloads the platform-specific binary from the [GitHub Release](https://github.com/temporal-cortex/mcp/releases/tag/mcp-v0.9.1) and verifies its SHA256 checksum against the embedded `checksums.json` — **installation halts on mismatch**
3. The MCP server starts as a local process communicating over stdio (no listening ports)
4. All 5 datetime tools execute locally — zero network access, zero filesystem writes, no credentials
**Network access:** Only during the initial npm download. Once cached, subsequent launches are fully offline. The 5 datetime tools make zero network requests — all computation is local.
**File access:** The binary reads `~/.config/temporal-cortex/config.json` for timezone and week-start preferences. Unset or missing fields default to system values. No filesystem writes. No credential files accessed.
**No credentials required.** Unlike the scheduling skill, this skill needs no OAuth tokens or API keys.
**Pre-run verification** (recommended before first use):
1. Inspect the npm package without executing: `npm pack @temporal-cortex/cortex-mcp --dry-run`
2. Verify checksums independently against the [GitHub Release](https://github.com/temporal-cortex/mcp/releases/download/mcp-v0.9.1/SHA256SUMS.txt) (see verification pipeline below)
3. For full containment, run in Docker instead of npx (see Docker containment below)
**Verification pipeline:** Checksums are published independently at each [GitHub Release](https://github.com/temporal-cortex/mcp/releases/tag/mcp-v0.9.1) as `SHA256SUMS.txt` — verify the binary before first use:
```bash
# 1. Fetch checksums from GitHub (independent of the npm package)
curl -sL https://github.com/temporal-cortex/mcp/releases/download/mcp-v0.9.1/SHA256SUMS.txt
# 2. Compare against the npm-installed binary
shasum -a 256 "$(npm root -g)/@temporal-cortex/cortex-mcp/bin/cortex-mcp"
```
As defense-in-depth, the npm package also embeds `checksums.json` and the postinstall script compares SHA256 hashes during install — **installation halts on mismatch** (the binary is deleted, not executed). This automated check supplements, but does not replace, independent verification above.
**Build provenance:** Binaries are cross-compiled from auditable Rust source in [GitHub Actions](https://github.com/temporal-cortex/mcp/actions) across 5 platforms (darwin-arm64, darwin-x64, linux-x64, linux-arm64, win32-x64). Source: [github.com/temporal-cortex/mcp](https://github.com/temporal-cortex/mcp) (MIT-licensed). The CI workflow, build artifacts, and release checksums are all publicly inspectable.
**Docker containment** (recommended for maximum isolation — zero Node.js dependency, zero host filesystem access, zero network after build):
```json
{
"mcpServers": {
"temporal-cortex": {
"command": "docker",
"args": ["run", "--rm", "-i", "--network=none", "cortex-mcp"]
}
}
}
```
Build: `docker build -t cortex-mcp https://github.com/temporal-cortex/mcp.git` — No volume mount needed since the datetime skill requires no OAuth tokens or credential files. The `--network=none` flag enforces the zero-network guarantee at the OS level.
## Critical Rules
1. **Always call `get_temporal_context` before time-dependent work** — never assume the time or timezone.
2. **Resolve before querying** — convert `"next Tuesday at 2pm"` to RFC 3339 with `resolve_datetime` before passing to calendar tools.
3. **Timezone awareness** — all datetime tools produce RFC 3339 with timezone offsets.
## resolve_datetime Expression Patterns
The expression parser supports 60+ patterns across 10 categories:
| Category | Examples |
|----------|---------|
| Relative | `"now"`, `"today"`, `"tomorrow"`, `"yesterday"` |
| Named days | `"next Monday"`, `"this Friday"`, `"last Wednesday"` |
| Time of day | `"morning"` (09:00), `"noon"`, `"evening"` (18:00), `"eob"` (17:00) |
| Clock time | `"2pm"`, `"14:00"`, `"3:30pm"` |
| Offsets | `"+2h"`, `"-30m"`, `"in 2 hours"`, `"3 days ago"` |
| Compound | `"next Tuesday at 2pm"`, `"tomorrow morning"`, `"this Friday at noon"` |
| Period boundaries | `"start of week"`, `"end of month"`, `"start of next week"`, `"end of last month"` |
| Ordinal weekday | `"first Monday of March"`, `"third Friday of next month"` |
| RFC 3339 passthrough | `"2026-03-15T14:00:00-04:00"` (returned as-is) |
| Week start aware | Uses configured `WEEK_START` (Monday default, Sunday option) |
## Common Patterns
### Get Current Time Context
```
get_temporal_context()
→ utc, local, timezone, utc_offset, dst_active, dst_next_transition,
day_of_week, iso_week, is_weekday, day_of_year, week_start
```
### Resolve a Meeting Time
```
resolve_datetime("next Tuesday at 2pm")
→ resolved_utc, resolved_local, timezone, interpretation
```
### Convert Across Timezones
```
1. get_temporal_context → user's timezone
2. convert_timezone(datetime: "2026-03-15T14:00:00-04:00", target_timezone: "Asia/Tokyo")
→ same moment in Tokyo time with DST and offset info
```
### Calculate Duration
```
compute_duration(start: "2026-03-15T09:00:00-04:00", end: "2026-03-15T17:30:00-04:00")
→ total_seconds: 30600, hours: 8, minutes: 30, human_readable: "8 hours 30 minutes"
```
### DST-Aware Adjustment
```
adjust_timestamp(
datetime: "2026-03-07T23:00:00-05:00",
adjustment: "+1d",
timezone: "America/New_York"
) → same wall-clock time (23:00) on March 8, even though DST spring-forward occurs
```
## Additional References
- [Datetime Tools Reference](references/DATETIME-TOOLS.md) — Complete input/output schemas for all 5 tools
---
## Referenced Files
> The following files are referenced in this skill and included for context.
### references/DATETIME-TOOLS.md
```markdown
# Datetime Tools Reference
Complete input/output schemas for the 5 datetime tools. All are pure computation (no external API calls), read-only, and idempotent.
## Tool Annotations
| Tool | `readOnlyHint` | `destructiveHint` | `idempotentHint` | `openWorldHint` |
|------|:-:|:-:|:-:|:-:|
| `get_temporal_context` | true | false | true | false |
| `resolve_datetime` | true | false | true | false |
| `convert_timezone` | true | false | true | false |
| `compute_duration` | true | false | true | false |
| `adjust_timestamp` | true | false | true | false |
All tools are closed-world (no external API calls).
---
## get_temporal_context
**Input:**
| Param | Type | Required | Description |
|-------|------|----------|-------------|
| `timezone` | string | No | IANA timezone override |
**Output:** `utc`, `local`, `timezone`, `timezone_configured`, `utc_offset`, `dst_active`, `dst_next_transition`, `dst_next_offset`, `day_of_week`, `iso_week`, `is_weekday`, `day_of_year`, `week_start`
---
## resolve_datetime
**Input:**
| Param | Type | Required | Description |
|-------|------|----------|-------------|
| `expression` | string | Yes | Human time expression |
| `timezone` | string | No | IANA timezone override |
**Supported expressions:** `"now"`, `"today"`, `"tomorrow"`, `"yesterday"`, `"next Monday"`, `"this Friday"`, `"morning"` (09:00), `"noon"`, `"evening"` (18:00), `"eob"` (17:00), `"2pm"`, `"14:00"`, `"+2h"`, `"-30m"`, `"in 2 hours"`, `"3 days ago"`, `"next Tuesday at 2pm"`, `"tomorrow morning"`, `"start of week"`, `"end of month"`, `"start of next week"`, `"end of last month"`, `"first Monday of March"`, `"third Friday of next month"`, RFC 3339 passthrough.
**Output:** `resolved_utc`, `resolved_local`, `timezone`, `interpretation`
---
## convert_timezone
**Input:**
| Param | Type | Required | Description |
|-------|------|----------|-------------|
| `datetime` | string | Yes | RFC 3339 datetime |
| `target_timezone` | string | Yes | Target IANA timezone |
**Output:** `utc`, `local`, `timezone`, `utc_offset`, `dst_active`
---
## compute_duration
**Input:**
| Param | Type | Required | Description |
|-------|------|----------|-------------|
| `start` | string | Yes | First timestamp (RFC 3339) |
| `end` | string | Yes | Second timestamp (RFC 3339) |
**Output:** `total_seconds`, `days`, `hours`, `minutes`, `seconds`, `human_readable`
---
## adjust_timestamp
**Input:**
| Param | Type | Required | Description |
|-------|------|----------|-------------|
| `datetime` | string | Yes | RFC 3339 datetime |
| `adjustment` | string | Yes | Duration: `"+2h"`, `"-30m"`, `"+1d2h30m"` |
| `timezone` | string | No | IANA timezone for day-level adjustments |
DST-aware: `"+1d"` across spring-forward maintains same wall-clock time.
**Output:** `original`, `adjusted_utc`, `adjusted_local`, `adjustment_applied`
```
---
## Skill Companion Files
> Additional files collected from the skill directory layout.
### _meta.json
```json
{
"owner": "billylui",
"slug": "temporal-cortex-datetime",
"displayName": "temporal-cortex-datetime",
"latest": {
"version": "0.9.1",
"publishedAt": 1773139586497,
"commit": "https://github.com/openclaw/skills/commit/0cdab11b5f52278b8be1ccf525889b86c5e39e6c"
},
"history": [
{
"version": "0.8.1",
"publishedAt": 1772859833043,
"commit": "https://github.com/openclaw/skills/commit/1a310dd0c7b92165e6513c7eb10c70eba3205150"
},
{
"version": "0.7.8",
"publishedAt": 1772788612190,
"commit": "https://github.com/openclaw/skills/commit/cbd3f56b4436a57cfa065df6a532b56eba7309c9"
},
{
"version": "0.7.7",
"publishedAt": 1772787167581,
"commit": "https://github.com/openclaw/skills/commit/2608c79fcfa4d711816d5eba4864b542dcde9e48"
},
{
"version": "0.7.5",
"publishedAt": 1772774647365,
"commit": "https://github.com/openclaw/skills/commit/7fe33fedfcade49412eb9bcc4e670f84e785c5f4"
},
{
"version": "0.7.3",
"publishedAt": 1772635283091,
"commit": "https://github.com/openclaw/skills/commit/124967972f461f64a6c54eb908d63a68eef12378"
}
]
}
```