← Blueprints

BLUEPRINT · keyword-pulse

Keyword pulse analyst

Watches how much a keyword is being talked about across Hacker News, and when the volume shifts, writes a one-line read on what's driving it — published as a signal other processes can act on. Edit the query in both URLs.

Runs
every hour
Leash
auto
Publishes
team.findings

How it decides

  1. OBSERVE · source rest_api count_matches
  2. FILTER · gate fast_path_diff
  3. REASON · reason llm_reason · economy tier only when the gate fires
  4. ACT · act publish_signalwrite_state

● = touches the outside world (leashed by default)

What it costs

Model only when mentions shift · economy tier · ≤ $0.02/day · publishes team.findings.

Ceiling: budget_usd_per_day: 0.02

What you'll need

No credentials.

A model key (Anthropic, OpenAI or xAI) in Settings.

Make it yours

Edit the query in both URLs.

sources.newest.url
https://hn.algolia.com/api/v1/search_by_date?query=claude&tags=story
sources.front.url
https://hn.algolia.com/api/v1/search?query=claude&tags=front_page
actions[0].topic
team.findings

Full YAML

blueprints/keyword-pulse.yaml
# Multi-source synthesis. Reads two HN feeds (newest + front page),
# counts keyword mentions across both, and when the pulse changes, reasons
# about what's going on and publishes an insight signal for other processes.
blueprint:
  id: keyword-pulse
  title: Keyword pulse analyst
  description: >-
    Watches how much a keyword is being talked about across Hacker News, and
    when the volume shifts, writes a one-line read on what's driving it —
    published as a signal other processes can act on. Edit the query in both URLs.
config:
  synth:
    name: Keyword pulse
    goal: Tell the team when chatter about my keyword shifts, and why.
    schedule_seconds: 3600
  sources:
    - id: newest
      primitive: rest_api
      config:
        url: "https://hn.algolia.com/api/v1/search_by_date?query=claude&tags=story"
        items_path: hits
        max_pages: 1
    - id: front
      primitive: rest_api
      config:
        url: "https://hn.algolia.com/api/v1/search?query=claude&tags=front_page"
        items_path: hits
        max_pages: 1
  transforms:
    - id: newest_count
      primitive: count_matches
      config:
        text: $sources.newest.items
        field: title
        pattern: claude
    - id: front_count
      primitive: count_matches
      config:
        text: $sources.front.items
        field: title
        pattern: claude
  fast_path:
    primitive: fast_path_diff
    inputs:
      current: $transforms.newest_count.count
      previous: $state.last_count
  reasoning:
    primitive: llm_reason
    triggered_by: fast_path
    model_tier: economy
    budget_usd_per_day: 0.02
    input: >-
      New-story mentions: {$transforms.newest_count.count}. Front-page
      mentions: {$transforms.front_count.count}. Recent titles:
      {$transforms.newest_count.matches}
    output_schema:
      insight: string
      direction: string
      confidence: float
  actions:
    - if: "$reasoning.confidence > 0.5"
      primitive: publish_signal
      config:
        topic: team.findings
        payload:
          insight: $reasoning.insight
          direction: $reasoning.direction
          mentions: $transforms.newest_count.count
    - always: true
      primitive: write_state
      config:
        last_count: $transforms.newest_count.count
        checked_at: $tick.started_at

Install

In the control room

Blueprints → Keyword pulse analyst → Shadow, then Deploy.

To change something first (see Make it yours): View config, copy the JSON, and paste it into + Install a Synth.

With your AI

Ask: "Clone the keyword-pulse blueprint." It uses caedos_blueprints, then validates, shadows and deploys.

Related use case