Momentum
Overview
Turn one-off workflows into durable, governed loops that keep running after the chat ends. Momentum is a HUMΛN primitive for recurring work — morning briefs, pipeline scouts, condition watches, and weekly reviews — with schedules, connector bindings, delivery targets, and cost/approval policies.
Shipped surface: client.momentum on @human/sdk → /v1/momentum/*. There is no fictional HumanOS.createLoop() helper.
Why Momentum?
- Keep this moving: Users say what should keep happening; HUMΛN runs it on cadence
- Governance: Policies cap cost, require approval, and surface meaningful changes
- Magic by default: The builder accepts human schedules (
weekdays at 8am) and converts them to cron - Control when needed: Full
create()body for triggers, delivery, and policy overrides - Provenance: Every run is logged — inspect history and logs per object
Think of it like: A standing calendar invite that actually does the prep work — not a reminder to do it yourself.
Shipped Momentum surfaces
| Surface | Path / accessor | Purpose |
|---|---|---|
| SDK builder | client.momentum.build(goal).every(...).create() |
Magic-mode loop creation |
| SDK client | client.momentum.create / list / get / activate / run / pause / resume |
Full lifecycle |
| REST | GET/POST/PATCH/DELETE /v1/momentum |
HTTP parity |
| MCP | human.momentum.* tools on org MCP endpoint |
AI client integration |
Try it — create, activate, run
Control mode — full create body
When the builder is not enough, call client.momentum.create() directly:
const { momentum } = await client.momentum.create({
name: 'Pipeline scout',
goal: 'Detect HubSpot stage changes and post deltas to #sales',
trigger: {
kind: 'schedule',
cron: '0 8 * * 1-5',
timezone: 'America/Los_Angeles',
},
preferred_connectors: ['hubspot', 'slack'],
delivery: { primary: 'slack', format: 'immediate' },
policy: {
require_approval: false,
max_cost_per_run_usd: 1.5,
},
});
await client.momentum.activate(momentum.id);
Templates and canonical intents:
const templates = await client.momentum.listTemplates({ limit: 10 });
const fromTemplate = await client.momentum
.build('Weekly revenue recap')
.from_template(templates.data[0]?.id ?? 'template_sales_recap')
.every('every monday at 9am')
.create();
// Bind a canonical intent id when routing from Intent detection
await client.momentum
.build('Keep customer onboarding tasks moving')
.from_intent('intent://onboarding/nudge')
.every('weekdays at 10am')
.create();
Lifecycle helpers: pause, resume, update, delete, and inspect map to POST/PATCH/DELETE /v1/momentum/:id/*.
Keep this moving (intent alias)
Community and Companion copy link /docs/patterns/intent/keep-this-moving. That URL is an alias of this pattern.
The “Keep this moving” affordance creates a Momentum object from detected intent — same APIs as above. Use from_intent() when you already have a canonical intent id from Intent routing.
Prefer this page (momentum) in new links.
MCP Momentum tools (alias)
/docs/patterns/mcp/human-momentum-tools is an alias. AI clients call the org MCP mesh:
https://{your-org-slug}.mcp.haio.run/mcp
Primary tools (generated from OpenAPI x-mcp-tool on momentum routes):
| Tool | API |
|---|---|
human.momentum.create |
POST /v1/momentum |
human.momentum.run |
POST /v1/momentum/:id/run |
human.momentum.list |
GET /v1/momentum |
human.momentum.get |
GET /v1/momentum/:id |
Example MCP tools/call create payload:
{
"name": "human.momentum.create",
"arguments": {
"name": "Morning pipeline brief",
"goal": "Summarize HubSpot pipeline changes and post to #sales",
"triggers": [
{ "kind": "schedule", "cron": "0 8 * * 1-5", "timezone": "America/Los_Angeles" }
],
"preferred_connectors": ["hubspot", "slack"],
"delivery": { "primary": "slack", "format": "immediate" },
"policy": { "max_cost_per_run_usd": 1.5 }
}
}
Deep dive: Momentum MCP tools guide.
Ops cadence
Daily standup digests, SLA watches, and queue health summaries on a schedule
Companion handoff
User says “keep this moving” — loop survives after the session ends
Connector-bound work
HubSpot + Slack + email briefs with cost caps per run
Governed automation
require_approval policy for loops that touch production systems
DO
Activate only after reviewing policy.max_cost_per_run_usd and require_approval
Use delegation tokens scoped to momentum CRUD + run for MCP clients
Inspect history and logs when a run fails — do not blindly re-run
DON'T
Leave draft objects with production connector credentials unattended
Invent HumanOS.createLoop or client.momentum.subscribe helpers
Disable approval policy on irreversible external actions
Getting started guide
Step-by-step SDK + CLI walkthrough: Momentum getting started.
Related guides: Momentum deep dive · Momentum MCP tools.
Next Steps
- Capability routing — route capable executors before running loops
- Human-in-the-Loop — when loops need approval gates
- Simple Orchestration — one-shot work-items vs recurring Momentum
See Also
client.momentum→/v1/momentum(@human/sdk)- MCP endpoint:
https://{org}.mcp.haio.run/mcp - Community: Momentum — keep this moving
- Guide: Momentum getting started