Grand Diomande Research · Full HTML Reader

Pulse Local Skill

Pulse runs autonomous development loops that iterate toward a goal without constant human intervention. This skill executes iterations locally via Claude Code subprocess, with iMessage notifications through Clawdbot.

Agents That Account for Themselves research note experiment writeup candidate score 24 .md

Full Public Reader

---
name: bot:pulse
description: Manages Pulse autonomous development sessions with local execution via Claude Code
homepage: https://github.com/diomandeee/comp-core
user-invocable: true
command-dispatch: pulse
metadata.clawdbot: {"local_execution": true}
manifest:
inputs: [project_path, development_goal, max_iterations]
outputs: [session_id, iteration_results, commit_hashes, completion_status]
chains_with: [bot:dream-weaver, sys:plan, evo:evolve, tie:dist]
triggers: [pulse, autonomous, develop, iterate, implement, execute]
can_spawn_pulse: true
---

Pulse Local Skill

Pulse runs autonomous development loops that iterate toward a goal without constant human intervention. This skill executes iterations locally via Claude Code subprocess, with iMessage notifications through Clawdbot.

Commands

CommandDescription
`/pulse @project "goal"`Start an autonomous Pulse session
`/pulse:status [id]`Check session progress
`/pulse:pause <id>`Pause a running session
`/pulse:resume <id>`Resume a paused session
`/pulse:abort <id>`Stop a session
`/pulse:list`List recent sessions
`/pulse:context <id>`View full session context

How Pulse Works

1. User defines a development goal
2. Pulse runs iterations autonomously (up to 10 by default)
3. Each iteration: analyze -> implement -> test -> commit -> signal
4. Signals determine flow:
- `CONTINUE` - keep iterating toward goal
- `COMPLETE` - goal achieved, session ends
- `BLOCKED` - needs human input
5. User notified via iMessage after each iteration

Architecture

User (iMessage)
     |
     v
+-------------------------------+
|   CLAWDBOT (Local Gateway)    |
|   +-------------------------+ |
|   |   PulseHandler (Python) | |
|   |   - Command routing     | |
|   |   - Session management  | |
|   +-------------------------+ |
+-------------------------------+
     |
     +-------------------+
     v                   v
+------------+   +----------------+
| Session    |   | Loop Runner    |
| Manager    |   | - Direct exec  |
| (JSON)     |   | - Subprocess   |
+------------+   +----------------+
     |                   |
     v                   v
+------------+   +----------------+
| [home-path]  |   | Claude Code    |
| sessions/  |   | --print        |
+------------+   +----------------+

Starting a Session

/pulse @my-project "Add user authentication with JWT"

This will:
1. Resolve project path (Desktop/my-project or similar)
2. Create session in [home-path]
3. Start background loop runner
4. Execute iterations via `claude --print` subprocess
5. Send iMessage notifications on progress

Session Notifications

After each iteration, you'll receive an iMessage:

[->] Pulse 3/10

Added JWT verification middleware and login endpoint

When complete:

[OK] Pulse Complete

Project: my-project
Iterations: 7
Commits: 5

Session abc12345 finished successfully.

When blocked:

[!!] Pulse Blocked

Session: abc12345
Iteration: 4
Reason: Need database credentials

Reply to unblock or:
/pulse:abort abc12345

Session Storage

Sessions are stored locally in `[home-path]`:

json
{
  "id": "uuid",
  "projectName": "my-project",
  "projectPath": "/Users/.../my-project",
  "goal": "Add user authentication...",
  "status": "running",
  "currentIteration": 3,
  "maxIterations": 10,
  "lastSignal": "CONTINUE",
  "iterations": [...],
  "progressLog": [...],
  "totalCommits": 2,
  "commitHashes": [...]
}

Configuration

Notification settings in `[home-path]`:

json
{
  "enabled": true,
  "channel": "imessage",
  "recipient": "+1234567890",
  "events": {
    "iteration_complete": true,
    "session_complete": true,
    "blocked": true,
    "started": true
  }
}

Example Session

User: `/pulse @trajectory-search "Add fuzzy search with Levenshtein distance"`

Response:

Pulse Session Started

Session: abc12345
Project: trajectory-search
Goal: Add fuzzy search with Levenshtein distance
Max Iterations: 10

I'll notify you as each iteration completes.

Commands:
- /pulse:status - Check progress
- /pulse:pause - Pause the session
- /pulse:abort - Stop the session

iMessage (Iteration 1):

[->] Pulse 1/10

Created levenshtein.ts with distance calculation function

iMessage (Iteration 2):

[->] Pulse 2/10

Integrated fuzzy search into search endpoint

iMessage (Complete):

[OK] Pulse Complete

Project: trajectory-search
Iterations: 4
Commits: 3

Session abc12345 finished successfully.

Signals

Claude signals its status at the end of each iteration:

SignalMeaningResult
`<signal>CONTINUE</signal>`More work neededContinue to next iteration
`<signal>COMPLETE</signal>`Goal achievedSession ends successfully
`<signal>BLOCKED: reason</signal>`Cannot proceedSession paused for input

Differences from GCP Orchestrator

This local implementation bypasses the GCP-hosted orchestrator:

FeatureGCP OrchestratorLocal Skill
ExecutionCloud Run -> inbox_tasksDirect subprocess
StorageSupabaseLocal JSON files
NotificationsTelegramiMessage
DependenciesGCP, SupabaseNone (local only)
ReliabilityBroken (inbox not picked up)Works

Logs

Iteration logs stored in `[home-path]`:
- `iteration_01.txt`
- `iteration_02.txt`
- etc.

Handler logs in `[home-path]`

Promotion Decision

Attach run IDs, datasets, metrics, and reproduction commands.

Source Anchor

homelab/clawdbot/skills/bot:pulse/SKILL.md

Detected Structure

Method · Evaluation · Code Anchors · Architecture