Signal Reference

Complete list of signal types defined in Cadence. Each signal has a type, id (UUID), timestamp, and a type-specific payload.

Filesystem signals

obsidian.note.modified

Emitted when a Markdown file changes in the watched vault.

Field Type Description
path string Absolute path to the modified file
content string Full file content after the edit
frontmatter Record<string, unknown> Parsed YAML frontmatter (empty object if none)

Source: ObsidianWatcher

obsidian.task.found

Emitted for each checkbox task extracted from a modified note.

Field Type Description
path string File the task was found in
text string Task text (without the checkbox syntax)
done boolean Whether the checkbox is checked ([x] or [X])

Source: ObsidianWatcher (when emitTasks is enabled)

file.changed

Generic file change event.

Field Type Description
path string Path to the changed file

Content pipeline signals

journal.insight.extracted

Emitted after the LLM extracts publishable insights from journal content.

Field Type Description
id string Unique insight ID
topic string 3-8 word topic summary
pillar string Content category (e.g., "tech", "business")
hook string Tweet-length opener
excerpt string 1-2 sentence summary
scores.topicClarity number 0-1 clarity score
scores.publishReady number 0-1 readiness score
scores.novelty number 0-1 novelty score
formats string[] Suggested formats (e.g., ["thread", "post", "essay"])

Source: InsightExtractor responder

journal.digest.ready

Emitted when a batch of insights is ready for delivery.

Field Type Description
insights Insight[] Array of extracted insights
flushedAt string ISO timestamp of the flush
trigger string What caused the flush: "count", "time", or "cron"

Source: InsightDigest responder

draft.generated

Emitted when a content draft is generated from insights.

Field Type Description
insightId string Source insight ID
format string Output format (e.g., "thread")
content string Draft content

Source: Planned (not yet implemented)

linwheel.drafts.generated

Emitted after the LinWheel Publisher generates LinkedIn drafts from a ::linkedin-tagged note.

Field Type Description
noteFile string Path to the source Obsidian note
postsCreated number Number of drafts generated
angles string[] Angles used for reshape (e.g., ["field_note", "contrarian"])

Source: LinWheelPublisher responder

Scheduling signals

cadence.cron.fired

Emitted when a scheduled job triggers.

Field Type Description
jobId string Job identifier
jobName string Human-readable job name
firedAt string ISO timestamp

Source: CronBridge

Activity signals

block.transition

Emitted when the current time block changes.

Field Type Description
from Block \| null Previous block (null if none)
to Block \| null New block (null if between blocks)

block.nudge.ack

Emitted when the user acknowledges a nudge.

Field Type Description
blockId string Block that was nudged
acknowledgedAt string ISO timestamp

user.idle

Emitted when the user becomes idle.

Field Type Description
since string ISO timestamp of last activity

user.active

Emitted when the user returns from idle.

Field Type Description
resumedAt string ISO timestamp

morning.start

Emitted when the morning routine begins.

Field Type Description
date string ISO date string

heartbeat.tick

Periodic heartbeat for health checks and time-based logic.

Field Type Description
tick number Monotonic counter
timestamp string ISO timestamp

Learning signals

learning.insight

Emitted when the learning layer generates an insight about tool or prompt effectiveness.

Field Type Description
type string Insight category
message string Human-readable insight
data Record<string, unknown> Structured insight data

Source: Learning module