Skip to content

🫀 Autonomous Pulse ​

Suitcase can wake up periodically, evaluate your career context, and decide whether to take action — all without bothering you.

What the Pulse Does ​

The pulse is a periodic wake-up cycle, not a notification system. On each pulse, Suitcase:

  1. Checks its own health (API, LLM, service status)
  2. Evaluates your career context (leads, reflections, strategy)
  3. Chooses the highest-priority safe action
  4. Produces a durable artifact recording what it considered and what it chose

By default, the pulse does not message you. It works quietly in the background, producing reflections, triaging leads, updating strategy notes, and proposing improvements — all inside suitcase_world/pulse/.

Configuration ​

Configure the pulse interval from the Setup dashboard (/setup) using the Pulse Interval dropdown:

OptionInterval
Disabled0 seconds
5 minutes300
15 minutes900
30 minutes1800
1 hour3600
4 hours14400
24 hours86400

Or set SUITCASE_PULSE_INTERVAL in .env (seconds). Set to 0 to disable.


### Cadence Values

| Value | Fires every |
|-------|-------------|
| `off` | Never |
| `every_2_hours` | 2 hours |
| `every_4_hours` | 4 hours |
| `every_8_hours` | 8 hours |
| `daily` | 24 hours |
| `every_3_days` | 3 days |
| `weekly` | 7 days |

### Allowed Actions

| Action | What it does |
|--------|-------------|
| `reflect` | Writes a reflection under `suitcase_world/reflections/` |
| `lead_triage` | Checks for untriaged job leads and creates a triage plan |
| `strategy_update` | Creates a strategy snapshot with observations and suggestions |
| `patch_proposal` | Proposes a system improvement as a patch request |
| `creative_project` | Reserved for future creative work |
| `user_message` | **Disabled by default.** If enabled, Suitcase may message you — but only with concrete, high-value reasons, and at most once every `min_hours_between_user_messages` hours. |

## Installation

The pulse runs via a systemd timer that fires hourly. The pulse script enforces your configured cadence — if the timer fires but the cadence hasn't elapsed, it exits cleanly as a no-op.

```bash
# Install the timer (requires sudo)
sudo bash scripts/install_suitcase_pulse.sh

This:

  • Installs suitcase-pulse.service and suitcase-pulse.timer
  • Enables the timer to start on boot
  • Starts the timer immediately

Manual Usage ​

bash
# Run once (ignores cadence — fires immediately)
python scripts/suitcase_pulse.py --once

# Dry run — evaluate but don't execute
python scripts/suitcase_pulse.py --dry-run

# Force a specific action
python scripts/suitcase_pulse.py --force-action reflect

# Check timer status
systemctl status suitcase-pulse.timer

# View pulse service logs
journalctl -u suitcase-pulse.service -n 100 --no-pager

Viewing Pulse State ​

bash
# Latest pulse result
cat suitcase_world/pulse/latest.json

# Full event log
cat suitcase_world/pulse/events.jsonl

Safety ​

  • The pulse cannot modify source code, configuration, or runtime files
  • The pulse cannot write outside suitcase_world/
  • The pulse cannot submit job applications or contact people
  • The pulse cannot send messages by default (user_message: false)
  • All patch ideas go through patch request artifacts for the dreaming cycle to review
  • Max one substantive action per pulse by default

Enabling via Web UI ​

During setup, you'll see a card asking if you want to enable the autonomous pulse. If you say yes, you'll get installation instructions — the web UI cannot install systemd timers (that requires root), but it will show you exactly what to run.

Your private career copilot.