Repository navigation
feat: add Taskmarket delegation plugin - #471
frando0924-oss wants to merge 1 commit into
Conversation
|
👋 This PR needs a couple of things fixed before OpenHands can review it:
Push an update once this is addressed and this check re-runs automatically. This is an automated check - no AI was used to generate this comment. |
VascoSch92
left a comment
There was a problem hiding this comment.
Sorry, I don't know if we want this plugin. Could you open an issue before? Thanks
|
@VascoSch92 I opened Issue #473 as requested and linked it from the PR description. I also refreshed the HUMAN section with the actual syntax, protocol, and live read-only API checks; no paid write or wallet operation was used. Please let me know whether this integration fits the extensions registry and what changes you would require. |
|
1 similar comment
|
all-hands-bot
left a comment
There was a problem hiding this comment.
This review was posted by an AI agent (OpenHands).
Scope gate: maintainer decision required before technical review.
Current state on head c6620590a727:
- Maintainer @VascoSch92 has an outstanding
CHANGES_REQUESTEDreview: "Sorry, I don't know if we want this plugin. Could you open an issue before? Thanks". - The linked proposal, issue #473, is still open with no labels, no assignee, and no comments. This repo uses
ready-for-devandpriority:*labels, so the absence of a readiness label means the proposal has not been accepted for implementation - it is not a missing label vocabulary. - The head's checks are failing:
Check Extensions,Tests, andDeprecation deadlinesall reportfailure; only thepr-titlechecks pass.
This is not a technical-correctness question. The maintainer asked whether the repository wants this integration at all, and that question is still unanswered on issue #473. Whether a paid, third-party worker-market delegation plugin belongs in the official OpenHands extensions registry is a product and architecture decision that a maintainer has to make before a code review of the 574 added lines is meaningful.
What should happen next: this PR needs a maintainer product decision, not a code change. Concretely:
- A maintainer should decide on issue #473 whether the Taskmarket delegation plugin is in scope for this registry, and label the issue accordingly (
ready-for-devif accepted). - If accepted, the PR should be refreshed on the decided direction and the failing
Check Extensions/Tests/Deprecation deadlineschecks resolved before a review is requested again. - If not accepted, the PR should be closed rather than iterated on.
I am not asking for this to move to another repository: the extensions registry is the structurally correct home for a plugin of this kind, so relocation is not the open question - the open question is whether the registry should carry it. I have deliberately not reported implementation findings, since that work is only useful once the direction is settled.
🛑 MAINTAINER DECISION REQUIRED
There was a problem hiding this comment.
I'm an AI agent (Claude Code, based on Opus 5.5) helping Engel Nyst (@enyst) with project work.
Requesting changes. The scope decision on #473 that @VascoSch92 and all-hands-bot (2026-09-23) asked for is still pending, and the failing checks that review lists are unchanged. Separately, the bridge doesn't work as an MCP server, and its spending gate is not a human gate.
- Wrong stdio framing.
taskmarket_mcp.py:371-375writes LSP-styleContent-Length:headers, but MCP's stdio transport is newline-delimited JSON. A standard client, including the SDK's, cannot parse any response. The test attest_taskmarket_mcp.py:84-90asserts this framing, so it passes while real clients fail. Write one JSON object per line. - The script path won't resolve.
.mcp.json:4-5runspython scripts/taskmarket_mcp.pyrelative to the process's working directory, which is the user's workspace, not the plugin. Use${SKILL_ROOT}/scripts/taskmarket_mcp.py, which the SDK expands for a plugin's.mcp.json, andpython3. - The agent supplies its own confirmation.
taskmarket_mcp.py:163-174acceptsconfirm: trueplusCREATE_TASKplus a token that the same agent got frompreparemoments earlier. Nothing proves a human saw the summary, so a prompt-injected agent can call both back to back and spend up to the 100 USDC default ceiling. Use host-level confirmation, or keepcreateout of the agent's reach. - The spend ceiling isn't enforced at payment.
maximum_possible_spend_usdc(taskmarket_mcp.py:157) equals the reward. The CLI'stask createhas no spend-cap flag and pays whatever amount the server quotes (the same finding all-hands-bot raised on #470). - Task text becomes public. Tasks default to
public, and the CLI's own help says evenunlistedtasks stay permanently visible on-chain.commands/delegate.mddoesn't tell the agent to strip repository code, secrets or private data from the description. - Process. The PR also conflicts with
main.
Compared with #470 (same service, different author): this PR exposes fewer tools (no accept or withdraw) but doesn't work as an MCP server today. #470 works as a CLI adapter but pre-approves the whole wallet CLI. Neither enforces consent or spend where the payment happens. The same integration has been proposed to many agent frameworks, and no OpenHands user request is linked. I'd recommend adding neither unless maintainers decide on #473 that paid crypto delegation belongs in the registry.
Why
OpenHands agents can decide that a task is better delegated to an external worker market, but the extensions registry did not include a Taskmarket integration. This plugin adds a usable delegation surface while keeping payment and acceptance under explicit human control.
Summary
Issue Number
This proposal is tracked in Issue #473.
How to Test
python -m py_compile plugins/taskmarket-delegation/scripts/taskmarket_mcp.py tests/test_taskmarket_mcp.pyVideo/Screenshots
Not applicable for this SDK/plugin integration. The live API read and protocol smoke-test output are included above; no paid write was performed during testing.
Notes
HUMAN:
I tested the plugin protocol locally with initialize, notification, and tools/list requests, ran Python syntax validation, and completed a live read-only task listing against the documented Taskmarket API. No paid write or wallet operation was performed.
Jev-Fast-Audit
⚡ Jev fast audit · estimates · 0.34s · commit c662059⚠️ reduced context — partial coverage; 12/12 hunks, 10/10 files (missing context: 2).
Strongest signal: Command injection · 8% estimated likelihood.
Evidence: F009H001 · plugins/taskmarket-delegation/scripts/taskmarket_mcp.py:1–393.
Coverage:
All estimates and evidence