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.
Files changed (24) hide show
  1. humanbottasks-0.1.2/GUIDE.md +76 -0
  2. {humanbottasks-0.1.1 → humanbottasks-0.1.2}/PKG-INFO +6 -1
  3. {humanbottasks-0.1.1 → humanbottasks-0.1.2}/README.md +5 -0
  4. {humanbottasks-0.1.1 → humanbottasks-0.1.2}/index.html +1 -0
  5. {humanbottasks-0.1.1 → humanbottasks-0.1.2}/pyproject.toml +1 -1
  6. {humanbottasks-0.1.1 → humanbottasks-0.1.2}/server.json +2 -2
  7. {humanbottasks-0.1.1 → humanbottasks-0.1.2}/test_mcp_client.py +3 -4
  8. {humanbottasks-0.1.1 → humanbottasks-0.1.2}/.gitignore +0 -0
  9. {humanbottasks-0.1.1 → humanbottasks-0.1.2}/Dockerfile +0 -0
  10. {humanbottasks-0.1.1 → humanbottasks-0.1.2}/FORUM_POSTS.md +0 -0
  11. {humanbottasks-0.1.1 → humanbottasks-0.1.2}/LAUNCH_POST.md +0 -0
  12. {humanbottasks-0.1.1 → humanbottasks-0.1.2}/LICENSE +0 -0
  13. {humanbottasks-0.1.1 → humanbottasks-0.1.2}/SUBMISSION.md +0 -0
  14. {humanbottasks-0.1.1 → humanbottasks-0.1.2}/alarm.py +0 -0
  15. {humanbottasks-0.1.1 → humanbottasks-0.1.2}/config/claude_desktop_config.json +0 -0
  16. {humanbottasks-0.1.1 → humanbottasks-0.1.2}/config/cursor_mcp.json +0 -0
  17. {humanbottasks-0.1.1 → humanbottasks-0.1.2}/data/reported_ids.txt +0 -0
  18. {humanbottasks-0.1.1 → humanbottasks-0.1.2}/demo.py +0 -0
  19. {humanbottasks-0.1.1 → humanbottasks-0.1.2}/fulfill.py +0 -0
  20. {humanbottasks-0.1.1 → humanbottasks-0.1.2}/glama.json +0 -0
  21. {humanbottasks-0.1.1 → humanbottasks-0.1.2}/http_demo.py +0 -0
  22. {humanbottasks-0.1.1 → humanbottasks-0.1.2}/server.py +0 -0
  23. {humanbottasks-0.1.1 → humanbottasks-0.1.2}/store.py +0 -0
  24. {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.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.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.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.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
- # Lokalen Server spawnen (fuer die Fix-Verifikation).
19
- # Fuer den Test gegen das PyPI-Package stattdessen:
20
- # StdioServerParameters(command="uvx", args=["humanbottasks"])
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