From esdb
Observe events in real time from an EventSourcingDB instance. Use when the user wants to watch, monitor, or stream live events as they are written.
npx claudepluginhub thenativeweb/claude-plugins --plugin esdbThis skill is limited to using the following tools:
Observe events in real time from an EventSourcingDB instance. This opens a long-lived streaming connection.
Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Conducts multi-round deep research on GitHub repos via API and web searches, generating markdown reports with executive summaries, timelines, metrics, and Mermaid diagrams.
Dynamically discovers and combines enabled skills into cohesive, unexpected delightful experiences like interactive HTML or themed artifacts. Activates on 'surprise me', inspiration, or boredom cues.
Observe events in real time from an EventSourcingDB instance. This opens a long-lived streaming connection.
Read configuration from environment variables:
echo "ESDB_URL: ${ESDB_URL:-http://localhost:3000}"
echo "ESDB_API_TOKEN: ${ESDB_API_TOKEN:-(not set)}"
ESDB_URL if set, otherwise default to http://localhost:3000.ESDB_API_TOKEN is not set, use AskUserQuestion to ask the user for the API token.This endpoint returns a long-lived NDJSON stream. Always use --max-time to ensure the connection terminates (default: 30 seconds). Use --no-buffer and filter out heartbeats:
curl -s --no-buffer --max-time 30 -X POST \
-H "authorization: Bearer ${ESDB_API_TOKEN}" \
-H "content-type: application/json" \
-d '<REQUEST_BODY>' \
"${ESDB_URL:-http://localhost:3000}/api/v1/observe-events" \
| grep -v '"type":"heartbeat"'
When the user wants a custom timeout, use AskUserQuestion to ask for the desired duration in seconds.
{
"subject": "/<subject-path>",
"options": {
"recursive": false,
"lowerBound": {
"id": "<event-id>",
"type": "exclusive"
},
"fromLatestEvent": {
"subject": "/<subject-path>",
"type": "<event-type>",
"ifEventIsMissing": "read-everything"
}
}
}
Options:
recursive (boolean): Include sub-subjects.lowerBound: Resume from event ID. type: "inclusive" or "exclusive".fromLatestEvent: Start from last event of given type. ifEventIsMissing: "read-everything" or "wait-for-event". Cannot be combined with lowerBound.curl -s --no-buffer --max-time 30 -X POST \
-H "authorization: Bearer ${ESDB_API_TOKEN}" \
-H "content-type: application/json" \
-d "{
\"subject\": \"/\",
\"options\": {
\"recursive\": true
}
}" \
"${ESDB_URL:-http://localhost:3000}/api/v1/observe-events" \
| grep -v '"type":"heartbeat"'
NDJSON stream with one line per event:
{"type":"event","payload":{...}}
Heartbeats ({"type":"heartbeat","payload":{}}) are sent periodically and are filtered out by the grep -v pattern.
/ (e.g., /books/42)."42").