heartbeat-opencode-plugin
v0.1.7
Published
Heartbeat Runtime
Maintainers
Readme
Heartbeat OpenCode Plugin
Heartbeat is a plugin stack for OpenCode with three modules:
scheduler: human-managed cron jobs (includingopencode run)task-manager: structured task state ([program][taskId])memory: shared append-only log + grep/search retrieval
The design model is:
- LLM = compute cycle
- Scheduler = clock/launcher
- Task manager + memory = state across cycles
Architecture
Components
- Scheduler (
/Users/pragneshbarik/Projects/heartbeat/scheduler/index.ts)
- Stores job definitions as JSON files.
- Runs jobs manually or on schedule (launchd on macOS).
- Streams all emitted stdout/stderr lines to one shared log file.
- Task Manager (
/Users/pragneshbarik/Projects/heartbeat/task-manager/index.ts)
- Stores tasks in a JSON file.
- Task key is
[program][taskId]. - Supports
parentTaskIdfor task hierarchies. - Tracks status, priority, timestamps, and optional references.
- Memory (
/Users/pragneshbarik/Projects/heartbeat/memory/index.ts)
- Appends timestamped entries to one shared file.
- Supports:
- tag lookup by
[program] - exact lookup by
[program][taskId] - regex grep across all entries
- tag lookup by
- Preserves multiline entries as a single memory record.
- Unified Plugin Entry (
/Users/pragneshbarik/Projects/heartbeat/index.ts)
- Merges tools from scheduler + task-manager + memory.
- Adds
heartbeat_boot_contexthelper:- current task snapshot
- recent task memory
- queue slices (pending/running/blocked/raised)
Data Flow
- Human creates a scheduler job.
- Scheduler executes command or
opencode run <prompt>. - Runtime output is streamed into the shared log.
- Next cycle can query memory and task state, then continue.
Config Model
launchd label prefix is fixed in code:
- launchd label prefix:
com.heartbeat.job
Bun executable resolution order:
BUN_BINenv overridebunfromPATH- fallback paths:
/opt/homebrew/bin/bun/usr/local/bin/bun~/.bun/bin/bun
Configurable settings:
- logs directory/file
- jobs directory
- default job workdir
- task store file
Config precedence (lowest -> highest)
- Built-in defaults (in code)
- Global plugin config:
~/.config/opencode/heartbeat.jsonc
- Legacy fallback files:
heartbeat.config.json.opencode/heartbeat.config.json
- Workspace plugin config:
.opencode/heartbeat.jsonc
- Environment override:
HEARTBEAT_CONFIG_PATH- legacy alias:
HEARTBEAT_CONFIG
Setup
1. Install package in workspace
npm install heartbeat-opencode-plugin2. Register plugin in OpenCode config
Create or edit opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["heartbeat-opencode-plugin"]
}3. Add Heartbeat workspace config
Create .opencode/heartbeat.jsonc:
{
"logs": {
"dir": "./.heartbeat/logs",
"file": "memory.log"
},
"scheduler": {
"jobsDir": "./.heartbeat/jobs",
"defaultWorkdir": "."
},
"taskManager": {
"file": "./.heartbeat/tasks.json"
}
}Quick Start
- Create a task:
task_create(program, taskId, description, parentTaskId?, priority?, status?, references?)
- Create a job:
scheduler_create_opencode_job(...)orscheduler_create_command_job(...)
- Test run once:
scheduler_run_job(jobId)
- Read memory:
read_program_task(program, taskId?)read_program(program)memory_grep(pattern)
- Mark done:
task_mark_done(program, taskId)
Tool Surface
Scheduler tools:
scheduler_create_opencode_jobscheduler_create_command_jobscheduler_list_jobsscheduler_get_jobscheduler_update_jobscheduler_run_jobscheduler_install_job(macOS)scheduler_uninstall_job(macOS)scheduler_delete_jobscheduler_info
Task tools:
task_createtask_listtask_gettask_updatetask_mark_donetask_deletetask_store_info
Memory tools:
write_program_taskread_programread_program_taskmemory_greprecentmemory_info
Helper:
heartbeat_boot_context
Local Development
bun install
bun run typecheckPublish To npm
bun run typecheck
NPM_CONFIG_CACHE=/tmp/heartbeat-npm-cache npm pack --dry-run
npm login
npm publish --access publicExample Files
/Users/pragneshbarik/Projects/heartbeat/examples/opencode.json/Users/pragneshbarik/Projects/heartbeat/examples/.opencode/heartbeat.jsonc/Users/pragneshbarik/Projects/heartbeat/examples/scheduler/jobs/daily-standup.json/Users/pragneshbarik/Projects/heartbeat/examples/scheduler/jobs/research-cycle.json/Users/pragneshbarik/Projects/heartbeat/examples/task-manager/tasks.json
