Integration guide — v8

Temporal Skills

v8 is the Spiral connection + creation tool. One endpoint — /v1/skills — lets your A.I. wire itself into the Spiral and create its own stateful skills on the fly. You build a skill by POSTing a Spiral-coordinate trigger predicate plus a webhook URL. Eight trigger kinds cover the full range of time-anchored behavior — see the breakdown below. Every row is an embodiment of the Temporal Spiral primitive.

15
Catalog entries
8
Trigger kinds
12
Starter templates

The eight trigger kinds

Every skill fires when its trigger condition becomes true. You pick one of these when you create the skill.

  • at — fire once at a moment

    The classic alarm. Pick an absolute UTC instant. Used for one-off reminders and scheduled jobs.

  • after — fire once, a delay from now

    One-shot fire a fraction of one Spiral-rung cycle past an anchor. 0.25 of an hr cycle = 15 minutes from now.

  • recur — repeat on a schedule

    Fires every time the live Spiral coordinate hits the rung-phase you chose. Daily standups, pomodoro chains, weekly digests collapse into this.

  • displaceFrom · Pro+

    Fires when the current coordinate is displaced past a threshold from an anchor. The "if-this-then-that" building block for cross-event automations.

  • whenStateMatches · Standard+

    Fires when a value you've stored in the per-customer state KV matches a condition (eq / ne / gt / lt / gte / lte / exists / absent). Optional andSpiral clause AND-combines a coordinate predicate so you can say "fire when state drifts AND it's a weekday."

  • whenPaceBelow · Standard+

    Fires when your model's recently measured output rate — the median tokens/sec from your closed pacing sessions — falls below a floor you set. Native: no state KV write needed. Scope it to a model and AND-combine an andSpiral clause so it only alerts during a window you choose.

  • whenPhaseRecurs · Standard+

    Push your observed events (deploys, logins, error spikes) to a named event-stream and this trigger fires only when a new recurring cycle is detected, or a cycle you already track drifts its phase / period or goes silent. A learned baseline suppresses the cycles you've marked expected, so you hear about novelty — not the metronome you already know.

  • whenSequenceRecurs · Standard+ (auto-discovery Pro+)

    Push labelled events to a named event-stream and this trigger fires only when a new repeating ordered pattern — a motif, like cart→address→pay — is detected, or a motif you already track changes its timing or goes silent. Give an explicit pattern, or leave it blank to auto-discover the strongest motif. The same learned baseline suppresses the motifs you've marked expected, so you only hear about novelty.

How user-defined skills work

  • One creator surface. POST /v1/skills takes a Spiral-coordinate trigger and a webhook URL. Returns the one-shot HMAC signing secret exactly once.
  • Eight trigger kinds. at, after, recur, displaceFrom, whenStateMatches, whenPaceBelow, whenPhaseRecurs, whenSequenceRecurs. Each is a predicate over the live Spiral coordinate (or over per-customer KV state or your event streams) — there is no raw-UTC trigger surface.
  • One delivery contract. Every fire is POSTed with an X-Tblk-Signature HMAC-SHA256 header. Retries follow the 1m / 5m / 30m / 2h / 12h backoff — same schedule for every skill, no exceptions.
  • Fires regardless of device state. Triggers are evaluated on our servers. A fire never depends on a model being loaded, an app being open, or a phone being awake — screen off, app killed, or offline-and-back-later, the trigger still fires on schedule.
  • Reaching a closed phone. A fire is a webhook, not a push notification — temporalBLOCK is the always-on time brain, not a notification network. The primary path is your app's own notification system: your backend receives the webhook and pushes through APNs (iOS) or FCM (Android), exactly as it already does for any other alert. Nothing for the end user to wire up.
  • Optional native-alarm fallback. Because each skill's next-fire time is deterministic, your app can also mirror it to the phone's built-in local alarm as an offline backup — scheduled automatically by your app, not hand-set by the user (they grant notification or alarm permission once). The server guarantees the trigger; the OS provides the local ring even with no network.
  • Tier gating. Lite is read-only (template gallery only). Standard creates single-stage skills with at / after / recur triggers. Pro adds chain stages and the displaceFrom trigger.
  • Template gallery. GET /v1/skills/templates is open to every tier (including Lite, including unauthenticated callers). Copy a template, edit the trigger, POST.

Plug-and-play for AI agents

Can an AI use Temporal Skills plug-and-play, or must a developer program each one? Plug-and-play. A developer writes no per-skill code — the agent discovers and creates its own skills at runtime.

  • Discover. The agent calls GET /v1/tools and gets back every skill operation it is entitled to as an OpenAI / Anthropic function descriptor — name, description, and JSON-Schema arguments — ready to drop straight into a tool-calling loop.
  • Create. To build a skill the agent POSTs a trigger plus a webhook URL to /v1/skills. The trigger predicate and the webhook are the entire definition — see how user-defined skills work.
  • What you still provide. Two things, both one-time: a paid tier (creating skills needs Standard+; Lite reads the template gallery), and a webhook endpoint that receives the signed fire.
  • Templates are optional. The starter templates are worked examples that orient the agent — copy one, edit the trigger, POST. They are not required; an agent can compile a trigger from scratch.

Bundled — every plan

9 skills

Included on Lite, Standard, Pro, and Enterprise.

Calibration

id: calibration

Generate a temporal calibration block that anchors any LLM in the current year and user-local time.

  • POST/v1/calibrateGet the current date and time for this conversation, anchored to a certified clock. Call this before answering ANY time-sensitive question — 'what time is it?', 'what day is it?', 'how long until X?', etc. Pass the user's IANA timezone so the response shows their local time (e.g. 'America/New_York', 'America/Chicago', 'America/Los_Angeles', 'America/Denver', 'Europe/London'). If timezone is omitted, the block shows UTC and the local-time answer will be wrong.

Temporal Intent Classifier

id: classify

Classify whether a user query is time-sensitive — and how — so you route it to the right tool instead of hand-rolling regex.

  • POST/v1/classifyClassify the temporal intent of a user query before you answer it (advisory routing signal). Tells you whether the query asks for the current time/date (time_of_day → call calibrate with the user's timezone), turns on facts newer than the model's training (knowledge_cutoff or live_events → call bridge), or asks to schedule something (scheduled_action → call skills), plus needsFreshData and needsUserTimezone flags. Pure deterministic text analysis — no model, no external lookup, zero cost. Call this first to decide which other temporalBLOCK tool to use.
no tier gate

Reference Clock

id: reference-clock

Live anchored UTC reading with confidence band and provider attribution.

Client-side widget — no REST endpoint of its own.

Calendars

id: calendars

Project the current moment into Gregorian, Holocene, Julian, MJD, stardate, cosmological, UT1, GMST, LMST, and J2000.

  • GET/v1/spiralWhere the live 'now' sits inside repeating time cycles — phase across twelve rungs from sub-second up to millennia, with optional calendar projection. This is NOT the plain wall-clock time: for 'what time/day is it?' use calibrate. Reach for spiral_coordinate only when you need cyclic position/phase (e.g. point in the day, week, year, or longer cycle), not a date.

Causal Block

id: causal-block

Issue and merge Spiral-anchored HLC tuples for distributed causal ordering. Lite throttled.

  • POST/v1/causal/nowIssue a fresh HLC for the calling customer + node.
  • POST/v1/causal/mergeMerge up to 64 remote HLCs into the calling node's clock.

On This Day

id: on-this-day

List notable historical events for a given date across the supported calendars.

  • GET/v1/skills/on-this-dayNotable historical events for a given date (defaults to today UTC).

Date Math

id: date-math

Business-day, leap-second-aware durations and 'N working days from X' arithmetic.

  • POST/v1/skills/date-mathLeap-second-aware diff and addBusinessDays arithmetic over UTC.

Time Vault

id: time-vault

Browse a read-only, shared collection of curated science and mathematics references with sources, status, and reflection prompts.

  • GET/v1/time-vaultSearch and browse the read-only Time Vault, a shared curated science and mathematics reference collection. Use its sources and status to ground explanations, and its reflection prompts as discussion starters. This is not active research, forecast evidence, or a quantum hardware service; customers cannot write entries and no hosted generation runs.
  • GET/v1/time-vault/{slug}Retrieve one curated Time Vault reference by its slug, including sources, status, and reflection prompts. Cite the sources and preserve the stated status and limitations. Reflection prompts are questions for your own model or discussion, not generated answers, active research, forecast evidence, or quantum hardware access. Read-only; no customer writes or hosted generation.
no tier gate

Projected Timestamps

id: projected-timestamps

Deterministically project and revise future constant-velocity 2D encounter timestamps from caller-supplied observations.

  • POST/v1/projected-timestamps/encounterProject or revise a future planar encounter timestamp with deterministic constant-velocity math. This is not learned forecasting or sensor verification. Supply the prior nextContext to compare revisions; history is caller-managed and not server-attested. Times use the caller-supplied clock, not independently verified atomic time, and this tool does not expose a canonical private Spiral codec.
no tier gate

Standard+

4 skills

Included on Standard, Pro, and Enterprise. User-defined skills live here.

Vision Block

id: vision-block

Batch-stamp up to 1000 timestamps per call with Spiral coordinates.

  • POST/v1/spiral/batchStamp up to 1000 timestamps per call with Spiral coordinates.

Forecast

id: forecast

Grounded time-series forecasting: submit a numeric series and a horizon, get forecast points with confidence ranges, each stamped to the anchored now with a knowledge-boundary caveat. Standard+.

  • POST/v1/forecastForecast a numeric time series: submit timestamped points and a horizon, receive forecast points with a confidence range, each stamped to the anchored now with a knowledge-boundary caveat. Standard+.
402 FORECAST_REQUIRES_PAID_TIER
SDK: TemporalBlock#forecast

Output Pacing

id: output-pacing

Let your model track its own output time on the anchored clock: report cumulative tokens, get authoritative elapsed time, a smoothed tokens/sec rate, and a projected finish. temporalBLOCK does not count tokens — you report them; the value is the shared clock plus the projection math.

  • POST/v1/pacing/sessionsOpen a live pacing session at output start (Standard+). Returns a session id and the anchored start instant.
  • POST/v1/pacing/sessions/{id}/ticksReport cumulative tokens at a chunk boundary. Returns anchored elapsed time, a smoothed tokens/sec rate, and a projected finish for an optional target. Rate-limited, never metered per tick.
  • POST/v1/pacing/sessions/{id}/closeClose the session. Persists one summary row and folds the measured rate into the recent-rate store for reuse by the estimate call and the calibration fold.
  • POST/v1/pacing/estimateStateless estimate (every tier, like calibration): tokens to time or seconds to tokens. The rate may be supplied or pulled from your recently measured rate.
402 PACING_SESSIONS_REQUIRE_PAID_TIER
SDK: TemporalBlock#pacing

User-defined Skills

id: user-skills

Create your own time-anchored skill: pick a Spiral-coordinate trigger (at / after / recur / displaceFrom) and a webhook URL. One signed POST per fire.

  • POST/v1/skillsSet a timer, alarm, reminder, or recurring schedule that fires a webhook. For a countdown timer (e.g. '2 minute timer'): use trigger.kind='after' with trigger.durationMs=120000. For a one-shot alarm at a specific time: use trigger.kind='at' with trigger.atUtcMs (epoch ms). For recurring (e.g. every hour): use trigger.kind='recur'. Returns a one-shot signing secret for the webhook.
  • GET/v1/skillsList the calling customer's user_skills rows.
  • GET/v1/skills/{id}Inspect one user_skill by id.
  • DELETE/v1/skills/{id}Cancel one user_skill by id. Idempotent on terminal rows.
  • GET/v1/skills/templatesList the public template gallery (read-only on every tier, including Lite).
Templates (12)
  • trigger.kind = afterfifteen-minute-pomodoro
    15-minute focus block. Fire once 15 minutes after the row is created (after-trigger on the hr rung).
  • trigger.kind = recurdaily-standup
    Daily standup at 9am UTC. Recurring trigger on the day rung at the 9/24 = 0.375 phase.
  • trigger.kind = recurweekly-digest
    Weekly digest every Monday. Recurring trigger on the wk rung at the Mon-morning phase.
  • trigger.kind = recurcountdown-from-ten
    Countdown: 10 ticks, then stop. Counting recur (Task #1172): fire 10 times on the s rung, counting backward 10→1 then terminal. Each fire's payload carries `seq` + `maxFires`. Set countStep:-1 for the negative-time spiral (counting backward).
  • trigger.kind = afterpress-to-start-timer
    Press-to-start timer (manual arm). Manual-arm (Task #arm): create unarmed with armPolicy:'manual', then a human presses a button in your own UI that calls POST /v1/skills/{id}/arm — that press, not creation time, is what starts the countdown. Use for a chat 'press here to start' button. Not for the LLM to arm itself.
  • trigger.kind = atdeadline-alarm
    Absolute deadline. One-shot at-trigger compiled from a Spiral coordinate the LLM picked.
  • trigger.kind = whenStateMatchesalert-when-state-drifts
    Alert when stored value drifts past a threshold. whenStateMatches-trigger (Task #525): fire once when the named key in your state KV drifts past N. AND-combine with any Spiral trigger to gate by phase.
  • trigger.kind = whenStateMatchesoutput-rate-drift
    Alert when your model's output rate drops. whenStateMatches recipe: have your app write its measured tokens/sec from POST /v1/pacing/sessions/{id}/close into the state KV (e.g. PUT /v1/state/output.tokens_per_sec), then fire once a day if that rate drifts below a floor — your model is slowing down.
  • trigger.kind = whenPaceBelowpace-below-floor
    Fire when your model's output rate drops (native). whenPaceBelow-trigger: fire when your recently measured output rate (median tokens/sec from closed pacing sessions) is below a floor. Native — no state KV write needed. Scope to a model and AND-combine with a Spiral phase to gate when it can alert. Set `graceAfterProgress: true` to forgive a dip whenever the recent rate history shows accumulated upward progress (a real stall still fires).
  • trigger.kind = displaceFromdrift-from-anchor
    Fire when displaced from an anchor. displaceFrom-trigger: fire once when the current Spiral coordinate is `thresholdMs` past an anchor.
  • trigger.kind = whenPhaseRecursphase-recurrence-novelty
    Fire when an observed event cycle is new or changes. whenPhaseRecurs-trigger (Task #775): push observed event timestamps to a named event-stream; fire ONLY when a new recurring cycle appears, or a known cycle drifts phase/period or goes silent. A learned baseline suppresses the cycles you've already marked expected. Standard+.
  • trigger.kind = whenSequenceRecurssequence-recurrence-novelty
    Fire when an ordered event sequence is new or changes. whenSequenceRecurs-trigger (Task #776): push labelled events to a named event-stream; fire ONLY when a new repeating ordered pattern (a motif — A→B→C) appears, or a known motif's timing signature drifts or goes silent. A learned baseline suppresses the motifs you've already marked expected. Explicit pattern Standard+; auto-discovery Pro+.

Pro+

2 skills

Included on Pro and Enterprise. Chain stages and the displaceFrom trigger unlock here.

Causal Compare

id: causal-compare

Compare two HLC tuples under the partial order (before / after / equal / concurrent).

  • POST/v1/causal/compareCompare two HLCs under the partial order.

Operation Coordinator

id: operations

Coordinate a named group of timed tasks across operator nodes: heartbeats feed observed-vs-expected progress, and a deviation scan recalibrates the plan (alert, reassign, re-sequence, reintegrate) when an operator lags, stalls, or disconnects.

  • POST/v1/operationsCreate a named group of timed tasks across operator nodes (Pro+).
  • GET/v1/operationsList the calling customer's operations (read-only, any tier).
  • GET/v1/operations/{id}Operation status incl. live operator health + task progress.
  • POST/v1/operations/{id}/heartbeatReport an operator progress heartbeat; advances that operator's Causal Block HLC.
  • GET/v1/operations/{id}/recalibrationsPage the append-only recalibration log, newest first.
  • DELETE/v1/operations/{id}Cancel an active operation. Ownership-gated. Idempotent.

The Temporal Spiral coordinate and every skill built on top of it is patent pending — U.S. Provisional Application No. 64/065,213 (filed 2026-05-14). The stateless calendar helpers (on-this-day, date-math) are pre-art calendar arithmetic and outside the patent surface.

temporalBLOCK™

Calibrate your A.I.’s temporal clock

temporalBLOCK™ and Temporal Spiral™ are trademarks of COREinsights.

No tracking cookies — site preferences stay in your browser.

© 2026 COREinsights. Patent pending.