4.3 KiB
TORCH: Task Orchestration via Relay-Coordinated Handoff
TORCH is a decentralized task-locking protocol for multi-agent software development.
Quick start
# Check active locks
node bin/torch-lock.mjs check --cadence daily
# Claim a task
AGENT_PLATFORM=codex node bin/torch-lock.mjs lock --agent docs-agent --cadence daily
# List all active locks
node bin/torch-lock.mjs list
Defaults
- Kind:
30078(NIP-33 parameterized replaceable) - Expiration:
NIP-40viaexpirationtag - TTL:
7200s(2h) - Namespace:
torch - Relays:
wss://relay.damus.iowss://nos.lolwss://relay.primal.net
Environment variables
NOSTR_LOCK_NAMESPACENOSTR_LOCK_RELAYSNOSTR_LOCK_TTLNOSTR_LOCK_QUERY_TIMEOUT_MSNOSTR_LOCK_DAILY_ROSTERNOSTR_LOCK_WEEKLY_ROSTERTORCH_CONFIG_PATHAGENT_PLATFORMTORCH_MEMORY_ENABLED(true/false; global memory kill switch, defaults to enabled)TORCH_MEMORY_INGEST_ENABLED(true/falseor comma-separated canaryagent_idallow list)TORCH_MEMORY_RETRIEVAL_ENABLED(true/falseor comma-separated canaryagent_idallow list)TORCH_MEMORY_PRUNE_ENABLED(true,false, ordry-run)
torch-config.json
You can configure TORCH per repository with a root-level torch-config.json file.
Common settings:
nostrLock.namespace— namespace prefix used in d-tags and hashtags.nostrLock.relays— relay list for check/lock/list operations.nostrLock.ttlSeconds— default lock TTL.nostrLock.queryTimeoutMs— relay query timeout.nostrLock.dailyRoster/nostrLock.weeklyRoster— optional per-project roster overrides.dashboard.defaultCadenceView— default dashboard view (daily,weekly,all).dashboard.defaultStatusView— default dashboard status filter (active,all).scheduler.firstPromptByCadence.daily/.weekly— first-run scheduler starting agent.scheduler.handoffCommandByCadence.daily/.weekly— shell command run after lock acquisition; command must useSCHEDULER_AGENT,SCHEDULER_CADENCE, andSCHEDULER_PROMPT_PATHprovided byscripts/agent/run-scheduler-cycle.mjs.scheduler.paused.daily/.weekly— array of agent names to exclude from scheduler rotation.
Default first-run daily scheduler prompt is scheduler-update-agent.
For weekly repository-fit maintenance, TORCH also includes src/prompts/weekly/repo-fit-agent.md to periodically adjust defaults and docs to the host repository.
Operational note: scheduler handoff commands are treated as required execution steps. A non-zero exit code (or missing command) is a hard failure: the scheduler writes a _failed.md task log, exits immediately, and does not publish lock:complete for that run.
Roster precedence
The lock CLI resolves roster names in this order:
NOSTR_LOCK_DAILY_ROSTER/NOSTR_LOCK_WEEKLY_ROSTER(comma-separated env overrides).torch-config.json(nostrLock.dailyRoster/nostrLock.weeklyRoster).src/prompts/roster.json(daily/weeklycanonical scheduler roster).- Built-in fallback roster (used only if
src/prompts/roster.jsonis unreadable).
lock --agent validates names against the resolved cadence roster, and check/list report lock events whose agent names do not match scheduler roster entries exactly.
Exit codes
0: success1: usage error2: relay/network error3: lock denied (already locked or race lost)
Memory rollout plan
- Deploy memory schema changes with scheduler jobs disabled (
TORCH_MEMORY_ENABLED=falseor subsystem flags set tofalse). - Enable ingest for one canary
agent_idviaTORCH_MEMORY_INGEST_ENABLED=<agent_id>. - Validate retrieval quality and storage growth metrics before expanding scope.
- Enable broader retrieval (
TORCH_MEMORY_RETRIEVAL_ENABLED=<allow-list>thentrue). - Enable pruning in
dry-runmode first, then switch to active pruning after revalidation.
Memory rollback plan
- Disable memory flags (
TORCH_MEMORY_ENABLED=falseand/or set ingest/retrieval/prune flags tofalse). - Stop memory maintenance scheduler processes.
- Preserve database state for post-incident analysis; do not drop or rewrite memory tables during rollback.
- Keep prune actions in
dry-run(or disabled) until lifecycle policy and data integrity are revalidated.