agentCLAWHUBUnverified

Calendar Extractor

Periodically scans recent transcripts to extract calendar events and sends a daily summary of meetings to your iOS chat via push notifications.

OpenClaw

Rank

62

Safety

84

Downloads

1.8k

Updated

Oct 10, 2026

Version

0.7.2

Source

CLAWHUB

About

What it does, and when to use it.

Capability contract not published. No trust telemetry is available yet. 1.8K downloads reported by the source. Last updated 10/10/2026.

Avoid when

  • Contract metadata is missing or unavailable for deterministic execution.

Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing

Public facts

Every fact links back to the source it came from.

Vendor
Clawhubvendor · observed Oct 10, 2026
Protocol compatibility
OpenClawcompatibility · observed Oct 10, 2026
Adoption signal
1.8K downloadsadoption · observed Oct 10, 2026
Latest release
0.7.2release · observed Aug 2, 2026
Handshake status
UNKNOWNsecurity

Install and run

Setup complexity: low.

clawhub skill install s1735yg3x5h8qgtpapgt8es6f9844ese:calendar-extractor
  1. Install using `clawhub skill install s1735yg3x5h8qgtpapgt8es6f9844ese:calendar-extractor` in an isolated environment before connecting it to live workloads.
  2. No published capability contract is available yet, so validate auth and request/response behavior manually.
  3. Review the upstream CLAWHUB listing at https://clawhub.ai/samuel-wei/calendar-extractor before using production credentials.

Contract: missing

curl -s "https://www.xpersona.co/api/v1/agents/clawhub-samuel-wei-calendar-extractor/snapshot"

Documentation

CLAWHUB

155,746 characters of source documentation, loaded on request.

Extracted files

5 files captured from the source.

SKILL.md

---
name: calendar-extractor
description: Extract calendar events from recent recording and keyboard transcripts and push them to your iOS chat as one markdown card per event, each landing in its own Agent Chat thread. Use on demand when the user asks for "today's meetings" / "calendar extract" / "今日会议" / "提取日历", and fetch the last 24 hours of transcript data by default. The javis-server dispatcher also invokes this skill directly for every completed unit — no classifier, no route matching; this skill's own agent decides relevance itself, using this SKILL.md, and may use a deliverable hint passed in the run prompt alongside the transcript; extracted events are written PENDING and become solid only when the user taps Confirm in the iOS calendar table. If the user asks for "today's meetings", use the local day defined by the fetched reference_date field. Triggers: 'today's meetings', 'calendar extract', '今日会议', '提取日历'.
keywords: today's meetings, calendar extract, 今日会议, 提取日历, calendar-extractor
metadata:
  openclaw:
    runtime:
      node: ">=18"
  routes:
    - route_id: calendar
      skill: calendar-extractor
      matches: "meetings, appointments, events, agenda, scheduling, dates/times mentioned"
      args_template: null
      risk: low
---

# Calendar Extractor

> Extract calendar events from recent recording and keyboard transcripts and push them to your iOS chat — one markdown card per event, each landing in its own Agent Chat thread. Fetch the last 24 hours of transcript data by default. If the user asks for "today's meetings", use the local day defined by the fetched reference_date field. Generate one digest per local day in the user's timezone, containing all events that occur on reference_date and any events explicitly mentioned as happening today.

## When to use

- "today's meetings"
- "calendar extract"
- "今日会议"
- "提取日历"
- Automatically, when the javis-server dispatcher invokes this skill directly after a completed voice/keyboard unit — no classifier, no route matching. This skill's own agent decides for itself, using this `SKILL.md`, whether the unit is worth acting on; if not, it does nothing (see "How this skill is invoked").

## Core commands

> **`<userId>` is optional.** Omit it and it defaults to `self`. Each HiJavis user
> runs in their own openclaw container, so `self` is correctly isolated; the gateway
> token (not the userId) authenticates every server call. No registration is needed
> to start — pass an explicit ID only if you run multiple profiles in one container.

```bash
# Step 1 — fetch recent transcripts as JSON (the agent extracts events from this)
node scripts/calendar-extractor.js fetch [--hours N] [--limit N]

# Step 1 (dispatcher run) — fetch ONE completed unit (the auto-run dispatcher unit)
node scripts/calendar-extractor.js fetch --session <sessionId> [--hours N]   # audio unit
node scripts/calendar-extractor.js fetch --kbd-input <inputId> [--hours N]   # keyboard unit

# Step 2 — push: pipe the extracted-e

README.md

# Calendar Extractor

> ⚠️ **Requires the HiJavis iPhone app.** This skill runs inside HiJavis — install the app first, then it's ready to use.
> 📲 https://apps.apple.com/us/app/hijavis/id6745134765

Calendar Extractor finds the plans hiding in your conversations. HiJavis listens, spots anything that sounds like a meeting or appointment, and hands you a tidy list right in your chat.

## Picture this

- You finish a day of back-to-back calls and can't recall what you promised anyone. You ask, "What did I agree to today?" and there it is, all in one list.
- A friend says, "Let's grab coffee Friday." You'd normally forget by lunch. HiJavis already caught it.
- It's 8am. You open the app and see everything you committed to today, before your first sip of coffee.
- You leave a conference where you made a dozen plans out loud, and they're all waiting for you in a list.
- The house is buzzing with "dentist Thursday," "soccer practice moved to 5," "dinner Saturday at the new place." HiJavis keeps track so nobody drops the ball.

If any of those sound like you, this one's for you.

## What it does

HiJavis listens to your conversations and meetings. Calendar Extractor reads back through your recent recordings and spots anything that sounds like a plan or appointment, such as "let's meet Tuesday at 3," "dinner Saturday at the new place," or "call me tomorrow afternoon."

Then it sends each event to your chat as its own card — with the title, date, time, place, who's involved, and any notes it picked up. Every event opens in its own chat thread, so you can act on one plan without losing the rest.

## How to use it

### Just ask

Open your HiJavis chat and ask. Any of these works:

- "today's meetings"
- "calendar extract"
- "今日会议"
- "提取日历"
- Or a natural question like "What meetings do I have coming up?" or "Did I agree to anything today?"

HiJavis scans your recent recordings and replies with your list in seconds. Nothing to set up first.

### Get a daily summary

Want it to come to you? Ask HiJavis to send a summary on a schedule. By default you'll get one each morning (around 8am) and each evening (around 6pm), but you can pick your own times. Just say something like "send me my calendar summary every morning at 7," and it'll start showing up on its own.

## What makes it handy

- **It gets how you talk about time.** You don't say "March 14th at 2:00 PM" out loud. You say "tomorrow," "next Thursday," "around 6," "noon." Calendar Extractor turns all of that into a real date and time in your time zone.
- **It's instant.** The moment a recording or a typed note finishes, it pulls out any plans right then, so your list is ready before you even ask.
- **One card per plan.** Each event arrives as its own card in its own chat thread, so they never pile into one wall of text and you can deal with them one at a time.
- **It never repeats itself.** It remembers what it already showed you, so the same event won't clutter your chat twice.
- **It works in English an

_meta.json

{
  "ownerId": "kn73qn9mdc6qf6hnnz3s26pgch845n33",
  "slug": "calendar-extractor",
  "version": "0.7.2",
  "publishedAt": 1785658459115
}

references/route-contract.md

# calendar-extractor — route contract (for the javis-server team)

This document specifies the interface the **javis-server session-dispatcher**
control-plane must satisfy so the dispatcher can route agenda deliverables to the
`calendar-extractor` skill. It is the contract only — no javis-server code is
implemented in this repo.

See the design spec:
`docs/superpowers/specs/2026-06-08-calendar-extractor-dispatcher-adaptation-design.md`
(sections 3a–3c) and the dispatcher spec it adapts to
(javis-server `docs/superpowers/specs/2026-06-06-session-dispatcher-server-variant.md`,
implemented in `app/services/dispatcher_service.py`).

The same contract is declared, discoverably, in the skill's `SKILL.md`
`metadata.routes` block. That static block declares the skill-owned fields
(`route_id`, `skill`, `matches`, `args_template`, `risk`); `enabled` is omitted
there because it is per-user runtime state the server owns, not skill metadata.

## 3a. RouteRegistry row

Seed this row per user, enabling it when the user enables `calendar-extractor`:

| column | value |
|---|---|
| `route_id` | `"calendar"` |
| `skill` | `"calendar-extractor"` |
| `matches` | `"meetings, appointments, events, agenda, scheduling, dates/times mentioned"` |
| `args_template` | `null` (the unit + the prepended SKILL.md carry everything the skill needs) |
| `risk` | `"low"` (read-only transcript extraction + a push; no destructive side effects) |
| `enabled` | set `true` when the user enables calendar-extractor; `false`/absent otherwise |

The dispatcher only routes a deliverable to this skill when an **enabled** row with
`route_id="calendar"` exists for that user. No enabled row → the skill is never
scheduled.

## 3b. `classify_and_route` deliverable shape

Feed the user's enabled route catalog (each row's `route_id` + `matches`) into the
`classify_and_route` task prompt. For a transcript containing scheduling content,
the classifier must emit a deliverable shaped like:

```json
{
  "id": "<uuid>",
  "title": "Extract calendar events",
  "description": "<short summary of the agenda found>",
  "route_id": "calendar",
  "confidence": 0.0
}
```

- `route_id` MUST be exactly `"calendar"` so it matches the RouteRegistry row.
- No scheduling content in the transcript → **no** `calendar` deliverable → no
  proposal card. (This is the correct, silent outcome.)

The dispatcher then matches the deliverable's `route_id` against the enabled
`RouteRegistry` row, persists a `DispatchProposal`, and pushes a proposal card to
iOS. On the user's Approve, it claims run-once
(`DispatchRouteExecuted (user, unit, route)` via a unique constraint, before
scheduling) and triggers the skill.

## 3c. Prompt contract

The skill relies only on the `<unit>` being present and `_UNIT_RE`-valid in the run
prompt — which the generic dispatcher prompt already provides:

```
Run /calendar-extractor for <unit>. Deliverable: <title>. <description>
Fetch that unit's transcript, produce the deliverable, and push the result

docs/pr-drafts/2026-08-02-prompt-context-fallback.md

# calendar-extractor: use embedded UNIT CONTEXT; a fetch miss no longer aborts the write

- **Branch:** `feat/calendar-extractor-prompt-context-fallback`
- **Date:** 2026-08-02
- **Skill:** `calendar-extractor` (currently `0.7.1`)
- **Spec:** `javis-server/docs/superpowers/specs/2026-08-02-dispatch-prompt-embed-unit-context-resilience-design.md` (Approved — root-caused via systematic-debugging). This is the **coordinated skill-side half** of that spec; the server half (embed the unit context in the dispatch prompt) ships separately on javis-server branch `feat/dispatch-prompt-embed-unit-context`.

## Why

A proactive, dispatcher-invoked extraction **silently vanished** when its source unit row was dropped after dispatch.

Observed (wmp425, 2026-08-02): a "meeting at 1 PM today" keyboard input reached the server, `calendar-extractor` was auto-invoked, and its agent **extracted the event** (container log: *"Extracted and pushed… PENDING card"*) — but **no `skill_data` row was ever written** (`skill_data MAX(id)` stuck at 319; no POST in the server logs). No calendar event → no voice-call arming → no "Javis calls you" ring.

Root cause: the dispatcher handed the skill **only the unit id**, so the skill had to **re-fetch** the unit via `GET /api/transcripts/keyboard-input/<id>`. For this event `keyboard_input 1189` **did not exist** (server `MAX(id)=1187`; rolled-back/dropped inserts — the fragile draft double-save path). The re-fetch 404'd → the skill aborted before the `/api/skill/data` POST → the extracted event was lost.

The server fix threads the already-loaded transcript + `source_ref`/`source_kind`/`reference_date`/`tz` into the dispatch prompt as a delimited `UNIT CONTEXT` block. This PR makes the skill **use that embedded context as the source of truth** and treat `fetch` as an optional enrichment whose failure must not suppress the write.

## What changed

**`scripts/calendar-extractor.js` — `doFetch` degrades instead of throwing.**
- Wrapped the single `httpGet` in a try/catch. On failure (e.g. a 404 keyboard-input miss) it no longer propagates the throw that aborts the run. Instead it logs `⚠️ fetch miss (…) — not aborting; fall back to the run-prompt UNIT CONTEXT.` to stderr and continues with `data = null`.
- The existing envelope normalization already handles a null/empty payload → an empty `sessions` array, so the emitted envelope still carries the relative-time anchor (`reference_time`/`reference_date`/`reference_weekday`/`reference_time_utc`/`tz`).
- Surfaces the miss in the emitted envelope too (not just stderr): `out.fetch_error = fetchError`, so the agent can *see* the re-fetch missed and knowingly fall back to the `UNIT CONTEXT`.

**`SKILL.md` — document the embedded-context path and the no-abort rule.**
- Step 1 (Fetch): added the dispatcher-path **Exception** — a failed single-unit `fetch --session`/`fetch --kbd-input` (surfaced as `fetch_error`, empty sessions) does NOT mean "emit nothing"; fall back to the prompt-embedded t
Github ReposUpdated 9h agoRank 70

AionUi

Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!

MCPOPENCLAW
Github ReposUpdated 6mo agoRank 70

activepieces

AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents

OPENCLAW
Github ReposUpdated 6mo agoRank 70

cherry-studio

AI productivity studio with smart chat, autonomous agents, and 300+ assistants.

MCPOPENCLAW
Github ReposUpdated 7mo agoRank 70

CopilotKit

The Frontend for Agents & Generative UI. React + Angular

OPENCLAW

Machine-readable data

The same record, as JSON, for agents and crawlers.

{
  "facts": [
    {
      "factKey": "vendor",
      "category": "vendor",
      "label": "Vendor",
      "value": "Clawhub",
      "href": "https://clawhub.ai/samuel-wei/skills/calendar-extractor",
      "sourceUrl": "https://clawhub.ai/samuel-wei/skills/calendar-extractor",
      "sourceType": "profile",
      "confidence": "medium",
      "observedAt": "2026-10-10T02:40:20.245Z",
      "isPublic": true
    },
    {
      "factKey": "protocols",
      "category": "compatibility",
      "label": "Protocol compatibility",
      "value": "OpenClaw",
      "href": "https://www.xpersona.co/api/v1/agents/clawhub-samuel-wei-calendar-extractor/contract",
      "sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-samuel-wei-calendar-extractor/contract",
      "sourceType": "contract",
      "confidence": "medium",
      "observedAt": "2026-10-10T02:40:20.245Z",
      "isPublic": true
    },
    {
      "factKey": "traction",
      "category": "adoption",
      "label": "Adoption signal",
      "value": "1.8K downloads",
      "href": "https://clawhub.ai/samuel-wei/calendar-extractor",
      "sourceUrl": "https://clawhub.ai/samuel-wei/calendar-extractor",
      "sourceType": "profile",
      "confidence": "medium",
      "observedAt": "2026-10-10T02:40:20.245Z",
      "isPublic": true
    },
    {
      "factKey": "latest_release",
      "category": "release",
      "label": "Latest release",
      "value": "0.7.2",
      "href": "https://clawhub.ai/samuel-wei/calendar-extractor",
      "sourceUrl": "https://clawhub.ai/samuel-wei/calendar-extractor",
      "sourceType": "release",
      "confidence": "medium",
      "observedAt": "2026-08-02T08:14:19.115Z",
      "isPublic": true
    },
    {
      "factKey": "handshake_status",
      "category": "security",
      "label": "Handshake status",
      "value": "UNKNOWN",
      "href": "https://www.xpersona.co/api/v1/agents/clawhub-samuel-wei-calendar-extractor/trust",
      "sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-samuel-wei-calendar-extractor/trust",
      "sourceType": "trust",
      "confidence": "medium",
      "observedAt": null,
      "isPublic": true
    }
  ],
  "events": [
    {
      "eventType": "release",
      "title": "Release 0.7.2",
      "description": "calendar-extractor 0.7.2 - Added prompt-context fallback logic for dispatcher-invoked runs: when a single-unit fetch fails (e.g. empty/404 session), now falls back to extracting and pushing events using the transcript and reference date embedded in the prompt context, instead of emitting nothing. - Added documentation for the above behavior in SKILL.md (see dispatcher path exception). - Added docs/pr-drafts/2026-08-02-prompt-context-fallback.md. - Removed obsolete skill-card.md file.",
      "href": "https://clawhub.ai/samuel-wei/calendar-extractor",
      "sourceUrl": "https://clawhub.ai/samuel-wei/calendar-extractor",
      "sourceType": "release",
      "confidence": "medium",
      "observedAt": "2026-08-02T08:14:19.115Z",
      "isPublic": true
    }
  ]
}

Record generated Oct 10, 2026.

Sponsored

Ads related to Calendar Extractor and adjacent AI workflows.