humanbottasks 0.1.1__tar.gz → 0.1.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- humanbottasks-0.1.2/GUIDE.md +76 -0
- {humanbottasks-0.1.1 → humanbottasks-0.1.2}/PKG-INFO +6 -1
- {humanbottasks-0.1.1 → humanbottasks-0.1.2}/README.md +5 -0
- {humanbottasks-0.1.1 → humanbottasks-0.1.2}/index.html +1 -0
- {humanbottasks-0.1.1 → humanbottasks-0.1.2}/pyproject.toml +1 -1
- {humanbottasks-0.1.1 → humanbottasks-0.1.2}/server.json +2 -2
- {humanbottasks-0.1.1 → humanbottasks-0.1.2}/test_mcp_client.py +3 -4
- {humanbottasks-0.1.1 → humanbottasks-0.1.2}/.gitignore +0 -0
- {humanbottasks-0.1.1 → humanbottasks-0.1.2}/Dockerfile +0 -0
- {humanbottasks-0.1.1 → humanbottasks-0.1.2}/FORUM_POSTS.md +0 -0
- {humanbottasks-0.1.1 → humanbottasks-0.1.2}/LAUNCH_POST.md +0 -0
- {humanbottasks-0.1.1 → humanbottasks-0.1.2}/LICENSE +0 -0
- {humanbottasks-0.1.1 → humanbottasks-0.1.2}/SUBMISSION.md +0 -0
- {humanbottasks-0.1.1 → humanbottasks-0.1.2}/alarm.py +0 -0
- {humanbottasks-0.1.1 → humanbottasks-0.1.2}/config/claude_desktop_config.json +0 -0
- {humanbottasks-0.1.1 → humanbottasks-0.1.2}/config/cursor_mcp.json +0 -0
- {humanbottasks-0.1.1 → humanbottasks-0.1.2}/data/reported_ids.txt +0 -0
- {humanbottasks-0.1.1 → humanbottasks-0.1.2}/demo.py +0 -0
- {humanbottasks-0.1.1 → humanbottasks-0.1.2}/fulfill.py +0 -0
- {humanbottasks-0.1.1 → humanbottasks-0.1.2}/glama.json +0 -0
- {humanbottasks-0.1.1 → humanbottasks-0.1.2}/http_demo.py +0 -0
- {humanbottasks-0.1.1 → humanbottasks-0.1.2}/server.py +0 -0
- {humanbottasks-0.1.1 → humanbottasks-0.1.2}/store.py +0 -0
- {humanbottasks-0.1.1 → humanbottasks-0.1.2}/test_smoke.py +0 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Give your AI agent a human fallback — in 2 lines
|
|
2
|
+
|
|
3
|
+
Agents are great at reasoning, but bad at the parts that need a real person:
|
|
4
|
+
verifying a fact, doing something physical, judging whether something "feels right",
|
|
5
|
+
labeling data correctly. humanbottasks closes that gap with a two-tool MCP server.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
uvx humanbottasks
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
That's it. Add it to your MCP client (Claude Desktop, Cursor, Windsurf) or spawn it
|
|
14
|
+
as a subprocess from any agent framework.
|
|
15
|
+
|
|
16
|
+
## What you get — two tools
|
|
17
|
+
|
|
18
|
+
- `request_human_task(task_type, description, max_price_usd)` — delegate work to a real person
|
|
19
|
+
- `get_task_status(task_id)` — poll for the result
|
|
20
|
+
|
|
21
|
+
## Five task types
|
|
22
|
+
|
|
23
|
+
| task_type | for things like |
|
|
24
|
+
|---|---|
|
|
25
|
+
| `verification` | check a fact, test a page, confirm a detail |
|
|
26
|
+
| `physical_action` | buy, ship, call, sign, visit |
|
|
27
|
+
| `subjective_judgment` | "does this sound natural?", "is this good enough?" |
|
|
28
|
+
| `ground_truth_labeling` | label data correctly, build eval sets |
|
|
29
|
+
| `prove_human` | CAPTCHA, identity/account verification |
|
|
30
|
+
|
|
31
|
+
## Example — Claude Desktop
|
|
32
|
+
|
|
33
|
+
`claude_desktop_config.json`:
|
|
34
|
+
|
|
35
|
+
```json
|
|
36
|
+
{
|
|
37
|
+
"mcpServers": {
|
|
38
|
+
"humanbottasks": {
|
|
39
|
+
"command": "uvx",
|
|
40
|
+
"args": ["humanbottasks"]
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Then ask Claude:
|
|
47
|
+
|
|
48
|
+
> Check whether https://example.com is reachable from your side, and if it is,
|
|
49
|
+
> what the page title is.
|
|
50
|
+
|
|
51
|
+
Claude calls `request_human_task(task_type="verification", description="...")`,
|
|
52
|
+
gets a `task_id`, a human fulfills it, and Claude polls `get_task_status` for the result.
|
|
53
|
+
|
|
54
|
+
## How the loop works
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
Agent → request_human_task → queue (SQLite) → human fulfills → get_task_status → result
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
The queue lives at `~/.humanbottasks/tasks.db` (override with `HBT_DB`). Fulfill from the CLI:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
python fulfill.py done <task_id> "<result>"
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Transports
|
|
67
|
+
|
|
68
|
+
- `stdio` — Claude Desktop, Cursor, Windsurf, local agent frameworks (default)
|
|
69
|
+
- `streamable-http` — remote agents: `python -m server --transport streamable-http`
|
|
70
|
+
- `sse` — legacy clients
|
|
71
|
+
|
|
72
|
+
## Links
|
|
73
|
+
|
|
74
|
+
- Repo: https://github.com/humanbottasks/humanbottasks
|
|
75
|
+
- Landing: https://humanbottasks.github.io/humanbottasks/
|
|
76
|
+
- PyPI: https://pypi.org/project/humanbottasks/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: humanbottasks
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary: Human fallback for AI agents: delegate tasks a model can't do to a human, over MCP.
|
|
5
5
|
License-File: LICENSE
|
|
6
6
|
Requires-Python: >=3.10
|
|
@@ -9,6 +9,8 @@ Description-Content-Type: text/markdown
|
|
|
9
9
|
|
|
10
10
|
# humanbottasks
|
|
11
11
|
|
|
12
|
+
mcp-name: io.github.humanbottasks/humanbottasks
|
|
13
|
+
|
|
12
14
|
Gemanagter Human-Service-Layer fuer AI-Agenten. Ein AI-Agent delegiert ueber MCP
|
|
13
15
|
eine Aufgabe, die er nicht selbst kann, an einen Menschen; der Mensch erledigt
|
|
14
16
|
sie, der Agent ruft das Ergebnis ab.
|
|
@@ -38,6 +40,9 @@ Fuer Remote-Zugriff: HBT_HOST=0.0.0.0 setzen.
|
|
|
38
40
|
## Install (fuer andere Builder, 1 Zeile)
|
|
39
41
|
uvx humanbottasks
|
|
40
42
|
|
|
43
|
+
## Guide (Englisch)
|
|
44
|
+
- [GUIDE.md](GUIDE.md) — Einfuehrung, Task-Typen, Beispiel-Loop, Transports
|
|
45
|
+
|
|
41
46
|
## Task-Typen
|
|
42
47
|
verification · physical_action · subjective_judgment · ground_truth_labeling · prove_human
|
|
43
48
|
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# humanbottasks
|
|
2
2
|
|
|
3
|
+
mcp-name: io.github.humanbottasks/humanbottasks
|
|
4
|
+
|
|
3
5
|
Gemanagter Human-Service-Layer fuer AI-Agenten. Ein AI-Agent delegiert ueber MCP
|
|
4
6
|
eine Aufgabe, die er nicht selbst kann, an einen Menschen; der Mensch erledigt
|
|
5
7
|
sie, der Agent ruft das Ergebnis ab.
|
|
@@ -29,6 +31,9 @@ Fuer Remote-Zugriff: HBT_HOST=0.0.0.0 setzen.
|
|
|
29
31
|
## Install (fuer andere Builder, 1 Zeile)
|
|
30
32
|
uvx humanbottasks
|
|
31
33
|
|
|
34
|
+
## Guide (Englisch)
|
|
35
|
+
- [GUIDE.md](GUIDE.md) — Einfuehrung, Task-Typen, Beispiel-Loop, Transports
|
|
36
|
+
|
|
32
37
|
## Task-Typen
|
|
33
38
|
verification · physical_action · subjective_judgment · ground_truth_labeling · prove_human
|
|
34
39
|
|
|
@@ -63,6 +63,7 @@
|
|
|
63
63
|
<div class="h2">Install</div>
|
|
64
64
|
<div class="code"><span class="c"># one command</span><br>uvx humanbottasks</div>
|
|
65
65
|
<div class="code"><span class="c"># MCP client config (Claude Desktop / Cursor / Windsurf)</span><br>{"mcpServers":{"humanbottasks":{"command":"uvx","args":["humanbottasks"]}}}</div>
|
|
66
|
+
<p><a href="https://github.com/humanbottasks/humanbottasks/blob/main/GUIDE.md">Read the full guide →</a></p>
|
|
66
67
|
</section>
|
|
67
68
|
|
|
68
69
|
<section class="wrap">
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "humanbottasks"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.2"
|
|
8
8
|
description = "Human fallback for AI agents: delegate tasks a model can't do to a human, over MCP."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -8,13 +8,13 @@
|
|
|
8
8
|
"url": "https://github.com/humanbottasks/humanbottasks",
|
|
9
9
|
"source": "github"
|
|
10
10
|
},
|
|
11
|
-
"version": "0.1.
|
|
11
|
+
"version": "0.1.2",
|
|
12
12
|
"packages": [
|
|
13
13
|
{
|
|
14
14
|
"registryType": "pypi",
|
|
15
15
|
"registryBaseUrl": "https://pypi.org",
|
|
16
16
|
"identifier": "humanbottasks",
|
|
17
|
-
"version": "0.1.
|
|
17
|
+
"version": "0.1.2",
|
|
18
18
|
"transport": {
|
|
19
19
|
"type": "stdio"
|
|
20
20
|
}
|
|
@@ -15,10 +15,9 @@ import store as q
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
async def main():
|
|
18
|
-
#
|
|
19
|
-
#
|
|
20
|
-
|
|
21
|
-
params = StdioServerParameters(command=sys.executable, args=["server.py"])
|
|
18
|
+
# Test gegen das gepublishte PyPI-Package (0.1.1 mit DB-Fix)
|
|
19
|
+
# --refresh erzwingt Neuaufloesung (sonst greift uvx auf gecachtes 0.1.0 zurueck)
|
|
20
|
+
params = StdioServerParameters(command="uvx", args=["--refresh", "humanbottasks"])
|
|
22
21
|
async with stdio_client(params) as (read, write):
|
|
23
22
|
async with ClientSession(read, write) as session:
|
|
24
23
|
await session.initialize()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|