Agent Browser
quran/quran.com-frontend-next
Automates browser interactions for web testing, form filling, screenshots, and data extraction.
Walk a brand-new OpenLoomi user through the entire pipeline in one guided session: setup health → pet reaction → connector onboarding → run a Loop tick → inspect & approve a decision card → seed…
$ npx skills add melandlabs/openloomi --skill openloomi-tour -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install melandlabs/openloomi openloomi-tour --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/melandlabs/openloomi.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/codex/skills/openloomi-tour .claude/skills/openloomi-tour && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "openloomi-tour" agent skill from https://github.com/melandlabs/openloomi/tree/main/plugins/codex/skills/openloomi-tour into .claude/skills/openloomi-tour/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "openloomi-tour", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/melandlabs/openloomi/tree/main/plugins/codex/skills/openloomi-tourType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add melandlabs/openloomi --skill openloomi-tour -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install melandlabs/openloomi openloomi-tour --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/melandlabs/openloomi.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/codex/skills/openloomi-tour .agents/skills/openloomi-tour && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "openloomi-tour" agent skill from https://github.com/melandlabs/openloomi/tree/main/plugins/codex/skills/openloomi-tour into .agents/skills/openloomi-tour/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "openloomi-tour", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add melandlabs/openloomi --skill openloomi-tour -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install melandlabs/openloomi openloomi-tour --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/melandlabs/openloomi.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/codex/skills/openloomi-tour .cursor/skills/openloomi-tour && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "openloomi-tour" agent skill from https://github.com/melandlabs/openloomi/tree/main/plugins/codex/skills/openloomi-tour into .cursor/skills/openloomi-tour/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "openloomi-tour", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/melandlabs/openloomi.git --path plugins/codex/skills/openloomi-tour--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add melandlabs/openloomi --skill openloomi-tour -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install melandlabs/openloomi openloomi-tour --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/melandlabs/openloomi.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/codex/skills/openloomi-tour .gemini/skills/openloomi-tour && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "openloomi-tour" agent skill from https://github.com/melandlabs/openloomi/tree/main/plugins/codex/skills/openloomi-tour into .gemini/skills/openloomi-tour/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "openloomi-tour", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install melandlabs/openloomi openloomi-tourInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add melandlabs/openloomi --skill openloomi-tour -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/melandlabs/openloomi.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/codex/skills/openloomi-tour .github/skills/openloomi-tour && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "openloomi-tour" agent skill from https://github.com/melandlabs/openloomi/tree/main/plugins/codex/skills/openloomi-tour into .github/skills/openloomi-tour/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "openloomi-tour", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add melandlabs/openloomi --skill openloomi-tour -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install melandlabs/openloomi openloomi-tour --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/melandlabs/openloomi.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/codex/skills/openloomi-tour .opencode/skills/openloomi-tour && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "openloomi-tour" agent skill from https://github.com/melandlabs/openloomi/tree/main/plugins/codex/skills/openloomi-tour into .opencode/skills/openloomi-tour/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "openloomi-tour", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
openloomi-tourWalk a brand-new OpenLoomi user through the entire pipeline in one guided session: setup health → pet reaction → connector onboarding → run a Loop tick → inspect & approve a decision card → seed…
Openloomi Tour is an agent skill from melandlabs/openloomi. Walk a brand-new OpenLoomi user through the entire pipeline in one guided session: setup health → pet reaction → connector onboarding → run a Loop tick → inspect & approve a decision card → seed Memory → optionally register a custom Loop channel / classifier rule / decision type. Triggers: openloomi tour, guided tour, walk me through openloomi, show me everything, end-to-end demo, 带我看一下, 体验一下, 一条龙, 一键体验, first time using openloomi, what's next after setup.
Its SKILL.md is about 5.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Productivity & Automation. The repository describes itself as: OpenLoomi is an open-source AI coworker. It connects your work tools, understands what you’re working on, and tells you what needs your attention, why it matters, and what to do… The licence is Apache-2.0.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 2aca101. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
Bash(node $SKILL_DIR/../../scripts/loomi-bridge.mjs *)Bash(node $SKILL_DIR/../openloomi-connectors/scripts/openloomi-connectors.cjs *)Bash(node $SKILL_DIR/../openloomi-memory/scripts/openloomi-memory.cjs *)Bash(composio *)Bash(curl *)Bash(cat ~/.openloomi/token *)Bash(base64 -d *)From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
curlnodejqpython3codexFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
openloomi.aiFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Openloomi Tour loads about 5.8k tokens when it runs. Until then it costs about 119 tokens; SKILL.md has 1,669 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from melandlabs/openloomi at commit 2aca101, republished under its Apache-2.0 licence (© melandlabs). 1,669 words, ~5,785 tokens.
.claude/skills/openloomi-tour/SKILL.md (or your agent's skills folder).This skill is the canonical first-run experience. After
openloomi-setup finishes and prints its post-ready walkthrough, the
user can type @OpenLoomi tour (or any of the trigger phrases) and
you'll run the same pipeline live, stopping between phases so the user
can react.
The tour is interactive, idempotent, and skippable. Each phase
checks its own prerequisite and lets the user move on with next /
skip / back. Nothing is destructive — if the user already did a
phase, you re-confirm it and move on.
Quick links to the OpenLoomi docs that this tour draws from. Every phase below cites the relevant entries inline.
| Topic | Doc |
|---|---|
| Getting started / install / one-time setup | https://openloomi.ai/docs/getting-started |
| What OpenLoomi is (the pipeline in one page) | https://openloomi.ai/docs/what-is-openloomi |
| Glossary — every term used here (Connector / Signal / Loop channel / Action Runner / etc.) | https://openloomi.ai/docs/glossary |
| Loop engine — ticks, Decisions, cards, channels, classifier rules | https://openloomi.ai/docs/loop |
| Loop — Approve / Edit Draft / dry-run anatomy of a Card | https://openloomi.ai/docs/loop#approvals-and-dry-run |
| Memory — people / projects / notes / insights / Screen Capture | https://openloomi.ai/docs/memory |
| Knowledge Base / Library — uploaded documents (PDF, DOCX, MD, …) | https://openloomi.ai/docs/library |
| Connectors — Slack / Gmail / GitHub / Linear / Notion / HubSpot / … | https://openloomi.ai/docs/connectors |
| Native messaging bots — Telegram / WhatsApp / iMessage / Feishu / DingTalk / QQ / WeChat | https://openloomi.ai/docs/messaging-apps |
| Composio / Loop channel — OAuth broker for 1000+ apps | https://openloomi.ai/docs/glossary#composio--loop-channel |
| Attention Agent — Loomi the fox, card bubbles, sprite states | https://openloomi.ai/docs/attention-agent |
| Agent Runtimes — Claude / Codex / OpenCode / Hermes / OpenClaw | https://openloomi.ai/docs/reference/agent-runtimes |
| Plugins — bridge from Claude Code / Codex into OpenLoomi | https://openloomi.ai/docs/plugins |
| Automation / Proactive Tasks — recurring scheduled work | https://openloomi.ai/docs/automation |
| Chat — conversational entry point (not Loop) | https://openloomi.ai/docs/chat |
| Skills — reusable capabilities inside OpenLoomi | https://openloomi.ai/docs/skills |
| Audit Log — every consequential moment recorded | https://openloomi.ai/docs/privacy-security#audit-logs |
| Privacy & Security — local-first, AES-256, what's stored where | https://openloomi.ai/docs/privacy-security |
| Changelog — what's new in each release | https://openloomi.ai/docs/changelog |
Before running any phase, do three things in this exact order:
# 1. Readiness (sandbox-aware)
node "$SKILL_DIR/../../scripts/loomi-bridge.mjs" setup-status
# 2. If loopbackAccessAmbiguous: true, refresh host probe outside sandbox
node "$SKILL_DIR/../../scripts/loomi-bridge.mjs" run-host-probe
# 3. Confirm Codex runtime is the active default agent
node "$SKILL_DIR/../../scripts/loomi-bridge.mjs" codex-runtime-infoDecision tree:
| Pre-flight outcome | Tour action |
|---|---|
ready: true, defaultAgent: codex | Proceed straight to Phase 1 |
ready: false, nextAction: setup | Tell the user setup hasn't run yet. Offer to invoke openloomi-setup first, then return to tour |
ready: false, OPENLOOMI_API_UNREACHABLE | Re-run run-host-probe outside the sandbox; if still unreachable, surface the bridge's hints[] and stop |
defaultAgent != codex | Ask the user whether to switch to Codex runtime or tour anyway with the current provider |
Print the user's current state in one line (mode, installed, default agent) before announcing Phase 1.
The pet is the fastest, cheapest, safest proof that the desktop is listening. Run all four "sight" states in sequence so the user sees the sprite set:
node "$SKILL_DIR/../../scripts/loomi-bridge.mjs" pet happy
node "$SKILL_DIR/../../scripts/loomi-bridge.mjs" pet thinking
node "$SKILL_DIR/../../scripts/loomi-bridge.mjs" pet working
node "$SKILL_DIR/../../scripts/loomi-bridge.mjs" pet jugglingAfter each, say "Loomi just showed the <state> sprite — that proves
the desktop is watching the pet watcher and accepting state changes
from Codex." End by leaving the pet at happy (success-state feel).
For the full state taxonomy, see the Attention Agent doc; for the broader pipeline see the Glossary.
If POST /api/pet/state returns "would have set state to X — pending
OpenLoomi endpoint", note that the runtime is older than the bridge
expects; the pet widget will catch up via the ~/.openloomi/loop/
file watcher anyway.
This is the first real action and the first place the user may have to do something in another window. There are three input paths; offer them all and let the user pick:
A. Native bot (Telegram / WhatsApp / iMessage / Feishu / DingTalk / QQ / WeChat) — fastest, no browser OAuth. Best if you already use one of those.
B. Composio OAuth (Gmail / Slack / GitHub / Google Calendar / Notion / Linear / HubSpot / LinkedIn / Jira / Asana / Discord / X) — one browser click, works for the apps most people already have. Full list at Connectors.
C. Screen memory (macOS only) — right-click the Loomi pet on the desktop → Open Settings → enable Screen Capture. The global capture shortcut (configurable in the same panel) summarises the frontmost window and stores the result directly as a Memory record. Important: screen memories go to Memory directly and do not flow through Signals — Loop will not tick on them. So screen memory alone is not enough to drive Phase 3.
Suggested first picks by user profile:
composio link gmail (richest signal)After the user picks, run the right command and then verify:
# Native:
node "$SKILL_DIR/../openloomi-connectors/scripts/openloomi-connectors.cjs" list-accounts
# Composio:
composio execute GMAIL_GET_PROFILE -d '{}' # or toolkit-specific probe
# Screen memory: verify via the Memory surfaces after the first capture
# (no list-accounts equivalent — captures land in ~/.openloomi/data/memory/)If the OAuth window never opened (silent exit), note that composio link returns immediately when the toolkit is already authorised —
re-check list-accounts first before assuming failure.
Phase 2 is optional. If the user says skip:
If the user picks screen memory only (option C), Phase 3 is skipped but Phase 4 becomes the centrepiece — the user will see their screen captures appear in Memory directly.
This phase is the heart of the tour when there's something for Loop to tick on (Loop engine). Skip it if Phase 2 was skipped and no Connector is connected — Loop would have nothing to pull. Screen memory also does not count here: it bypasses Signals entirely and writes to Memory directly, so it doesn't drive Loop.
Important runtime note. A Loop tick is a long-running agentic
call — the desktop spawns a subprocess (codex exec for Codex, the
native Claude CLI for Claude Code) and the HTTP POST /api/loop/tick
blocks until that subprocess finishes. A cold tick on a fresh inbox
typically takes 30–90s; subsequent ticks 10–30s; very large inboxes
2–3 min. Do not block the tour on it. Fire the tick in the
background and poll for completion.
When at least one signal-source Connector is connected, run the following — the user sees the full pipeline move for the first time.
TOKEN=$(cat ~/.openloomi/token | base64 -d)
BASE="http://localhost:3414"
# 1. Capture baseline lastTickAt so we can detect when the tick lands.
BEFORE=$(curl -sS "$BASE/api/loop/state" \
-H "Authorization: Bearer $TOKEN" | jq -r '.lastTickAt // "1970-01-01T00:00:00.000Z"')
# 2. (Optional) Force-refresh connector probes. May hang on the Composio
# cold path — fall back to the cached snapshot if it times out.
curl -sS --max-time 15 "$BASE/api/loop/connectors?refresh=1" \
-H "Authorization: Bearer $TOKEN" | jq . \
|| echo "(probe refresh timed out — using cached snapshot)"
# 3. Fire the tick in the BACKGROUND with a short HTTP timeout.
# The desktop accepts the request, spawns the agentic subprocess,
# and curl returns after --max-time even though the tick keeps
# running server-side. We then poll state.lastTickAt for completion.
curl -sS --max-time 5 -X POST "$BASE/api/loop/tick" \
-H "Authorization: Bearer $TOKEN" > /tmp/openloomi-tick.out 2>&1 &
TICK_PID=$!
echo "tick dispatched (HTTP pid=$TICK_PID); agentic subprocess continues server-side"
# 4. While the tick runs, USE THIS TIME TO TALK TO THE USER.
# Explain the architecture: signals → classifier → decisions →
# cards → Approve. Ask about their typical day. Preview the
# card-shape JSON. Do not sit in silence — this is a 1–3 minute
# window depending on inbox size.
# 5. Poll for completion (lastTickAt advances past $BEFORE).
# Default max wait: 3 minutes. Raise to 5 if the user has a large inbox.
DEADLINE=$((SECONDS + 180))
while [ $SECONDS -lt $DEADLINE ]; do
AFTER=$(curl -sS "$BASE/api/loop/state" \
-H "Authorization: Bearer $TOKEN" | jq -r '.lastTickAt // "1970-01-01T00:00:00.000Z"')
if [ "$AFTER" != "$BEFORE" ]; then
echo "tick completed at $AFTER (was $BEFORE)"
break
fi
sleep 5
done
# 6. Inspect the tick output and any decisions it produced.
cat /tmp/openloomi-tick.out
curl -sS "$BASE/api/loop/decisions?status=pending" \
-H "Authorization: Bearer $TOKEN" | jq .If the poll loop times out without lastTickAt advancing, the
agentic subprocess is still running on the desktop (very large
inboxes, slow LLM, or composio connections endpoint unreachable).
Surface what the user can do: tell them the tick is still running in
the background, that the next time they run a tick it will be faster
(warm cache), and that they can keep going with Phase 4 — Memory
seeding — while the tick finishes asynchronously.
If no pending decisions appear after a successful tick:
If at least one decision appears, show the Card shape so the user sees what the pet would surface:
DEC_ID=$(curl -sS "$BASE/api/loop/decisions?status=pending" \
-H "Authorization: Bearer $TOKEN" | python3 -c "import sys,json; print(json.load(sys.stdin)['items'][0]['id'])")
curl -sS "$BASE/api/loop/card/$DEC_ID" \
-H "Authorization: Bearer $TOKEN" | python3 -m json.toolThen approve it (the one-tap path the pet bubble would normally trigger):
curl -sS -X POST "$BASE/api/loop/action/schedule" \
-H "Authorization: Bearer $TOKEN" \
-H "content-type: application/json" \
-d "{\"decision_id\":\"$DEC_ID\",\"action\":\"run\"}"Note: the action fires ~30s later via the scheduler. Tell the user to
check the pet bubble — it'll flip to presenting and then done.
Memory is what makes Chat grounded and Loop sharper. Even with no Connectors, seeding three canonical files gives the next Loop tick real grounding. The Library / Knowledge Base sits alongside — explicit user-uploaded documents that RAG-search over.
MEM="$SKILL_DIR/../openloomi-memory/scripts/openloomi-memory.cjs"
# The required Memory commands are known. Do not run discovery/help probes
# such as `node "$MEM" --help`, `node "$MEM" -h`, or `node "$MEM" help`
# before this phase; go directly to add-memory and search-all.
# Tour seed files are tour-owned demo artifacts. Reruns may overwrite
# these tour/*.md files, but must not write to user-authored memory paths.
# 1. Tour / about me
node "$MEM" add-memory "About me: <one-line role + timezone + how I prefer to work>" \
--file=tour/about-me.md
# 2. Tour / current project
node "$MEM" add-memory "Current project: <name + goal + next milestone>" \
--file=tour/current-project.md
# 3. Tour / values
node "$MEM" add-memory "What I optimise for: <signal vs noise, deep work vs responsiveness, etc.>" \
--file=tour/values.md
# 4. Search-all to prove the new files are indexed
node "$MEM" search-all "<a keyword from the file you just wrote>"If the user is shy, do step 1 only and let them fill the rest later.
The point is to prove add-memory writes tour-owned files under
~/.openloomi/data/memory/tour/ and search-all returns them.
After this phase, peek at the Memory surfaces (see Insights and Library):
node "$MEM" list-insights --days=7
curl -sS "$BASE/api/rag/documents?limit=5" \
-H "Authorization: Bearer $TOKEN" | python3 -m json.toolThese are the power-user surfaces. Skip unless the user says "show me how to extend it" or similar.
Show the user how to register their own signal source — anything Composio has a toolkit for becomes a Loop signal with one PUT. Full reference: Loop.
TOKEN=$(cat ~/.openloomi/token | base64 -d)
curl -sS -X PUT "http://localhost:3414/api/loop/channels" \
-H "Authorization: Bearer $TOKEN" \
-H "content-type: application/json" \
-d '{
"id": "demo_stripe_charges",
"label": "Demo: Stripe charges",
"toolkit": "stripe",
"toolSlug": "STRIPE_LIST_CHARGES",
"pollIntervalSec": 900,
"signalType": "stripe_charge"
}'
# Re-list to confirm
curl -sS "http://localhost:3414/api/loop/channels" \
-H "Authorization: Bearer $TOKEN" | python3 -m json.tool
# 1. Confirmation card — fetch the registered channel back so the user
# sees the entity they just created, named and labeled.
echo "=== confirmation card: registered channel ==="
curl -sS "http://localhost:3414/api/loop/channels" \
-H "Authorization: Bearer $TOKEN" | \
jq '.items[] | select(.id == "demo_stripe_charges")'
# 2. Inject a decision-style insight into the inbox so the user can see
# the registration event surface in OpenLoomi Memory > Insights. The
# user can later filter by `groups: ["openloomi-tour"]` to find every
# registration card the tour produced.
echo "=== injecting registration insight into inbox ==="
curl -sS -X POST "http://localhost:3414/api/insights" \
-H "Authorization: Bearer $TOKEN" \
-H "content-type: application/json" \
-d '{
"type": "decision",
"content": "Custom Loop channel registered: demo_stripe_charges (toolkit=stripe, toolSlug=STRIPE_LIST_CHARGES, pollIntervalSec=900). Next Loop tick will poll and surface stripe_charge signals.",
"groups": ["openloomi-tour", "loop"],
"people": []
}' | python3 -m json.toolTell the user: this channel will start polling on the next Loop tick
and any returned records become stripe_charge signals that Loop
classifies normally.
For known signal patterns, force a specific decision type without relying on the LLM classifier. See Loop — classifier rules.
curl -sS -X PUT "http://localhost:3414/api/loop/classifier-rules" \
-H "Authorization: Bearer $TOKEN" \
-H "content-type: application/json" \
-d '{
"id": "force_email_reply_high_urgency",
"when":[
{"field":"signal.type","op":"eq","value":"gmail_message"},
{"field":"signal.payload.urgency","op":"eq","value":"high"}
],
"then":{"type":"email_reply","actionKind":"email_reply","confidence":0.95}
}'
# Dry-run to confirm it matches
curl -sS -X POST "http://localhost:3414/api/loop/classifier-rules/dry-run" \
-H "Authorization: Bearer $TOKEN" \
-H "content-type: application/json" \
-d '{"signal":{"type":"gmail_message","payload":{"urgency":"high","subject":"URGENT: outage"}}}'
# 1. Confirmation card — fetch the registered rule back
echo "=== confirmation card: registered rule ==="
curl -sS "http://localhost:3414/api/loop/classifier-rules" \
-H "Authorization: Bearer $TOKEN" | \
jq '.items[] | select(.id == "force_email_reply_high_urgency")'
# 2. Inject a decision-style insight into the inbox
echo "=== injecting registration insight into inbox ==="
curl -sS -X POST "http://localhost:3414/api/insights" \
-H "Authorization: Bearer $TOKEN" \
-H "content-type: application/json" \
-d '{
"type": "decision",
"content": "Classifier rule registered: force_email_reply_high_urgency — gmail_message + payload.urgency=high → email_reply (confidence 0.95). Overrides the LLM classifier for matching signals.",
"groups": ["openloomi-tour", "loop"],
"people": []
}' | python3 -m json.toolFor a card style that doesn't exist yet (see Loop — custom DecisionTypes):
curl -sS -X PUT "http://localhost:3414/api/loop/types" \
-H "Authorization: Bearer $TOKEN" \
-H "content-type: application/json" \
-d '{
"id":"birthday_wish",
"label":"Birthday wish",
"icon":"ri-cake-2-line",
"actionKind":"email_reply"
}'
# 1. Confirmation card — fetch the registered type back
echo "=== confirmation card: registered decision type ==="
curl -sS "http://localhost:3414/api/loop/types" \
-H "Authorization: Bearer $TOKEN" | \
jq '.items[] | select(.id == "birthday_wish")'
# 2. Inject a decision-style insight into the inbox
echo "=== injecting registration insight into inbox ==="
curl -sS -X POST "http://localhost:3414/api/insights" \
-H "Authorization: Bearer $TOKEN" \
-H "content-type: application/json" \
-d '{
"type": "decision",
"content": "Custom DecisionType registered: birthday_wish (icon=ri-cake-2-line, actionKind=email_reply). Future Loop ticks can surface decisions with this card style.",
"groups": ["openloomi-tour", "loop"],
"people": []
}' | python3 -m json.toolAfter running any of 5a / 5b / 5c, list everything that's now registered so the user sees the full picture at once:
echo "=== all registered channels ==="
curl -sS "http://localhost:3414/api/loop/channels" \
-H "Authorization: Bearer $TOKEN" | jq -r '.items[].id'
echo "=== all registered classifier rules ==="
curl -sS "http://localhost:3414/api/loop/classifier-rules" \
-H "Authorization: Bearer $TOKEN" | jq -r '.items[].id'
echo "=== all registered decision types ==="
curl -sS "http://localhost:3414/api/loop/types" \
-H "Authorization: Bearer $TOKEN" | jq -r '.items[].id'
echo "=== registration insights in inbox (last 24h) ==="
curl -sS "http://localhost:3414/api/insights?days=1&limit=10" \
-H "Authorization: Bearer $TOKEN" | python3 -m json.toolAfter any of 5a/5b/5c, you can also re-run the tick from Phase 3 to
see the new channel/rule/type in action — the inbox will now also
contain the three registration cards pushed above so the user can
list-insights --channel=openloomi-tour or filter by
groups: ["openloomi-tour"] in the desktop UI.
When the tour finishes (user says done, exit, or all five phases
are complete), print the quick reference card from the
openloomi-setup post-ready walkthrough (the closed follow-up
command list) and remind the user:
The tour is over. OpenLoomi is now wired up — Connectors will keep pulling, Loop will keep ticking, and the pet will surface new decisions as cards. Approve a card to run an action; dismiss to archive it; type
@OpenLoomi tourto walk through this again.Every consequential moment is recorded in the Audit Log. The whole reason this tour was possible in the first place is the Plugin bridge that exposes OpenLoomi to your shell.
All API calls in this skill (/api/loop/*, /api/rag/*,
/api/integrations/*) target http://localhost:3414 from the user's
host. If any call fails with ECONNREFUSED / ETIMEDOUT /
"unreachable", request approval and retry outside the sandbox —
Codex network sandboxing can block loopback to the host even when
the desktop API is listening. Do not declare OpenLoomi unhealthy
until an outside-sandbox retry also fails. See the bridge's
loopbackAccess.verification.commands for the manual probe.
© melandlabs, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in plugins/codex/skills/openloomi-tour of melandlabs/openloomi.
Open the folder on GitHubat commit 2aca101
Openloomi Tour next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Openloomi Tour this skillmelandlabs/openloomi | 1k | — | ~5.8k | Automated safety check: Pass | Apache-2.0 | |
| Agent Browserquran/quran.com-frontend-next | 1.9k | 40 repos | ~3.3k | Automated safety check: Pass | None | |
| Dependency Watchtelegramdesktop/tdesktop | 33k | 1 repos | ~2.2k | Automated safety check: Pass | GPL-3.0 | |
| Perform Tasktelegramdesktop/tdesktop | 33k | 2 repos | ~3k | Automated safety check: Pass | GPL-3.0 | |
| Brave Searchbadlogic/pi-skills | 2.6k | 5 repos | ~592 | Automated safety check: Pass | MIT | |
| Garden Inboxpaperclipai/paperclip | 100k | — | ~1.1k | Automated safety check: Pass | MIT |
quran/quran.com-frontend-next
Automates browser interactions for web testing, form filling, screenshots, and data extraction.
telegramdesktop/tdesktop
Audit Telegram Desktop dependencies on freshly fetched origin/dev for releases and security fixes, including upstream lag and backport candidates in patched forks.
telegramdesktop/tdesktop
Resolve, start or resume, implement, review, test, and publish exactly one existing ai-tdesktop task by short slug or full dated id, including rare blocked retries and split-required results.
badlogic/pi-skills
Web search and content extraction via Brave Search API. An agent skill from badlogic/pi-skills.
paperclipai/paperclip
Scan a Paperclip user's Mine inbox, classify reversible archive candidates, request checkbox confirmation, and archive only accepted selections.
telegramdesktop/tdesktop
Continue autonomous Telegram Desktop development from the shared ai-tdesktop repository.
melandlabs/openloomi
openloomi Connectors tools - manage the native 7 messaging integrations and pair with the composio skill for the 1000+ apps OAuth layer (Slack, Discord, X, Gmail, Outlook, Google…
melandlabs/openloomi
Create an end-to-end Continual Learning Bench task. An agent skill from melandlabs/openloomi.
melandlabs/openloomi
openloomi Memory tools - search and manage the holistic context (people, projects, decisions, knowledge base, chat insights).
melandlabs/openloomi
OpenLoomi first-use setup and readiness guidance for skill-only agent runtimes.
melandlabs/openloomi
Discover and install skills from the open agent skills ecosystem.
melandlabs/openloomi
OpenLoomi runtime integration for Claude Code. An agent skill from melandlabs/openloomi.
Categories
Walk a brand-new OpenLoomi user through the entire pipeline in one guided session: setup health → pet reaction → connector onboarding → run a Loop tick → inspect & approve a decision card → seed…. Openloomi Tour is an agent skill from melandlabs/openloomi. Walk a brand-new OpenLoomi user through the entire pipeline in one guided session: setup health → pet reaction → connector onboarding → run a Loop tick → inspect & approve a decision card → seed Memory → optionally register a custom Loop channel / classifier rule / decision type.
Openloomi Tour fits situations like: productivity & Automation work in your project.
Run `npx skills add melandlabs/openloomi --skill openloomi-tour -a claude-code`. Or copy the skill folder (plugins/codex/skills/openloomi-tour in melandlabs/openloomi) into .claude/skills/openloomi-tour in your project. Claude Code loads it when a task matches its description.
Run `npx skills add melandlabs/openloomi --skill openloomi-tour -a codex`. Or copy the skill folder (plugins/codex/skills/openloomi-tour in melandlabs/openloomi) into .agents/skills/openloomi-tour in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add melandlabs/openloomi --skill openloomi-tour -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/openloomi-tour, .gemini/skills/openloomi-tour, .github/skills/openloomi-tour and .opencode/skills/openloomi-tour in your project.
Going by SKILL.md and its folder, Openloomi Tour needs the command-line tools its instructions call (curl, node, jq, python3 and codex). Its frontmatter pre-approves these tools: Bash(node $SKILL_DIR/../../scripts/loomi-bridge.mjs *), Bash(node $SKILL_DIR/../openloomi-connectors/scripts/openloomi-connectors.cjs *), Bash(node $SKILL_DIR/../openloomi-memory/scripts/openloomi-memory.cjs *), Bash(composio *), Bash(curl *), Bash(cat ~/.openloomi/token *), Bash(base64 -d *).
SKILL.md names 1 domain. As links in the text: openloomi.ai. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Openloomi Tour is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.8k tokens (SKILL.md is roughly 23k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Openloomi Tour: Agent Browser (quran/quran.com-frontend-next, 1.9k stars), Dependency Watch (telegramdesktop/tdesktop, 33k stars), Perform Task (telegramdesktop/tdesktop, 33k stars) and Brave Search (badlogic/pi-skills, 2.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
melandlabs (a GitHub organization) maintains it in melandlabs/openloomi, which has 1,038 GitHub stars. The repository holds 23 skills in this directory. The repository was last updated on September 24, 2026.
Source: melandlabs/openloomi on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.