← Back to Patterns

Momentum

Availablehumanos•beginner

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

    SurfacePath / accessorPurpose
    SDK builderclient.momentum.build(goal).every(...).create()Magic-mode loop creation
    SDK clientclient.momentum.create / list / get / activate / run / pause / resumeFull lifecycle
    RESTGET/POST/PATCH/DELETE /v1/momentumHTTP parity
    MCPhuman.momentum.* tools on org MCP endpointAI client integration

    Try it — create, activate, run

    >
    SDK:

    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):

    ToolAPI
    human.momentum.createPOST /v1/momentum
    human.momentum.runPOST /v1/momentum/:id/run
    human.momentum.listGET /v1/momentum
    human.momentum.getGET /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
  • Same route in the other SDKs

    The TypeScript tab above is the contract. These calls hit that same route.

    >
    SDK: