What package would this affect?
What problem are you trying to solve?
The pulse tool currently supports only three operations: create, trigger, and delete. It is missing a list operation, which means the agent has no way to discover what Pulses currently exist in the system. This leads to several concrete problems:
1. Created Pulses become undiscoverable
After calling pulse.create, the agent receives a pulse_id. If the agent does not record this ID externally, there is no way to retrieve it later. When the agent's context is refreshed, restarted, or the session changes, previously created Pulses become effectively "unknowable."
2. Orphaned Pulses accumulate
Once created, a Pulse continues to fire on schedule regardless of whether the agent remembers it. Without the pulse_id, the agent cannot:
- View the Pulse's details (name, trigger conditions, configuration, etc.)
- Modify the Pulse (requires delete + recreate, which needs the ID)
- Manually trigger the Pulse
- Delete the Pulse
The Pulse persists and fires indefinitely — a completely unmanageable "orphaned task."
3. No clean way to update tasks
When requirements change, the standard workflow is:
- Find the old Pulse → requires
list
- Delete the old Pulse → requires
pulse_id
- Create a new Pulse
Without list, step 1 is impossible. The old Pulse keeps firing and conflicts with the new one.
Proposed approach
Add a list operation to the pulse tool that returns a summary of all active Pulses.
Request format
{
"operation": "list",
"filter": {
"trigger_type": "cron",
"enabled": true
}
}
filter is optional; omit to return all Pulses
filter.trigger_type: filter by trigger type (cron / inactivity / webhook)
filter.enabled: filter by enabled status
Suggested response format
{
"pulses": [
{
"pulse_id": "abc123def456",
"name": "Daily check-in reminder",
"description": "Remind user to check in daily at 8 AM",
"trigger_type": "cron",
"cron_expression": "0 8 * * *",
"chat_mode": "visible",
"auto_delete": true,
"enabled": true,
"created_at": "2026-06-14T00:00:00Z"
}
],
"total": 1
}
Each Pulse entry should include at minimum:
pulse_id — unique identifier (required for trigger / delete)
name — task name
description — task description
trigger_type — trigger type
- Scheduling fields (
cron_expression / interval_seconds / run_at / inactivity_threshold_seconds, returned based on actual trigger type)
chat_mode — chat mode on trigger
auto_delete — whether to auto-delete after trigger
enabled — whether enabled
created_at — creation timestamp
Alternatives considered
Manual external ID tracking: The agent can record every pulse_id returned by pulse.create into an external store (local file, database, etc.) and query that store as a proxy for list. However, this is a workaround that bypasses tool capability, not a reliable solution:
- If the external record is lost or corrupted, the Pulses become unmanageable immediately
- The agent cannot verify whether its external records are consistent with the actual system state
- Every agent implementation must duplicate this bookkeeping logic
A native list operation would complete the pulse tool's CRUD operations (adding the R in CRUD), enabling reliable Pulse lifecycle management directly within the tool.
What package would this affect?
packages/psycherospackages/entity-corepackages/entity-loompackages/launcherWhat problem are you trying to solve?
The
pulsetool currently supports only three operations:create,trigger, anddelete. It is missing alistoperation, which means the agent has no way to discover what Pulses currently exist in the system. This leads to several concrete problems:1. Created Pulses become undiscoverable
After calling
pulse.create, the agent receives apulse_id. If the agent does not record this ID externally, there is no way to retrieve it later. When the agent's context is refreshed, restarted, or the session changes, previously created Pulses become effectively "unknowable."2. Orphaned Pulses accumulate
Once created, a Pulse continues to fire on schedule regardless of whether the agent remembers it. Without the
pulse_id, the agent cannot:The Pulse persists and fires indefinitely — a completely unmanageable "orphaned task."
3. No clean way to update tasks
When requirements change, the standard workflow is:
listpulse_idWithout
list, step 1 is impossible. The old Pulse keeps firing and conflicts with the new one.Proposed approach
Add a
listoperation to thepulsetool that returns a summary of all active Pulses.Request format
{ "operation": "list", "filter": { "trigger_type": "cron", "enabled": true } }filteris optional; omit to return all Pulsesfilter.trigger_type: filter by trigger type (cron/inactivity/webhook)filter.enabled: filter by enabled statusSuggested response format
{ "pulses": [ { "pulse_id": "abc123def456", "name": "Daily check-in reminder", "description": "Remind user to check in daily at 8 AM", "trigger_type": "cron", "cron_expression": "0 8 * * *", "chat_mode": "visible", "auto_delete": true, "enabled": true, "created_at": "2026-06-14T00:00:00Z" } ], "total": 1 }Each Pulse entry should include at minimum:
pulse_id— unique identifier (required fortrigger/delete)name— task namedescription— task descriptiontrigger_type— trigger typecron_expression/interval_seconds/run_at/inactivity_threshold_seconds, returned based on actual trigger type)chat_mode— chat mode on triggerauto_delete— whether to auto-delete after triggerenabled— whether enabledcreated_at— creation timestampAlternatives considered
Manual external ID tracking: The agent can record every
pulse_idreturned bypulse.createinto an external store (local file, database, etc.) and query that store as a proxy forlist. However, this is a workaround that bypasses tool capability, not a reliable solution:A native
listoperation would complete thepulsetool's CRUD operations (adding the R in CRUD), enabling reliable Pulse lifecycle management directly within the tool.