feat(action-providers): add read-only TaskMarket discovery provider - #1452

Open
wilddoc wants to merge 1 commit into
coinbase:mainfrom
wilddoc:feat/taskmarket-action-provider
Open

feat(action-providers): add read-only TaskMarket discovery provider#1452
wilddoc wants to merge 1 commit into
coinbase:mainfrom
wilddoc:feat/taskmarket-action-provider

Conversation

@wilddoc

Copy link
Copy Markdown

Description

Adds a TaskMarket action provider so an agent can discover paid work on TaskMarket, a task marketplace where requesters escrow USDC on Base and workers submit deliverables.

The motivation is delegation. An agent that recognises a request is better handled by external workers can look for existing funded work instead of burning inference on something it will do badly, and can hand its operator a link rather than an unreliable answer.

Actions

ActionPurpose
browse_tasksLists open tasks by net reward, with deadline and how contested each already is
get_task_detailsFull acceptance criteria, reward and award count for one task
evaluate_delegationGiven a description of work in hand, surfaces open tasks that overlap with it

Scope: read-only, on purpose

Nothing in this provider spends funds, touches a wallet, creates a task, claims work, or requires an API key.

Task creation and submission move real USDC through escrow, so they are deliberately left to the first-party TaskMarket CLI behind explicit human authorization rather than exposed as agent actions. evaluate_delegation states this in its own output: it returns candidates and says plainly that acting on them needs operator authorization.

Because of that, the provider needs no configuration and no secrets. The discovery endpoints are unauthenticated and read-only.

Design notes

  • Rewards are reported net of the platform fee, which is what a worker actually receives.
  • Submission counts are surfaced. A 64 USDC task with 142 submissions is often worth less in expectation than a 4 USDC task with three, and an agent recommending work should be able to see that.
  • List views collapse descriptions to one line. Task descriptions run to hundreds of words of markdown and would otherwise dominate the context window.
  • Matching uses transparent stopword-filtered keyword overlap, not embeddings, so it costs no extra model call and an operator can predict its behaviour.
  • supportsNetwork returns true: browsing reads a public HTTP API and touches no wallet. Settlement is USDC on Base, but only once a user acts outside this provider.

Tests

taskmarketActionProvider.test.ts covers USDC base-unit conversion from both strings and numbers, hours-remaining parsing, description collapsing, reward-floor filtering, sorting by reward, delegation matching including the stopword and no-match paths, full task rendering, and the API-failure path (returns an error string rather than throwing).

One case worth calling out: a task can be status: "open"and already past its expiryTime. isOpenForWork checks status, submission window and expiry together, and there is a test for exactly that combination.

Checklist

  • New action provider in its own directory following existing conventions
  • Exported from action-providers/index.ts
  • README documenting setup and scope
  • Unit tests
  • No new dependencies
  • No secrets, keys or wallet access required

Adds a TaskMarket action provider so an agent can discover paid work on
TaskMarket, a task marketplace settling in USDC on Base.
The motivation is delegation. An agent that recognises a request is better
handled by external workers can look for existing funded work instead of
burning inference on something it will do badly, and can hand its operator a
link rather than an unreliable answer.
Actions:
- browse_tasks list open tasks by net reward, with deadline and how
contested each already is
- get_task_details full acceptance criteria for one task
- evaluate_delegation given work in hand, surface open tasks overlapping it
Scope is deliberately read-only. Nothing here spends funds, touches a wallet,
creates a task, claims work, or requires an API key. Task creation and
submission move real USDC through escrow, so they are left to the first-party
TaskMarket CLI behind explicit human authorization rather than exposed as
agent actions.
Notes:
- rewards are reported net of the platform fee, which is what a worker
actually receives
- submission counts are surfaced, because a 64 USDC task with 142 submissions
is often worth less in expectation than a 4 USDC task with three
- list views collapse descriptions to one line; task descriptions run to
hundreds of words of markdown and would otherwise dominate the context
- evaluate_delegation uses transparent keyword overlap rather than embeddings,
so it costs no extra model call and its behaviour is predictable
The discovery endpoints used are unauthenticated and read-only, so the
provider needs no configuration. supportsNetwork returns true because
browsing touches no wallet.
Includes unit tests covering USDC conversion, expiry handling (a task can be
status=open but past expiry), stopword-filtered matching, reward sorting and
API-failure paths.
@cb-heimdall

Copy link
Copy Markdown

🟡 Heimdall Review Status

RequirementStatusMore Info
Reviews 🟡 0/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified1
Sum2

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation action provider New action provider typescript labels Aug 17, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

action providerNew action providerdocumentationImprovements or additions to documentationtypescript

Development

Successfully merging this pull request may close these issues.

2 participants

@wilddoc@cb-heimdall
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat(action-providers): add read-only TaskMarket discovery provider - #1452

Open
wilddoc wants to merge 1 commit into
coinbase:mainfrom
wilddoc:feat/taskmarket-action-provider
Open

feat(action-providers): add read-only TaskMarket discovery provider#1452
wilddoc wants to merge 1 commit into
coinbase:mainfrom
wilddoc:feat/taskmarket-action-provider

Conversation

@wilddoc

Copy link
Copy Markdown

Description

Adds a TaskMarket action provider so an agent can discover paid work on TaskMarket, a task marketplace where requesters escrow USDC on Base and workers submit deliverables.

The motivation is delegation. An agent that recognises a request is better handled by external workers can look for existing funded work instead of burning inference on something it will do badly, and can hand its operator a link rather than an unreliable answer.

Actions

ActionPurpose
browse_tasksLists open tasks by net reward, with deadline and how contested each already is
get_task_detailsFull acceptance criteria, reward and award count for one task
evaluate_delegationGiven a description of work in hand, surfaces open tasks that overlap with it

Scope: read-only, on purpose

Nothing in this provider spends funds, touches a wallet, creates a task, claims work, or requires an API key.

Task creation and submission move real USDC through escrow, so they are deliberately left to the first-party TaskMarket CLI behind explicit human authorization rather than exposed as agent actions. evaluate_delegation states this in its own output: it returns candidates and says plainly that acting on them needs operator authorization.

Because of that, the provider needs no configuration and no secrets. The discovery endpoints are unauthenticated and read-only.

Design notes

  • Rewards are reported net of the platform fee, which is what a worker actually receives.
  • Submission counts are surfaced. A 64 USDC task with 142 submissions is often worth less in expectation than a 4 USDC task with three, and an agent recommending work should be able to see that.
  • List views collapse descriptions to one line. Task descriptions run to hundreds of words of markdown and would otherwise dominate the context window.
  • Matching uses transparent stopword-filtered keyword overlap, not embeddings, so it costs no extra model call and an operator can predict its behaviour.
  • supportsNetwork returns true: browsing reads a public HTTP API and touches no wallet. Settlement is USDC on Base, but only once a user acts outside this provider.

Tests

taskmarketActionProvider.test.ts covers USDC base-unit conversion from both strings and numbers, hours-remaining parsing, description collapsing, reward-floor filtering, sorting by reward, delegation matching including the stopword and no-match paths, full task rendering, and the API-failure path (returns an error string rather than throwing).

One case worth calling out: a task can be status: "open"and already past its expiryTime. isOpenForWork checks status, submission window and expiry together, and there is a test for exactly that combination.

Checklist

  • New action provider in its own directory following existing conventions
  • Exported from action-providers/index.ts
  • README documenting setup and scope
  • Unit tests
  • No new dependencies
  • No secrets, keys or wallet access required

Adds a TaskMarket action provider so an agent can discover paid work on
TaskMarket, a task marketplace settling in USDC on Base.
The motivation is delegation. An agent that recognises a request is better
handled by external workers can look for existing funded work instead of
burning inference on something it will do badly, and can hand its operator a
link rather than an unreliable answer.
Actions:
- browse_tasks list open tasks by net reward, with deadline and how
contested each already is
- get_task_details full acceptance criteria for one task
- evaluate_delegation given work in hand, surface open tasks overlapping it
Scope is deliberately read-only. Nothing here spends funds, touches a wallet,
creates a task, claims work, or requires an API key. Task creation and
submission move real USDC through escrow, so they are left to the first-party
TaskMarket CLI behind explicit human authorization rather than exposed as
agent actions.
Notes:
- rewards are reported net of the platform fee, which is what a worker
actually receives
- submission counts are surfaced, because a 64 USDC task with 142 submissions
is often worth less in expectation than a 4 USDC task with three
- list views collapse descriptions to one line; task descriptions run to
hundreds of words of markdown and would otherwise dominate the context
- evaluate_delegation uses transparent keyword overlap rather than embeddings,
so it costs no extra model call and its behaviour is predictable
The discovery endpoints used are unauthenticated and read-only, so the
provider needs no configuration. supportsNetwork returns true because
browsing touches no wallet.
Includes unit tests covering USDC conversion, expiry handling (a task can be
status=open but past expiry), stopword-filtered matching, reward sorting and
API-failure paths.
@cb-heimdall

Copy link
Copy Markdown

🟡 Heimdall Review Status

RequirementStatusMore Info
Reviews 🟡 0/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified1
Sum2

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation action provider New action provider typescript labels Aug 17, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

action providerNew action providerdocumentationImprovements or additions to documentationtypescript

Development

Successfully merging this pull request may close these issues.

2 participants

@wilddoc@cb-heimdall
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(action-providers): add read-only TaskMarket discovery provider - #1452

Open
wilddoc wants to merge 1 commit into
coinbase:mainfrom
wilddoc:feat/taskmarket-action-provider
Open

feat(action-providers): add read-only TaskMarket discovery provider#1452
wilddoc wants to merge 1 commit into
coinbase:mainfrom
wilddoc:feat/taskmarket-action-provider

Conversation

@wilddoc

Copy link
Copy Markdown

Description

Adds a TaskMarket action provider so an agent can discover paid work on TaskMarket, a task marketplace where requesters escrow USDC on Base and workers submit deliverables.

The motivation is delegation. An agent that recognises a request is better handled by external workers can look for existing funded work instead of burning inference on something it will do badly, and can hand its operator a link rather than an unreliable answer.

Actions

ActionPurpose
browse_tasksLists open tasks by net reward, with deadline and how contested each already is
get_task_detailsFull acceptance criteria, reward and award count for one task
evaluate_delegationGiven a description of work in hand, surfaces open tasks that overlap with it

Scope: read-only, on purpose

Nothing in this provider spends funds, touches a wallet, creates a task, claims work, or requires an API key.

Task creation and submission move real USDC through escrow, so they are deliberately left to the first-party TaskMarket CLI behind explicit human authorization rather than exposed as agent actions. evaluate_delegation states this in its own output: it returns candidates and says plainly that acting on them needs operator authorization.

Because of that, the provider needs no configuration and no secrets. The discovery endpoints are unauthenticated and read-only.

Design notes

  • Rewards are reported net of the platform fee, which is what a worker actually receives.
  • Submission counts are surfaced. A 64 USDC task with 142 submissions is often worth less in expectation than a 4 USDC task with three, and an agent recommending work should be able to see that.
  • List views collapse descriptions to one line. Task descriptions run to hundreds of words of markdown and would otherwise dominate the context window.
  • Matching uses transparent stopword-filtered keyword overlap, not embeddings, so it costs no extra model call and an operator can predict its behaviour.
  • supportsNetwork returns true: browsing reads a public HTTP API and touches no wallet. Settlement is USDC on Base, but only once a user acts outside this provider.

Tests

taskmarketActionProvider.test.ts covers USDC base-unit conversion from both strings and numbers, hours-remaining parsing, description collapsing, reward-floor filtering, sorting by reward, delegation matching including the stopword and no-match paths, full task rendering, and the API-failure path (returns an error string rather than throwing).

One case worth calling out: a task can be status: "open"and already past its expiryTime. isOpenForWork checks status, submission window and expiry together, and there is a test for exactly that combination.

Checklist

  • New action provider in its own directory following existing conventions
  • Exported from action-providers/index.ts
  • README documenting setup and scope
  • Unit tests
  • No new dependencies
  • No secrets, keys or wallet access required

Adds a TaskMarket action provider so an agent can discover paid work on
TaskMarket, a task marketplace settling in USDC on Base.
The motivation is delegation. An agent that recognises a request is better
handled by external workers can look for existing funded work instead of
burning inference on something it will do badly, and can hand its operator a
link rather than an unreliable answer.
Actions:
- browse_tasks list open tasks by net reward, with deadline and how
contested each already is
- get_task_details full acceptance criteria for one task
- evaluate_delegation given work in hand, surface open tasks overlapping it
Scope is deliberately read-only. Nothing here spends funds, touches a wallet,
creates a task, claims work, or requires an API key. Task creation and
submission move real USDC through escrow, so they are left to the first-party
TaskMarket CLI behind explicit human authorization rather than exposed as
agent actions.
Notes:
- rewards are reported net of the platform fee, which is what a worker
actually receives
- submission counts are surfaced, because a 64 USDC task with 142 submissions
is often worth less in expectation than a 4 USDC task with three
- list views collapse descriptions to one line; task descriptions run to
hundreds of words of markdown and would otherwise dominate the context
- evaluate_delegation uses transparent keyword overlap rather than embeddings,
so it costs no extra model call and its behaviour is predictable
The discovery endpoints used are unauthenticated and read-only, so the
provider needs no configuration. supportsNetwork returns true because
browsing touches no wallet.
Includes unit tests covering USDC conversion, expiry handling (a task can be
status=open but past expiry), stopword-filtered matching, reward sorting and
API-failure paths.
@cb-heimdall

Copy link
Copy Markdown

🟡 Heimdall Review Status

RequirementStatusMore Info
Reviews 🟡 0/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified1
Sum2

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation action provider New action provider typescript labels Aug 17, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

action providerNew action providerdocumentationImprovements or additions to documentationtypescript

Development

Successfully merging this pull request may close these issues.

2 participants

@wilddoc@cb-heimdall
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(action-providers): add read-only TaskMarket discovery provider - #1452

Open
wilddoc wants to merge 1 commit into
coinbase:mainfrom
wilddoc:feat/taskmarket-action-provider
Open

feat(action-providers): add read-only TaskMarket discovery provider#1452
wilddoc wants to merge 1 commit into
coinbase:mainfrom
wilddoc:feat/taskmarket-action-provider

Conversation

@wilddoc

Copy link
Copy Markdown

Description

Adds a TaskMarket action provider so an agent can discover paid work on TaskMarket, a task marketplace where requesters escrow USDC on Base and workers submit deliverables.

The motivation is delegation. An agent that recognises a request is better handled by external workers can look for existing funded work instead of burning inference on something it will do badly, and can hand its operator a link rather than an unreliable answer.

Actions

ActionPurpose
browse_tasksLists open tasks by net reward, with deadline and how contested each already is
get_task_detailsFull acceptance criteria, reward and award count for one task
evaluate_delegationGiven a description of work in hand, surfaces open tasks that overlap with it

Scope: read-only, on purpose

Nothing in this provider spends funds, touches a wallet, creates a task, claims work, or requires an API key.

Task creation and submission move real USDC through escrow, so they are deliberately left to the first-party TaskMarket CLI behind explicit human authorization rather than exposed as agent actions. evaluate_delegation states this in its own output: it returns candidates and says plainly that acting on them needs operator authorization.

Because of that, the provider needs no configuration and no secrets. The discovery endpoints are unauthenticated and read-only.

Design notes

  • Rewards are reported net of the platform fee, which is what a worker actually receives.
  • Submission counts are surfaced. A 64 USDC task with 142 submissions is often worth less in expectation than a 4 USDC task with three, and an agent recommending work should be able to see that.
  • List views collapse descriptions to one line. Task descriptions run to hundreds of words of markdown and would otherwise dominate the context window.
  • Matching uses transparent stopword-filtered keyword overlap, not embeddings, so it costs no extra model call and an operator can predict its behaviour.
  • supportsNetwork returns true: browsing reads a public HTTP API and touches no wallet. Settlement is USDC on Base, but only once a user acts outside this provider.

Tests

taskmarketActionProvider.test.ts covers USDC base-unit conversion from both strings and numbers, hours-remaining parsing, description collapsing, reward-floor filtering, sorting by reward, delegation matching including the stopword and no-match paths, full task rendering, and the API-failure path (returns an error string rather than throwing).

One case worth calling out: a task can be status: "open"and already past its expiryTime. isOpenForWork checks status, submission window and expiry together, and there is a test for exactly that combination.

Checklist

  • New action provider in its own directory following existing conventions
  • Exported from action-providers/index.ts
  • README documenting setup and scope
  • Unit tests
  • No new dependencies
  • No secrets, keys or wallet access required

Adds a TaskMarket action provider so an agent can discover paid work on
TaskMarket, a task marketplace settling in USDC on Base.
The motivation is delegation. An agent that recognises a request is better
handled by external workers can look for existing funded work instead of
burning inference on something it will do badly, and can hand its operator a
link rather than an unreliable answer.
Actions:
- browse_tasks list open tasks by net reward, with deadline and how
contested each already is
- get_task_details full acceptance criteria for one task
- evaluate_delegation given work in hand, surface open tasks overlapping it
Scope is deliberately read-only. Nothing here spends funds, touches a wallet,
creates a task, claims work, or requires an API key. Task creation and
submission move real USDC through escrow, so they are left to the first-party
TaskMarket CLI behind explicit human authorization rather than exposed as
agent actions.
Notes:
- rewards are reported net of the platform fee, which is what a worker
actually receives
- submission counts are surfaced, because a 64 USDC task with 142 submissions
is often worth less in expectation than a 4 USDC task with three
- list views collapse descriptions to one line; task descriptions run to
hundreds of words of markdown and would otherwise dominate the context
- evaluate_delegation uses transparent keyword overlap rather than embeddings,
so it costs no extra model call and its behaviour is predictable
The discovery endpoints used are unauthenticated and read-only, so the
provider needs no configuration. supportsNetwork returns true because
browsing touches no wallet.
Includes unit tests covering USDC conversion, expiry handling (a task can be
status=open but past expiry), stopword-filtered matching, reward sorting and
API-failure paths.
@cb-heimdall

Copy link
Copy Markdown

🟡 Heimdall Review Status

RequirementStatusMore Info
Reviews 🟡 0/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified1
Sum2

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation action provider New action provider typescript labels Aug 17, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

action providerNew action providerdocumentationImprovements or additions to documentationtypescript

Development

Successfully merging this pull request may close these issues.

2 participants

@wilddoc@cb-heimdall
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat(action-providers): add read-only TaskMarket discovery provider - #1452

Open
wilddoc wants to merge 1 commit into
coinbase:mainfrom
wilddoc:feat/taskmarket-action-provider
Open

feat(action-providers): add read-only TaskMarket discovery provider#1452
wilddoc wants to merge 1 commit into
coinbase:mainfrom
wilddoc:feat/taskmarket-action-provider

Conversation

@wilddoc

Copy link
Copy Markdown

Description

Adds a TaskMarket action provider so an agent can discover paid work on TaskMarket, a task marketplace where requesters escrow USDC on Base and workers submit deliverables.

The motivation is delegation. An agent that recognises a request is better handled by external workers can look for existing funded work instead of burning inference on something it will do badly, and can hand its operator a link rather than an unreliable answer.

Actions

ActionPurpose
browse_tasksLists open tasks by net reward, with deadline and how contested each already is
get_task_detailsFull acceptance criteria, reward and award count for one task
evaluate_delegationGiven a description of work in hand, surfaces open tasks that overlap with it

Scope: read-only, on purpose

Nothing in this provider spends funds, touches a wallet, creates a task, claims work, or requires an API key.

Task creation and submission move real USDC through escrow, so they are deliberately left to the first-party TaskMarket CLI behind explicit human authorization rather than exposed as agent actions. evaluate_delegation states this in its own output: it returns candidates and says plainly that acting on them needs operator authorization.

Because of that, the provider needs no configuration and no secrets. The discovery endpoints are unauthenticated and read-only.

Design notes

  • Rewards are reported net of the platform fee, which is what a worker actually receives.
  • Submission counts are surfaced. A 64 USDC task with 142 submissions is often worth less in expectation than a 4 USDC task with three, and an agent recommending work should be able to see that.
  • List views collapse descriptions to one line. Task descriptions run to hundreds of words of markdown and would otherwise dominate the context window.
  • Matching uses transparent stopword-filtered keyword overlap, not embeddings, so it costs no extra model call and an operator can predict its behaviour.
  • supportsNetwork returns true: browsing reads a public HTTP API and touches no wallet. Settlement is USDC on Base, but only once a user acts outside this provider.

Tests

taskmarketActionProvider.test.ts covers USDC base-unit conversion from both strings and numbers, hours-remaining parsing, description collapsing, reward-floor filtering, sorting by reward, delegation matching including the stopword and no-match paths, full task rendering, and the API-failure path (returns an error string rather than throwing).

One case worth calling out: a task can be status: "open"and already past its expiryTime. isOpenForWork checks status, submission window and expiry together, and there is a test for exactly that combination.

Checklist

  • New action provider in its own directory following existing conventions
  • Exported from action-providers/index.ts
  • README documenting setup and scope
  • Unit tests
  • No new dependencies
  • No secrets, keys or wallet access required

Adds a TaskMarket action provider so an agent can discover paid work on
TaskMarket, a task marketplace settling in USDC on Base.
The motivation is delegation. An agent that recognises a request is better
handled by external workers can look for existing funded work instead of
burning inference on something it will do badly, and can hand its operator a
link rather than an unreliable answer.
Actions:
- browse_tasks list open tasks by net reward, with deadline and how
contested each already is
- get_task_details full acceptance criteria for one task
- evaluate_delegation given work in hand, surface open tasks overlapping it
Scope is deliberately read-only. Nothing here spends funds, touches a wallet,
creates a task, claims work, or requires an API key. Task creation and
submission move real USDC through escrow, so they are left to the first-party
TaskMarket CLI behind explicit human authorization rather than exposed as
agent actions.
Notes:
- rewards are reported net of the platform fee, which is what a worker
actually receives
- submission counts are surfaced, because a 64 USDC task with 142 submissions
is often worth less in expectation than a 4 USDC task with three
- list views collapse descriptions to one line; task descriptions run to
hundreds of words of markdown and would otherwise dominate the context
- evaluate_delegation uses transparent keyword overlap rather than embeddings,
so it costs no extra model call and its behaviour is predictable
The discovery endpoints used are unauthenticated and read-only, so the
provider needs no configuration. supportsNetwork returns true because
browsing touches no wallet.
Includes unit tests covering USDC conversion, expiry handling (a task can be
status=open but past expiry), stopword-filtered matching, reward sorting and
API-failure paths.
@cb-heimdall

Copy link
Copy Markdown

🟡 Heimdall Review Status

RequirementStatusMore Info
Reviews 🟡 0/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified1
Sum2

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation action provider New action provider typescript labels Aug 17, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

action providerNew action providerdocumentationImprovements or additions to documentationtypescript

Development

Successfully merging this pull request may close these issues.

2 participants

@wilddoc@cb-heimdall
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(action-providers): add read-only TaskMarket discovery provider - #1452

Open
wilddoc wants to merge 1 commit into
coinbase:mainfrom
wilddoc:feat/taskmarket-action-provider
Open

feat(action-providers): add read-only TaskMarket discovery provider#1452
wilddoc wants to merge 1 commit into
coinbase:mainfrom
wilddoc:feat/taskmarket-action-provider

Conversation

@wilddoc

Copy link
Copy Markdown

Description

Adds a TaskMarket action provider so an agent can discover paid work on TaskMarket, a task marketplace where requesters escrow USDC on Base and workers submit deliverables.

The motivation is delegation. An agent that recognises a request is better handled by external workers can look for existing funded work instead of burning inference on something it will do badly, and can hand its operator a link rather than an unreliable answer.

Actions

ActionPurpose
browse_tasksLists open tasks by net reward, with deadline and how contested each already is
get_task_detailsFull acceptance criteria, reward and award count for one task
evaluate_delegationGiven a description of work in hand, surfaces open tasks that overlap with it

Scope: read-only, on purpose

Nothing in this provider spends funds, touches a wallet, creates a task, claims work, or requires an API key.

Task creation and submission move real USDC through escrow, so they are deliberately left to the first-party TaskMarket CLI behind explicit human authorization rather than exposed as agent actions. evaluate_delegation states this in its own output: it returns candidates and says plainly that acting on them needs operator authorization.

Because of that, the provider needs no configuration and no secrets. The discovery endpoints are unauthenticated and read-only.

Design notes

  • Rewards are reported net of the platform fee, which is what a worker actually receives.
  • Submission counts are surfaced. A 64 USDC task with 142 submissions is often worth less in expectation than a 4 USDC task with three, and an agent recommending work should be able to see that.
  • List views collapse descriptions to one line. Task descriptions run to hundreds of words of markdown and would otherwise dominate the context window.
  • Matching uses transparent stopword-filtered keyword overlap, not embeddings, so it costs no extra model call and an operator can predict its behaviour.
  • supportsNetwork returns true: browsing reads a public HTTP API and touches no wallet. Settlement is USDC on Base, but only once a user acts outside this provider.

Tests

taskmarketActionProvider.test.ts covers USDC base-unit conversion from both strings and numbers, hours-remaining parsing, description collapsing, reward-floor filtering, sorting by reward, delegation matching including the stopword and no-match paths, full task rendering, and the API-failure path (returns an error string rather than throwing).

One case worth calling out: a task can be status: "open"and already past its expiryTime. isOpenForWork checks status, submission window and expiry together, and there is a test for exactly that combination.

Checklist

  • New action provider in its own directory following existing conventions
  • Exported from action-providers/index.ts
  • README documenting setup and scope
  • Unit tests
  • No new dependencies
  • No secrets, keys or wallet access required

Adds a TaskMarket action provider so an agent can discover paid work on
TaskMarket, a task marketplace settling in USDC on Base.
The motivation is delegation. An agent that recognises a request is better
handled by external workers can look for existing funded work instead of
burning inference on something it will do badly, and can hand its operator a
link rather than an unreliable answer.
Actions:
- browse_tasks list open tasks by net reward, with deadline and how
contested each already is
- get_task_details full acceptance criteria for one task
- evaluate_delegation given work in hand, surface open tasks overlapping it
Scope is deliberately read-only. Nothing here spends funds, touches a wallet,
creates a task, claims work, or requires an API key. Task creation and
submission move real USDC through escrow, so they are left to the first-party
TaskMarket CLI behind explicit human authorization rather than exposed as
agent actions.
Notes:
- rewards are reported net of the platform fee, which is what a worker
actually receives
- submission counts are surfaced, because a 64 USDC task with 142 submissions
is often worth less in expectation than a 4 USDC task with three
- list views collapse descriptions to one line; task descriptions run to
hundreds of words of markdown and would otherwise dominate the context
- evaluate_delegation uses transparent keyword overlap rather than embeddings,
so it costs no extra model call and its behaviour is predictable
The discovery endpoints used are unauthenticated and read-only, so the
provider needs no configuration. supportsNetwork returns true because
browsing touches no wallet.
Includes unit tests covering USDC conversion, expiry handling (a task can be
status=open but past expiry), stopword-filtered matching, reward sorting and
API-failure paths.
@cb-heimdall

Copy link
Copy Markdown

🟡 Heimdall Review Status

RequirementStatusMore Info
Reviews 🟡 0/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified1
Sum2

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation action provider New action provider typescript labels Aug 17, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

action providerNew action providerdocumentationImprovements or additions to documentationtypescript

Development

Successfully merging this pull request may close these issues.

2 participants

@wilddoc@cb-heimdall
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(action-providers): add read-only TaskMarket discovery provider - #1452

Open
wilddoc wants to merge 1 commit into
coinbase:mainfrom
wilddoc:feat/taskmarket-action-provider
Open

feat(action-providers): add read-only TaskMarket discovery provider#1452
wilddoc wants to merge 1 commit into
coinbase:mainfrom
wilddoc:feat/taskmarket-action-provider

Conversation

@wilddoc

Copy link
Copy Markdown

Description

Adds a TaskMarket action provider so an agent can discover paid work on TaskMarket, a task marketplace where requesters escrow USDC on Base and workers submit deliverables.

The motivation is delegation. An agent that recognises a request is better handled by external workers can look for existing funded work instead of burning inference on something it will do badly, and can hand its operator a link rather than an unreliable answer.

Actions

ActionPurpose
browse_tasksLists open tasks by net reward, with deadline and how contested each already is
get_task_detailsFull acceptance criteria, reward and award count for one task
evaluate_delegationGiven a description of work in hand, surfaces open tasks that overlap with it

Scope: read-only, on purpose

Nothing in this provider spends funds, touches a wallet, creates a task, claims work, or requires an API key.

Task creation and submission move real USDC through escrow, so they are deliberately left to the first-party TaskMarket CLI behind explicit human authorization rather than exposed as agent actions. evaluate_delegation states this in its own output: it returns candidates and says plainly that acting on them needs operator authorization.

Because of that, the provider needs no configuration and no secrets. The discovery endpoints are unauthenticated and read-only.

Design notes

  • Rewards are reported net of the platform fee, which is what a worker actually receives.
  • Submission counts are surfaced. A 64 USDC task with 142 submissions is often worth less in expectation than a 4 USDC task with three, and an agent recommending work should be able to see that.
  • List views collapse descriptions to one line. Task descriptions run to hundreds of words of markdown and would otherwise dominate the context window.
  • Matching uses transparent stopword-filtered keyword overlap, not embeddings, so it costs no extra model call and an operator can predict its behaviour.
  • supportsNetwork returns true: browsing reads a public HTTP API and touches no wallet. Settlement is USDC on Base, but only once a user acts outside this provider.

Tests

taskmarketActionProvider.test.ts covers USDC base-unit conversion from both strings and numbers, hours-remaining parsing, description collapsing, reward-floor filtering, sorting by reward, delegation matching including the stopword and no-match paths, full task rendering, and the API-failure path (returns an error string rather than throwing).

One case worth calling out: a task can be status: "open"and already past its expiryTime. isOpenForWork checks status, submission window and expiry together, and there is a test for exactly that combination.

Checklist

  • New action provider in its own directory following existing conventions
  • Exported from action-providers/index.ts
  • README documenting setup and scope
  • Unit tests
  • No new dependencies
  • No secrets, keys or wallet access required

Adds a TaskMarket action provider so an agent can discover paid work on
TaskMarket, a task marketplace settling in USDC on Base.
The motivation is delegation. An agent that recognises a request is better
handled by external workers can look for existing funded work instead of
burning inference on something it will do badly, and can hand its operator a
link rather than an unreliable answer.
Actions:
- browse_tasks list open tasks by net reward, with deadline and how
contested each already is
- get_task_details full acceptance criteria for one task
- evaluate_delegation given work in hand, surface open tasks overlapping it
Scope is deliberately read-only. Nothing here spends funds, touches a wallet,
creates a task, claims work, or requires an API key. Task creation and
submission move real USDC through escrow, so they are left to the first-party
TaskMarket CLI behind explicit human authorization rather than exposed as
agent actions.
Notes:
- rewards are reported net of the platform fee, which is what a worker
actually receives
- submission counts are surfaced, because a 64 USDC task with 142 submissions
is often worth less in expectation than a 4 USDC task with three
- list views collapse descriptions to one line; task descriptions run to
hundreds of words of markdown and would otherwise dominate the context
- evaluate_delegation uses transparent keyword overlap rather than embeddings,
so it costs no extra model call and its behaviour is predictable
The discovery endpoints used are unauthenticated and read-only, so the
provider needs no configuration. supportsNetwork returns true because
browsing touches no wallet.
Includes unit tests covering USDC conversion, expiry handling (a task can be
status=open but past expiry), stopword-filtered matching, reward sorting and
API-failure paths.
@cb-heimdall

Copy link
Copy Markdown

🟡 Heimdall Review Status

RequirementStatusMore Info
Reviews 🟡 0/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified1
Sum2

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation action provider New action provider typescript labels Aug 17, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

action providerNew action providerdocumentationImprovements or additions to documentationtypescript

Development

Successfully merging this pull request may close these issues.

2 participants

@wilddoc@cb-heimdall
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat(action-providers): add read-only TaskMarket discovery provider - #1452

Open
wilddoc wants to merge 1 commit into
coinbase:mainfrom
wilddoc:feat/taskmarket-action-provider
Open

feat(action-providers): add read-only TaskMarket discovery provider#1452
wilddoc wants to merge 1 commit into
coinbase:mainfrom
wilddoc:feat/taskmarket-action-provider

Conversation

@wilddoc

Copy link
Copy Markdown

Description

Adds a TaskMarket action provider so an agent can discover paid work on TaskMarket, a task marketplace where requesters escrow USDC on Base and workers submit deliverables.

The motivation is delegation. An agent that recognises a request is better handled by external workers can look for existing funded work instead of burning inference on something it will do badly, and can hand its operator a link rather than an unreliable answer.

Actions

ActionPurpose
browse_tasksLists open tasks by net reward, with deadline and how contested each already is
get_task_detailsFull acceptance criteria, reward and award count for one task
evaluate_delegationGiven a description of work in hand, surfaces open tasks that overlap with it

Scope: read-only, on purpose

Nothing in this provider spends funds, touches a wallet, creates a task, claims work, or requires an API key.

Task creation and submission move real USDC through escrow, so they are deliberately left to the first-party TaskMarket CLI behind explicit human authorization rather than exposed as agent actions. evaluate_delegation states this in its own output: it returns candidates and says plainly that acting on them needs operator authorization.

Because of that, the provider needs no configuration and no secrets. The discovery endpoints are unauthenticated and read-only.

Design notes

  • Rewards are reported net of the platform fee, which is what a worker actually receives.
  • Submission counts are surfaced. A 64 USDC task with 142 submissions is often worth less in expectation than a 4 USDC task with three, and an agent recommending work should be able to see that.
  • List views collapse descriptions to one line. Task descriptions run to hundreds of words of markdown and would otherwise dominate the context window.
  • Matching uses transparent stopword-filtered keyword overlap, not embeddings, so it costs no extra model call and an operator can predict its behaviour.
  • supportsNetwork returns true: browsing reads a public HTTP API and touches no wallet. Settlement is USDC on Base, but only once a user acts outside this provider.

Tests

taskmarketActionProvider.test.ts covers USDC base-unit conversion from both strings and numbers, hours-remaining parsing, description collapsing, reward-floor filtering, sorting by reward, delegation matching including the stopword and no-match paths, full task rendering, and the API-failure path (returns an error string rather than throwing).

One case worth calling out: a task can be status: "open"and already past its expiryTime. isOpenForWork checks status, submission window and expiry together, and there is a test for exactly that combination.

Checklist

  • New action provider in its own directory following existing conventions
  • Exported from action-providers/index.ts
  • README documenting setup and scope
  • Unit tests
  • No new dependencies
  • No secrets, keys or wallet access required

Adds a TaskMarket action provider so an agent can discover paid work on
TaskMarket, a task marketplace settling in USDC on Base.
The motivation is delegation. An agent that recognises a request is better
handled by external workers can look for existing funded work instead of
burning inference on something it will do badly, and can hand its operator a
link rather than an unreliable answer.
Actions:
- browse_tasks list open tasks by net reward, with deadline and how
contested each already is
- get_task_details full acceptance criteria for one task
- evaluate_delegation given work in hand, surface open tasks overlapping it
Scope is deliberately read-only. Nothing here spends funds, touches a wallet,
creates a task, claims work, or requires an API key. Task creation and
submission move real USDC through escrow, so they are left to the first-party
TaskMarket CLI behind explicit human authorization rather than exposed as
agent actions.
Notes:
- rewards are reported net of the platform fee, which is what a worker
actually receives
- submission counts are surfaced, because a 64 USDC task with 142 submissions
is often worth less in expectation than a 4 USDC task with three
- list views collapse descriptions to one line; task descriptions run to
hundreds of words of markdown and would otherwise dominate the context
- evaluate_delegation uses transparent keyword overlap rather than embeddings,
so it costs no extra model call and its behaviour is predictable
The discovery endpoints used are unauthenticated and read-only, so the
provider needs no configuration. supportsNetwork returns true because
browsing touches no wallet.
Includes unit tests covering USDC conversion, expiry handling (a task can be
status=open but past expiry), stopword-filtered matching, reward sorting and
API-failure paths.
@cb-heimdall

Copy link
Copy Markdown

🟡 Heimdall Review Status

RequirementStatusMore Info
Reviews 🟡 0/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified1
Sum2

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation action provider New action provider typescript labels Aug 17, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

action providerNew action providerdocumentationImprovements or additions to documentationtypescript

Development

Successfully merging this pull request may close these issues.

2 participants

@wilddoc@cb-heimdall