Skip to content
Agentmart
Submit a tool
This entry duplicates openloomi-loop, which is the one we list in search.

openloomi-loop

openloomi's Loop — the proactive execution brain that runs inside the OpenLoomi desktop app.

Skill by melandlabs

IndexedApache-2.0★ 1,038
Write a review

Chalk Labs

Need help deploying openloomi-loop?

Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.

Book a call

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/melandlabs-openloomi-loop-0fb617

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

openloomi's Loop — the proactive execution brain that runs inside the OpenLoomi desktop app. Use this skill to inspect state, run a tick, schedule / cancel decision actions, tune preferences, and extend Loop with user-defined decision types, Composio-backed signal channels, or deterministic classifier rules. Triggers: 'openloomi loop', 'loop tick', 'loop schedule', 'loop inbox', 'loop run', 'proactive decisions', 'signal → decision → execute', 'pull signals', 'decision queue', 'register loop type', 'add loop decision type', 'register custom channel', 'add composio channel', 'add loop rule', 'register classifier rule', 'force loop type', 'dry-run loop rule', 'list my loop extensions', 'remove loop type', 'delete loop channel'

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions: not checked yet.

What's inside

Skill name
openloomi-loop
Description
openloomi's Loop — the proactive execution brain that runs inside the OpenLoomi desktop app. Use this skill to inspect state, run a tick, schedule / cancel decision actions, tune preferences, and extend Loop with user-defined decision types, Composio-backed signal channels, or deterministic classifier rules. Triggers: 'openloomi loop', 'loop tick', 'loop schedule', 'loop inbox', 'loop run', 'proactive decisions', 'signal → decision → execute', 'pull signals', 'decision queue', 'register loop type', 'add loop decision type', 'register custom channel', 'add composio channel', 'add loop rule', 'register classifier rule', 'force loop type', 'dry-run loop rule', 'list my loop extensions', 'remove loop type', 'delete loop channel'
License
Apache-2.0
Allowed tools
Bash(curl, *),, Bash(jq, *),, Bash(cat, ~/.openloomi/token, *),, Bash(base64, -d, *),, Bash(ls, ~/.openloomi/loop/*),, Read(~/.openloomi/loop/custom-types.json),, Read(~/.openloomi/loop/custom-channels.json),, Read(~/.openloomi/loop/classifier-rules.json)
Metadata
version: 0.9.0
Instructions
375 lines in SKILL.md · view on GitHub

Before installing

  • Pre-approves some shell commands
  • Instructions call the network

Agent Skills spec issues

  • files: referenced but missing: scripts/openloomi-loop.cjs

Files (2)

  • .gitignore
  • SKILL.md

SKILL.md (first lines)

> **Note:** If OpenLoomi readiness is unknown, use `openloomi-setup` first. If OpenLoomi Desktop is not installed, follow [Getting Started](https://openloomi.ai/docs/getting-started).

# OpenLoomi Loop — The Proactive Execution Brain

Loop pulls signals from connected integrations, classifies them into
typed decisions, and lets the user approve execution from the pet or
the web UI. This skill is a thin Claude-side wrapper around Loop's
HTTP API.

## Where things live

| Concern | Location |
|---|---|
| Business logic | Loop's TypeScript core (closed `DecisionType` + classifier + scheduler) |
| HTTP API | `/api/loop/*` — `state`, `decisions`, `decision/[id]`, `card/[id]`, `connectors`, `brief`, `wrap`, `tick`, `preferences`, `action/*`, `types`, `types/[id]`, `channels`, `channels/[id]`, `classifier-rules`, `classifier-rules/[id]`, `classifier-rules/dry-run` |
| Persistence | `~/.openloomi/loop/{signals.jsonl,decisions.json,status.json,connectors.json,config.json}` |
| Scheduler | Three `ScheduledJob` rows: `loop.tick`, `loop.brief`, `loop.wrap` (registered by the loop scheduler) |
| Pet surface | Tauri Rust thread `loomi-pet-decision-watcher` polls `decisions.json` mtime every 2s and emits `loop:state` / `loop:decision` to bubble + card webviews. The widget supports two built-in themes (`fox`, `capybara`) and a `presenting` state surfaced when a decision moves to `done` before the user has reviewed it — click the bubble to flip back to `happy`. User-editable theme config lives at `~/.openloomi/pet-config.json`. |
| Desktop notifications | Opt-in via `LoopPreferences.desktopNotifications` (default `false`). The pet bubble/card is the primary surface; OS notifications only fire for filtered, actionable decisions. |

## Base URL

| Environment | Base |
|---|---|
| Local desktop (Tauri) — default | `http://localhost:3414` |
| Dev server (`pnpm dev`, `pnpm tauri:dev`) | `http://localhost:3515` |

If unsure, start with `http://localhost:3414`. Loop ships inside the
desktop bundle; the dev port is only relevant when you're running
the web app standalone.

## Auth

Per-user routes (`/tick`, `/decision/[id]` POST, `/preferences`,
`/action/*`) require the same auth as the rest of the app. Token is
the base64-encoded JWT stored at `~/.openloomi/token` — decode it
before use:

```bash
TOKEN=$(cat ~/.openloomi/token | base64 -d)
```

Then pass `-H "Authorization: Bearer $TOKEN"` on every call below.

## API quick reference

| Verb | Path | Use |
|---|---|---|
| GET  | `/api/loop/state` | dashboard payload (prefs + counts + connectors + lastTickAt) |
| GET  | `/api/loop/decisions?status=pending\|done\|dismissed` | inbox |
| GET  | `/api/loop/decision/[id]` | full decision JSON |
| GET  | `/api/loop/card/[id]` | card-shaped JSON (`why` / `source_chain` / `dialogue` / `nextStep`) |
| POST | `/api/loop/tick` | run one tick (signals → classify → enqueue) |
| POST | `/api/loop/action/schedule` | `{decision_id, action:"run\|dry\|dismiss\|promote"}` → `{action_id, fire_at}`. Job fires ~30s later; cancellable. |
| DELETE | `/api/loop/action/[id]` | cancel a not-yet-fired scheduled action (409 if already fired) |
| GET  | `/api/loop/action/by-decision/[id]` | look up `action_id` for a decision (pet "Open" button) |
| POST | `/api/loop/brief` `{force?}` | build morning brief + enqueue card |
| GET  | `/api/loop/brief/content` | render the morning brief as text without enqueuing |
| POST | `/api/loop/wrap` `{force?}` | build evening wrap + enqueue card |
| GET  | `/api/loop/wrap/content` | render the evening wrap as text without enqueuing |
| GET  | `/api/loop/preferences` | read prefs |
| PUT  | `/api/loop/preferences` `{...patch}` | write prefs + sync the 3 `ScheduledJob` rows |
| GET  | `/api/loop/connectors?refresh=1` | list integration health |
| GET  | `/api/loop/types` | list user-defined decision types (per-user extension to the closed `DecisionType` union) |
| PUT  | `/api/loop/types` `{id,label,icon,actionKind,description?}` | upsert a custom decision type. `actionKind` must be one of the 15 built-in `ActionKind` literals; `id` must not collide with a built-in `DecisionType`. |
| DELETE | `/api/loop/types/[id]` | remove a custom decision type |
| GET  | `/api/loop/channels` | list user-defined signal channels (Composio-backed pullers) |
| PUT  | `/api/loop/channels` `{id,label,toolkit,toolSlug,pollIntervalSec,signalType,payloadShape?,eventFilter?}` | upsert a custom channel. `toolSlug` follows the `VENDOR_ACTION` convention (e.g. `STRIPE_LIST_CHARGES`); the watcher invokes it via the `composio` CLI on the registered cadence. |
| DELETE | `/api/loop/channels/[id]` | remove a custom signal channel |
| GET  | `/api/loop/classifier-rules` | list user-defined deterministic classifier rules (override the LLM's classification when conditions match) |
| PUT  | `/api/loop/classifier-rules` `{id,label?,when[],then{type,actionKind?,confidence?},description?}` | upsert a classifier rule. `when` is a non-empty array of up to 8 `{field,op,value?\|pattern?}` predicates (`signal.type` / `signal.payload.*` paths; ops: `eq` `neq` `contains` `matches` `startsWith` `endsWith` `gt` `lt` `gte` `lte` `exists` `absent`). `then.type` is a built-in or custom `DecisionType`, or `"noop"` to suppress the decision entirely. |
| DELETE | `/api/loop/classifier-rules/[id]` | remove a classifier rule |
| POST | `/api/loop/classifier-rules/dry-run` `{signal}` | preview which rules would match a given signal — returns `{matches:[{ruleId,then}], trace:[{ruleId,matched}], totalRules}`. Pure read; does not mutate state. |

## Examples

```bash
BASE="http://localhost:3414"   # or http://localhost:3515
TOKEN=$(cat ~/.openloomi/token | base64 -d)

# Dashboard snapshot
curl -sS "$BASE/api/loop/state" -H "Authorization: Bearer $TOKEN" | jq .

# Run one tick
curl -sS -X POST "$BASE/api/loop/tick" -H "Authorization: Bearer $TOKEN"

# List pending decisions
curl -sS "$BASE/api/loop/decisions?status=pending" \
  -H "Authorization: Bearer $TOKEN" | jq .

# Read a single decision / card
curl -sS "$BASE/api/loop/decision/dec_xxx" -H "Authorization: Bearer $TOKEN"
curl -sS "$BASE/api/loop/card/dec_xxx"      -H "Authorization: Bearer $TOKEN"

# Run a decision (returns action_id; cron fires it ~30s later)
curl -sS -X POST "$BASE/api/loop/action/schedule" \
  -H "Authorization: Bearer $TOKEN" \
  -H "content-type: application/json" \
  -d '{"decision_id":"dec_xxx","action":"run"}'

# Cancel before it fires
curl -sS -X DELETE "$BASE/api/loop/action/<action_id>" \
  -H "Authorization: Bearer $TOKEN"

# Force a brief / wrap card now
curl -sS -X POST "$BASE/api/loop/brief" \
  -H "Authorization: Bearer $TOKEN" \
  -H "content-type: application/json" \
  -d '{"force":true}'

# Tune preferences (intervalSec, briefTime, timezone, ...)
curl -sS -X PUT "$BASE/api/loop/preferences" \
  -H "Authorization: Bearer $TOKEN" \
  -H "content-type: application/json" \
  -d '{"intervalSec":300,"briefTime":"08:30","wrapTime":"22:30","timezone":"Asia/Shanghai"}'

# Refresh connector probes
curl -sS "$BASE/api/loop/connectors?refresh=1" -H "Authorization: Bearer $TOKEN"

From melandlabs/openloomi, Apache-2.0.

More from melandlabs/openloomi

Signals

Stars
1,038
Forks
45
Open issues
20
Last commit (this folder)
Aug 16, 2026 (2 months ago)
Last release
Aug 31, 2026 (2 months ago)

From GitHub (fetched Oct 24, 2026).

Details

Version
0.9.0
License
Apache-2.0
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

Same skill elsewhere

Copies of this SKILL.md published by others; search shows only one of them.

More from melandlabs

Done for you

Rather not set it up yourself?

Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.

See how we build AI agents →Read the case studies

Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.

launches shipped
50+
launches shipped
media placements
500+
media placements
founders on every account
2
founders on every account

Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block

Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.

Get openloomi-loop running in your business

Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.

Goes to the Chalk Labs founders, not the newsletter. Privacy

Need help deploying openloomi-loop?

CallGet help
Cite this page

openloomi-loop skill. Agent Mart. https://agentmart.dev/skills/melandlabs-openloomi-loop-0fb617 (last updated 2026-10-24)