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
- OBSERVE · source
rest_apicount_matches - FILTER · gate
fast_path_diff - REASON · reason
llm_reason · economy tieronly when the gate fires - 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
# 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.