Brainstorming

API key required
Prompts

Creates a to-do card with a ready-to-paste prompt that hands off recent transcript data to Claude’s content-brainstorming skill for idea organization.

Install

openclaw skills install javis-brainstorming

Brainstorming

Turn a brainstorm-worthy voice/keyboard unit into a generic to-do card whose prompt hands off to Claude's content-brainstorming skill. The skill does no brainstorming itself — it detects a discernible goal/request in a transcript, composes a ready-to-paste Claude prompt, and writes a type="todo" card. iOS renders that card generically (calendar-style, Confirm / Discard) in the Calendar tab; Confirm copies payload.prompt to the clipboard so you can paste it into Claude. Fetch the last 24 hours of transcript data by default.

When to use

  • "brainstorm this"
  • "整理成簡報" (organize this into a presentation)
  • "帮我腦力激盪" (help me brainstorm)
  • A natural ask like "help me organize my thoughts on X" or "turn this into a deck".
  • Automatically, when the javis-server session dispatcher auto-runs this skill after a completed unit matches the brainstorm route — no approve-to-run card (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.

# Step 1 — fetch recent transcripts as JSON (the agent reads this and composes a card)
node scripts/brainstorming.js fetch [--hours N] [--limit N]

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

# Step 2 — push: pipe the composed to-do-card JSON to stdin; dedups (seen) + writes type=todo pending
echo '<todo-card-json>' | node scripts/brainstorming.js push

Workflow

A two-step pipeline mirroring calendar-extractor: the script does the I/O (fetch transcripts, dedup, write the card), the agent/LLM does the reasoning (decide there is a brainstorm-worthy unit, extract its goal/request, and compose the hand-off prompt). Nothing is hardcoded — the agent reads the fetched transcript and emits one to-do-card JSON object.

  1. Fetchnode scripts/brainstorming.js <userId> fetch issues GET http://javis-server:8000/api/transcripts/recent?since=…&limit=… with the OPENCLAW_GATEWAY_TOKEN bearer and prints { "reference_time": LOCAL-wall-clock (zoneless, in tz), "reference_date": "YYYY-MM-DD", "reference_weekday": "Thursday", "reference_time_utc": ISO8601, "tz": IANA, "sessions": [ { session_id, started_at, ended_at, transcript, source } ] }. If fetch fails, returns invalid JSON, or yields zero sessions, output nothing and do not push; report the failure only if the user asked for a diagnostic.

  2. Compose — the agent reads that JSON and decides whether there is a discernible goal and request. If there is none, emit no card (silence is a valid detector outcome). If there is, produce one to-do-card JSON object:

    {
      "title": "Intro Javis to the OpenClaw community",
      "goal": "introduce Javis to the OpenClaw community, for non-engineer users",
      "subtitle": "Brainstorm · 2 sessions",
      "request": [
        "an attention hook",
        "a step-by-step demo/onboarding flow",
        "an explanation for the open-source community",
        "concise skill examples & use cases"
      ],
      "key_points": ["…optional notes the agent pulled from the transcript…"],
      "source_refs": ["<session_id>", "<session_id>"]
    }
    

    title, goal, request[], and source_refs[] are the bracketed fields. The push script composes the ready-to-paste prompt from them using the fixed template below (the agent may instead supply an explicit prompt field to override it; if absent, the template is used). icon defaults to 🧠; subtitle defaults to Brainstorm / Brainstorm · N sessions.

  3. Push — pipe the card JSON into node scripts/brainstorming.js <userId> push. The script:

    • dedups against per-user local state (data/users/<userId>.jsonseen map, 30-day TTL),
    • validates + writes the new card to POST /api/skill/data with type="todo", merge="upsert", status="pending", and payload = { icon, title, subtitle?, prompt, source_refs[] } (icon/title/prompt required) — see references/todo-card-contract.md for the general contract,
    • optionally posts a tiny POST /api/agent/push nudge so the user notices the new card in the Calendar tab.

The ready-to-paste prompt (the per-skill payload.prompt)

push composes this from the card's bracketed fields; the rest is literal. This is what Confirm copies to the clipboard:

I want to <GOAL — e.g. introduce Javis to the OpenClaw community, for non-engineer users>.

Source: my Javis voice note(s), session_id(s): <id…>. Before we start, pull the full
transcript via the javis_mcp connector (get_transcript_tool / search_transcripts_tool).

Please produce:
- <REQUEST item 1 — e.g. an attention hook>
- <REQUEST item 2 — e.g. a step-by-step demo/onboarding flow>
- <REQUEST item 3 — e.g. an explanation for the open-source community>
- <REQUEST item 4 — e.g. concise skill examples & use cases>

Run the content-brainstorming flow: ask me clarifying questions one at a time,
inventory the source material, then produce a structured brief before drafting.

This closes the loop: the openclaw brainstorming skill hands off to the Claude-side content-brainstorming skill, with javis_mcp pulling the source transcript.

How this skill is invoked

This skill has two triggers (dispatcher auto-run and manual).

  1. Dispatcher auto-run (automatic). When a unit of input completes (an audio session ends or a keyboard input is saved), the javis-server session dispatcher classifies the transcript. If it finds brainstorm-worthy content (ideation, "help me organize", presentation/deck planning) and an enabled brainstorm route matches, the server claims run-once (DispatchRouteExecuted (user, unit, route)) and AUTO-RUNS this skill directly — there is no approve-to-run proposal card. It runs in the user's container with a prompt of the form Run /brainstorming for <unit>. Deliverable: …, where the deliverable text is the dispatcher's classification carried as an advisory HINT. The agent parses <unit> (audio:<session_id> or kbd:<keyboard_input.id>), runs fetch --session <id> / fetch --kbd-input <id>, composes the card, and pushes it. The human gate is not running the skill — it is Confirm/Discard on the produced to-do card. The skill does not self-gate — the server owns run-once.
  2. Manual ("brainstorm this"). On demand, the agent runs the windowed fetch (last 24h by default) → composes → pushes. Repeating the ask re-runs composition on the window; the seen map still prevents writing the same card twice.

The route contract the javis-server team must satisfy is declared in this file's metadata.routes block and documented in references/todo-card-contract.md (which also carries the general to-do card contract shared by all to-do-emitting skills).

Notes

  • Runtime dependencies — the scripts use Node 18+ built-ins only (fetch, fs, path); no npm install is needed for the script runtime.
  • Does no brainstorming. This skill detects + composes + writes a card. The actual brainstorming happens on Claude when the user taps Confirm (which copies payload.prompt) and pastes it into the interactive content-brainstorming flow.
  • The card is written PENDING. The row mirrored to /api/skill/data carries status: "pending"; iOS renders it dashed (purple accent) in the Calendar tab with Confirm · Discard. Confirm copies payload.prompt to the clipboard and marks the row confirmed; Discard deletes it. There is no approve-to-run proposal card.
  • Dedup is local-state-authoritative. The container's gateway token can WRITE to /api/skill/data but cannot read it back (GET /api/skill/data requires a Clerk JWT), so novelty is decided by the local seen map ({ "<dedup_key>": "<ts>" } in data/users/<userId>.json, 30-day TTL-pruned); the server write is a best-effort mirror. The to-do dedup_key is title|hash(goal) — re-brainstorming the same unit toward a new goal is a genuinely new card.
  • Timezone: there is no prefs file. tz resolves in order: the tz field on the fetch payload → the TZ environment variable → the system zone. To-do rows carry no date (start_at/end_at absent), so the anchor is informational only — it lets the agent resolve "today" coherently if the goal references it.
  • The shared write side. scripts/todo-card.js is the reusable Layer-1 helper: any future skill can require it to build + POST a type="todo" card without re-implementing the contract. brainstorming.js is its first consumer.
  • User IDs only allow letters, digits, -, _ (path-traversal guard in data.js).