openmarlin

Use OpenMarlin from OpenClaw to answer questions, run tasks, and manage OpenMarlin account setup and billing flows.

3,891 stars

Best use case

openmarlin is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Use OpenMarlin from OpenClaw to answer questions, run tasks, and manage OpenMarlin account setup and billing flows.

Teams using openmarlin should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/openmarlin/SKILL.md --create-dirs "https://raw.githubusercontent.com/openclaw/skills/main/skills/alex4506/openmarlin/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/openmarlin/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How openmarlin Compares

Feature / AgentopenmarlinStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Use OpenMarlin from OpenClaw to answer questions, run tasks, and manage OpenMarlin account setup and billing flows.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

Related Guides

SKILL.md Source

# OpenMarlin

Use this skill when a user explicitly wants to use OpenMarlin from inside
OpenClaw.

This skill covers four main jobs:

- account registration and API key bootstrap
- native execution requests through `/v1/executions`
- asynchronous long-running jobs through `/v1/tasks`
- billing, balance, and `402 Payment Required` recovery

## When To Activate

Activate this skill for requests such as:

- "use openmarlin to answer this"
- "ask openmarlin to summarize this page"
- "use openmarlin to find today's USD/CNY exchange rate"
- "use openmarlin to execute this task"
- "register OpenMarlin"
- "check OpenMarlin balance"

When routing the request:

- treat "use openmarlin ..." as an OpenMarlin intent, not generic chat
- prefer `/v1/executions` for normal tasks such as answering, searching,
  summarizing, extracting, or translating
- do not reject activation just because the user did not provide `provider_id`,
  labels, or an exact model ref in the first sentence

## Core Constraints

- Keep the flow OpenClaw-first by default.
- Do not collect passwords, magic links, MFA secrets, or raw credentials in
  chat.
- Prefer the `device` auth flow unless the deployment specifically requires
  `workos_callback`.
- Treat browser use as a narrow external step for identity or Stripe checkout,
  not the main control plane.
- After browser handoff begins, keep polling the registration session in
  OpenClaw until it becomes `completed` or `expired`.
- Treat browser callback or landing pages as user-facing only. Machine-readable
  registration state must come from the registration session.
- Treat `OPENMARLIN_SERVER_URL` as the only trusted API origin and keep it as a
  bare origin without `/v1`.
- Use server-provided `handoff.authorization_url` directly. Do not reconstruct
  WorkOS or browser URLs locally.
- Store platform API keys in OpenClaw auth-profile storage when available, not
  in ordinary skill config.
- Treat `OPENMARLIN_PLATFORM_API_KEY` as a temporary override for debugging,
  not the preferred steady-state storage path.
- When balance information is incomplete, label local billing state as
  last-known or estimated instead of pretending it is authoritative.

## Installation

This skill is distributed as a directory, not as a standalone Markdown file.
If you install it manually, copy both `SKILL.md` and the sibling `scripts/`
directory.

Required files:

- `SKILL.md`
- `scripts/registration_session.py`
- `scripts/platform_request.py`
- `scripts/billing.py`
- `scripts/openclaw_billing_state.py`
- `scripts/openclaw_platform_auth.py`
- `scripts/openclaw_skill_config.py`

Runtime expectations:

- `python3` is available in `PATH`
- `OPENMARLIN_SERVER_URL` defaults to `https://api.openmarlin.ai`
- `OPENMARLIN_SERVER_URL` must be a bare origin, not a URL ending in `/v1`

## First Run

For a new user, the shortest safe path is:

1. Confirm `OPENMARLIN_SERVER_URL` if you need to override the default.
2. Start registration with `python3 scripts/registration_session.py create`.
3. Complete external auth in the browser if the server returns a handoff URL.
4. Poll the registration session with `watch` until it becomes `completed`.
5. Bootstrap and store the first workspace API key with `bootstrap --store`.
6. Optionally call `python3 scripts/platform_request.py models`.
7. Send the first execution request.

After setup, the most common next actions are:

- send a routed execution request
- submit a long-running task and poll for completion
- inspect available models
- recover from a `402 Payment Required` response
- inspect balance or recent billing activity

## Request Model

### Registration

Registration flows are built on:

- `POST /v1/registration/sessions`
- `GET /v1/registration/sessions/:sessionId`
- `POST /v1/registration/sessions/:sessionId/api-keys`

Registration session states:

- `pending_external_auth`
- `completed`
- `expired`

When a session completes, OpenClaw should continue from the machine-readable
registration session state, not from browser callback output.

### Executions

Native execution uses:

- `POST /v1/executions`

Execution requests may include:

- `instruction`
- `kind = agent_run`
- `stream`
- `provider_id`
- `labels`
- `agent_id`
- `session_key`
- `timeout_ms`
- `model`
- `metadata`

Execution routing rules:

- with neither `model` nor `provider_id`, let the server choose both
- with only `model`, use an exact full ref and let the server choose a provider
- with only `provider_id`, let the server choose an eligible model on that
  provider
- with both `model` and `provider_id`, the server enforces both constraints

If `model` is provided, it must be an exact full ref such as
`openai-codex/gpt-5.4`.

If you provide both `provider_id` and `model`, first confirm from
`python3 scripts/platform_request.py models` that the provider advertises that
same exact model ref.

### Tasks

Long-running jobs use:

- `POST /v1/tasks`
- `GET /v1/tasks/:taskId`

Task requests follow the same routing shape as `/v1/executions`, but they are
intended for work that should not wait on a synchronous response stream.

Prefer `/v1/tasks` when:

- generation may take many minutes
- stream output is absent or not useful
- the real result is expected to arrive later as artifact metadata such as an
  `artifact_url`

Task states:

- `queued`
- `running`
- `succeeded`
- `failed`

### Billing

Billing and recovery flows use:

- `GET /v1/balance`
- `GET /v1/usage-events`
- `GET /v1/ledger`
- `POST /v1/topup/sessions`
- `GET /v1/topup/sessions/:sessionId`

Structured balance failures may return:

- `error_code = insufficient_balance`
- `message`
- `workspace_id`
- `current_balance.amount / unit`
- `required_balance.amount / unit`

Treat that `402` shape as workflow input, not a generic transport failure.

## Common Commands

### Registration

Create a registration session:

```bash
python3 scripts/registration_session.py create
```

Create a callback-style session when the deployment requires it:

```bash
python3 scripts/registration_session.py create --auth-flow workos_callback
```

Check or poll a registration session:

```bash
python3 scripts/registration_session.py status --session-id <session-id>
python3 scripts/registration_session.py watch --session-id <session-id>
```

Bootstrap and store the first API key:

```bash
python3 scripts/registration_session.py bootstrap \
  --session-id <session-id> \
  --store
```

### Executions

List currently available exact models:

```bash
python3 scripts/platform_request.py models
```

Let the server choose model and provider automatically:

```bash
python3 scripts/platform_request.py executions \
  --body-json '{"instruction":"say hello"}'
```

Use an exact model ref with automatic provider routing:

```bash
python3 scripts/platform_request.py executions \
  --body-json '{"instruction":"say hello","model":"openai-codex/gpt-5.4"}'
```

Use an explicit provider override:

```bash
python3 scripts/platform_request.py executions \
  --provider node-a \
  --body-json '{"instruction":"say hello"}'
```

Send a dry run:

```bash
python3 scripts/platform_request.py executions \
  --dry-run \
  --server-url https://your-server.example.com \
  --api-key claw_wsk_placeholder \
  --body-json '{"instruction":"say hello"}'
```

Use streaming execution:

```bash
python3 scripts/platform_request.py executions \
  --body-json '{"instruction":"say hello","stream":true}'
```

### Tasks

Submit a long-running job:

```bash
python3 scripts/platform_request.py tasks-submit \
  --watch \
  --body-json '{"instruction":"Generate a short plane video.","metadata":{"mode":"video"}}'
```

Fetch the current task state:

```bash
python3 scripts/platform_request.py tasks-status --task-id <task-id>
```

Poll until the task succeeds or fails:

```bash
python3 scripts/platform_request.py tasks-watch --task-id <task-id>
```

### Billing

Explain a structured `402` response:

```bash
python3 scripts/billing.py explain-402 \
  --response-json '{"error_code":"insufficient_balance","message":"Workspace balance is insufficient for this request.","workspace_id":"ws_123","current_balance":{"amount":0,"unit":"credits"},"required_balance":{"amount":1,"unit":"credits"}}'
```

Create a top-up session from the `402` shortfall:

```bash
python3 scripts/billing.py create-topup \
  --response-json '{"error_code":"insufficient_balance","message":"Workspace balance is insufficient for this request.","workspace_id":"ws_123","current_balance":{"amount":0,"unit":"credits"},"required_balance":{"amount":1,"unit":"credits"}}'
```

Check top-up progress:

```bash
python3 scripts/billing.py status --session-id <topup-session-id>
python3 scripts/billing.py watch --session-id <topup-session-id>
```

Show current balance:

```bash
python3 scripts/billing.py balance --workspace-id <workspace-id>
```

Show recent billing activity:

```bash
python3 scripts/billing.py activity
```

## Operational Guidance

### Routing Failures

Translate common routing errors into plain language:

- `provider_unavailable`: the selected provider is not currently connected
- `provider_label_mismatch`: the selected provider does not satisfy the
  requested routing hints
- `execution_provider_not_found`: no eligible execution provider matched the
  current request
- `execution_provider_ambiguous`: more than one execution provider matched and
  the server needs narrower labels or an explicit provider override
- `execution_kind_not_available`: the selected provider does not support the
  requested execution kind
- `invalid_routing_labels`: labels were malformed

When these happen:

- restate the provider and labels you actually sent
- suggest retrying with different labels, a different provider, or automatic
  routing
- do not invent hidden labels or undocumented routing fields

For long-running jobs:

- prefer `tasks-submit --watch` over asking the user to manually follow up with
  `tasks-watch`
- acknowledge acceptance as soon as a `task_id` is returned
- surface final `output` and `metadata` when the task reaches `succeeded`

### Balance And Recovery

When the server returns a structured `402 insufficient_balance` response:

- show the current balance, required balance, and shortfall explicitly
- explain that this is a recoverable billing state
- keep the recovery flow inside OpenClaw until the required Stripe checkout
  step
- prefer authoritative `GET /v1/balance` reads when available
- keep local billing snapshots only as supporting context

When guiding a top-up flow:

- create the top-up session inside OpenClaw
- show the difference between `pending_payment`, `credit_applied`, and
  `payment_failed`
- tell the user that opening the Stripe `checkout_url` is the only required
  external billing step
- refresh balance after credit lands

## Credential Handling

The returned `secret` from API key bootstrap is the steady-state platform
credential for OpenClaw.

- prefer OpenClaw auth profiles over plain repo files or ordinary config
- store the key in the default OpenClaw auth profile when `--store` is used
- avoid echoing raw secrets unless the active command explicitly returns them
- when reporting success, show where the key was stored or loaded from

Related Skills

---

3891
from openclaw/skills

name: article-factory-wechat

Content & Documentation

humanizer

3891
from openclaw/skills

Remove signs of AI-generated writing from text. Use when editing or reviewing text to make it sound more natural and human-written. Based on Wikipedia's comprehensive "Signs of AI writing" guide. Detects and fixes patterns including: inflated symbolism, promotional language, superficial -ing analyses, vague attributions, em dash overuse, rule of three, AI vocabulary words, negative parallelisms, and excessive conjunctive phrases.

Content & Documentation

find-skills

3891
from openclaw/skills

Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill.

General Utilities

tavily-search

3891
from openclaw/skills

Use Tavily API for real-time web search and content extraction. Use when: user needs real-time web search results, research, or current information from the web. Requires Tavily API key.

Data & Research

baidu-search

3891
from openclaw/skills

Search the web using Baidu AI Search Engine (BDSE). Use for live information, documentation, or research topics.

Data & Research

agent-autonomy-kit

3891
from openclaw/skills

Stop waiting for prompts. Keep working.

Workflow & Productivity

Meeting Prep

3891
from openclaw/skills

Never walk into a meeting unprepared again. Your agent researches all attendees before calendar events—pulling LinkedIn profiles, recent company news, mutual connections, and conversation starters. Generates a briefing doc with talking points, icebreakers, and context so you show up informed and confident. Triggered automatically before meetings or on-demand. Configure research depth, advance timing, and output format. Walking into meetings blind is amateur hour—missed connections, generic small talk, zero leverage. Use when setting up meeting intelligence, researching specific attendees, generating pre-meeting briefs, or automating your prep workflow.

Workflow & Productivity

self-improvement

3891
from openclaw/skills

Captures learnings, errors, and corrections to enable continuous improvement. Use when: (1) A command or operation fails unexpectedly, (2) User corrects Claude ('No, that's wrong...', 'Actually...'), (3) User requests a capability that doesn't exist, (4) An external API or tool fails, (5) Claude realizes its knowledge is outdated or incorrect, (6) A better approach is discovered for a recurring task. Also review learnings before major tasks.

Agent Intelligence & Learning

botlearn-healthcheck

3891
from openclaw/skills

botlearn-healthcheck — BotLearn autonomous health inspector for OpenClaw instances across 5 domains (hardware, config, security, skills, autonomy); triggers on system check, health report, diagnostics, or scheduled heartbeat inspection.

DevOps & Infrastructure

linkedin-cli

3891
from openclaw/skills

A bird-like LinkedIn CLI for searching profiles, checking messages, and summarizing your feed using session cookies.

Content & Documentation

notebooklm

3891
from openclaw/skills

Google NotebookLM 非官方 Python API 的 OpenClaw Skill。支持内容生成(播客、视频、幻灯片、测验、思维导图等)、文档管理和研究自动化。当用户需要使用 NotebookLM 生成音频概述、视频、学习材料或管理知识库时触发。

Data & Research

小红书长图文发布 Skill

3891
from openclaw/skills

## 概述

Content & Documentation