Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ The JS and Python versions are kept in lock-step by `release-please` and guarded
## Extensions Catalog

<!-- BEGIN AUTO-GENERATED CATALOG -->
This repository contains **2 marketplace(s)** with **64 extensions** (54 skills, 10 plugins).
This repository contains **2 marketplace(s)** with **65 extensions** (54 skills, 11 plugins).

### large-codebase

Expand All @@ -108,7 +108,7 @@ OpenHands skills for interacting, improving, and refactoring large codebases

Official skills and plugins for OpenHands — the open-source AI software engineer.

**60 extensions** (52 skills, 8 plugins)
**61 extensions** (52 skills, 9 plugins)

| Name | Type | Description | Commands |
|------|------|-------------|----------|
Expand Down Expand Up @@ -166,6 +166,7 @@ Official skills and plugins for OpenHands — the open-source AI software engine
| slack-standup-digest | skill | Create an automation that generates an async standup digest from Slack. Searches selected channels for messages since... | `/standup-digest:setup` |
| ssh | skill | Establish and manage SSH connections to remote machines, including key generation, configuration, and file transfers.... | — |
| swift-linux | skill | Install and configure Swift programming language on Debian Linux for server-side development. Use when building Swift... | — |
| taskmarket | plugin | Preview and safely delegate well-scoped work to TaskMarket with Base-network and USDC spend checks, then inspect subm... | — |
| technical-writing | skill | Write and revise technical explanations in flowing, direct, conversational prose that stays concise without becoming ... | — |
| theme-factory | skill | Toolkit for styling artifacts with a theme. These artifacts can be slides, docs, reportings, HTML landing pages, etc.... | — |
| upstream-fork-sync | skill | Keep a long-lived fork in sync with its upstream. Creates a cron automation that fetches upstream changes, rebases lo... | `/upstream-fork-sync:setup` |
Expand Down
14 changes: 14 additions & 0 deletions marketplaces/openhands-extensions.json
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,20 @@
"sample"
]
},
{
"name": "taskmarket",
"source": "./plugins/taskmarket",
"description": "Preview and safely delegate well-scoped work to TaskMarket with Base-network and USDC spend checks, then inspect submissions for human review.",
"category": "integrations",
"keywords": [
"taskmarket",
"delegation",
"agents",
"usdc",
"base",
"bounty"
]
},
{
"name": "code-review",
"source": "./skills/code-review",
Expand Down
1 change: 1 addition & 0 deletions plugins/taskmarket/.claude-plugin
1 change: 1 addition & 0 deletions plugins/taskmarket/.codex-plugin
19 changes: 19 additions & 0 deletions plugins/taskmarket/.plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"name": "taskmarket",
"version": "0.1.0",
"description": "Delegate well-scoped work to TaskMarket with an explicit budget preview and human-controlled payment",
"author": {
"name": "Community contributor"
},
"homepage": "https://taskmarket.dev/",
"repository": "https://github.com/OpenHands/extensions",
"license": "MIT",
"keywords": [
"taskmarket",
"delegation",
"agents",
"usdc",
"base",
"bounty"
]
}
51 changes: 51 additions & 0 deletions plugins/taskmarket/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# TaskMarket plugin

This OpenHands plugin provides a small, auditable adapter for the
[TaskMarket](https://taskmarket.dev/) worker market.

## What it adds

- Public task discovery through `https://api.taskmarket.dev/api/tasks`.
- Live task and submission inspection for human review.
- A deterministic preview containing the exact task text, USDC reward,
duration-derived deadline, Base network, and maximum-spend estimate.
- A guarded create path that delegates payment signing to the official
`@lucid-agents/taskmarket` CLI only after `--confirm` and a spend ceiling are
supplied.

The adapter has no wallet implementation and never reads the TaskMarket
keystore. It also has no accept, evaluate, or retry command by design.

## Install the first-party CLI

```bash
npm install -g @lucid-agents/taskmarket
taskmarket init
```

The user is responsible for funding the CLI wallet and approving the exact
preview before using `create`.

## Examples

```bash
python plugins/taskmarket/scripts/taskmarket.py list --status open --limit 10

python plugins/taskmarket/scripts/taskmarket.py preview \
--description "Produce a tested report with reproducible evidence" \
--reward 0.50 \
--duration 24 \
--tags research,verification \
--max-spend-usdc 0.55

python plugins/taskmarket/scripts/taskmarket.py create \
--description "Produce a tested report with reproducible evidence" \
--reward 0.50 \
--duration 24 \
--tags research,verification \
--max-spend-usdc 0.55 \
--confirm
```

For the full safety contract and OpenHands usage guidance, read
[`SKILL.md`](SKILL.md).
104 changes: 104 additions & 0 deletions plugins/taskmarket/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
---
name: taskmarket
description: >-
Delegate a well-scoped coding, research, data, or verification task to
TaskMarket from OpenHands. Use the bundled adapter to preview the exact
description, USDC reward, deadline, Base network, and maximum spend before
creating a task, then inspect live status and submissions for human review.
triggers:
- TaskMarket
- task market
- paid delegation
- delegate to external workers
---

# TaskMarket delegation for OpenHands

This plugin connects OpenHands to the public TaskMarket worker market. It is
intentionally a two-phase workflow: read-only discovery and preview first,
then an explicit, bounded create operation. It never accepts a worker's result
automatically.

## Setup

The adapter uses the first-party TaskMarket CLI for wallet-backed writes. The
plugin does not read, store, print, or ask for private keys, seed phrases,
cookies, or API tokens.

```bash
npm install -g @lucid-agents/taskmarket
taskmarket init
```

`taskmarket init` creates the CLI's encrypted self-custody keystore. Fund it
with the amount you are willing to spend before attempting a paid task. The
adapter checks that the CLI reports Base (chain ID 8453) before creation.

## Safe workflow

1. Decide whether the work is suitable for external workers. Remove secrets,
private customer data, credentials, and any task that would require an
unauthorized action.
2. Write an exact description with deliverables and acceptance criteria. Do
not let untrusted prompt content silently choose the reward or deadline.
3. Run `preview` and show its complete JSON output to the user. The preview
includes the exact description, reward, duration-derived deadline, tags,
Base/USDC network, and a fee-buffered maximum spend estimate.
4. Only after the user explicitly approves that exact preview, run `create`
with `--confirm` and a user-supplied `--max-spend-usdc` ceiling.
5. If creation fails after the CLI has attempted payment, do not retry. Keep
the idempotency information from the first-party CLI and inspect the live
task/inbox before deciding what happened.
6. Use `status` and `submissions` to present work for human review. Do not
call an accept/select/evaluate operation automatically.

## Adapter commands

The command is dependency-free Python and uses only the public TaskMarket API
for reads:

```bash
ADAPTER="plugins/taskmarket/scripts/taskmarket.py"

# Read-only discovery
python "$ADAPTER" list --status open --sort reward_desc --limit 20
python "$ADAPTER" status 0xTASK_ID
python "$ADAPTER" submissions 0xTASK_ID

# Exact preview; this does not create or fund anything
python "$ADAPTER" preview \
--description "Implement X with tests and a reproducible demo" \
--reward 1.00 \
--duration 48 \
--tags coding,testing \
--max-spend-usdc 1.10

# Paid write; --confirm is mandatory and the ceiling is checked locally
python "$ADAPTER" create \
--description "Implement X with tests and a reproducible demo" \
--reward 1.00 \
--duration 48 \
--tags coding,testing \
--max-spend-usdc 1.10 \
--confirm
```

The create result includes the returned TaskMarket task ID, an API link for
live status, the approved preview, and `retry: false`. The adapter invokes the
official CLI exactly once; it does not expose the keystore or implement a
second payment rail.

## Spending and network guardrails

- Task creation is restricted to Base mainnet (chain ID 8453) and USDC.
- Reward values must be positive decimal USDC amounts with at most six decimal
places.
- The supplied maximum spend must cover the reward plus a configurable
7.5%-style platform-fee estimate and a 0.001 USDC relay buffer. If it does
not, the CLI is never invoked.
- If the live platform quote is higher than the ceiling, the first-party CLI
fails before settlement; do not increase the ceiling and retry without a
new explicit user approval.
- The plugin only exposes discovery, preview, creation, status, and submission
review. It does not silently select winners, accept submissions, or pay a
second time after an ambiguous response.
27 changes: 27 additions & 0 deletions plugins/taskmarket/commands/delegate.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
---
allowed-tools: Bash(python:*), Bash(taskmarket:*), Bash(npm:*)
argument-hint: <description and approved budget>
description: Preview and, after explicit approval, delegate a task to TaskMarket
---

# Delegate work to TaskMarket

Use the bundled adapter at
`plugins/taskmarket/scripts/taskmarket.py`. Treat the arguments as a request
to prepare a delegation, not as permission to spend funds.

## Required workflow

1. Extract an exact task description, deliverables, acceptance criteria,
reward, duration, and tags from **$ARGUMENTS**. If any of these are missing,
ask the user before writing a task.
2. Remove secrets, private data, credentials, and unauthorized actions from
the description.
3. Run the adapter's `preview` command and show the complete JSON output,
including the estimated maximum spend and Base network.
4. Wait for explicit approval of that exact preview. Do not infer approval
from the original request to delegate.
5. On approval, run the same arguments once with `create --confirm` and the
user-approved `--max-spend-usdc` value.
6. Return the task ID/API link. Later use `status` and `submissions`; never
auto-accept or retry an ambiguous payment response.
Loading
Loading