humanforai
Python client and command-line tool for Human For AI — a human endpoint for AI agents. Let your agent, pipeline, or script hire a verified human operator for tasks that need physical presence, human perception, or human judgment:
- Real-world verification — confirm a place, product, price, or claim exists, with photo/text evidence
- Product or app testing — a real human installs, uses, and reports
- Human judgment and feedback — tone, clarity, trustworthiness, design quality
- AI output review — human review before your output reaches production
- Data collection — gathering or labeling that needs human perception or local access
- Local physical-world tasks — visit, photograph, check, measure, observe
- Decision escalation — a human read on a judgment call before you act
- …and anything else a human can legally and safely do (
custom_human_in_the_loop)
No API key. Free during the proof-of-concept pilot. Every task is reviewed by the human before acceptance; illegal, harmful, deceptive, unsafe, or privacy-invasive tasks are rejected. First response within 12 hours, any day of the week — typically much faster.
Zero dependencies (standard library only). Python 3.9+.
Install
pip install humanforai
With offline receipt verification (needs cryptography):
pip install "humanforai[receipt]"
Command line
humanforai services # the catalog with task_type identifiers
humanforai submit \
--type real_world_verification \
--description "Verify that [business] at [address] is open; photograph the storefront and posted hours." \
--location "City, address or area" \
--output-format text_report_with_photos \
--email you@your-domain.com
humanforai status HFAI-2026-XXXXXXXXXXXXXXXX # one look
humanforai status HFAI-2026-XXXXXXXXXXXXXXXX --watch # poll until delivered or rejected
humanforai message --reply-to you@your-domain.com --message "Can you cover [city] next week?"
humanforai thread MSG-ID --token ACCESS_TOKEN
humanforai verify-receipt HFAI-2026-XXXXXXXXXXXXXXXX # offline check of the signed receipt
humanforai health
Every command accepts --json for raw output. Exit codes: 0 ok, 2 usage, 3 API error, 4 the task was rejected.
No mailbox? Autonomous agents can submit with --status-poll instead of --email: the deliverable arrives as text in operator_notes on the status endpoint (budget: one such task per client per day). Keep the task_id — it is your only key to the result.
Python
from humanforai import Client, HumanForAIError
client = Client(requester="my-agent/1.0")
task = client.submit_task(
task_type="ai_output_review",
description="Review these 10 AI-written product descriptions for plausibility and tone; "
"verdict + one-line reason each: [content or link].",
output_format="structured_json",
contact_email="you@your-domain.com",
)
print(task["task_id"], task["status_url"])
# Human review is not instant. Poll every minute or slower.
final = client.wait_for_task(task["task_id"], poll_interval=120)
print(final["status"], final.get("operator_notes"))
Errors are structured:
try:
client.get_task("HFAI-NOPE")
except HumanForAIError as exc:
print(exc.status, exc.error, exc.message, exc.details, exc.rate_limit)
Every response carries the standard RateLimit-* headers; the most recent set is on client.last_rate_limit. Retrying a submission with the same idempotency_key replays the original response instead of creating a duplicate.
Status transparency
get_task returns progress, not just the final state: seen_by_operator_at (the moment a human actually saw the task), eta (set on acceptance), and status_history (submitted → accepted → delivered, or rejected).
Signed receipts
Every delivered task carries receipt, a compact JWS (Ed25519) binding the deliverable's SHA-256 to the task's lifecycle timestamps. Verify it offline against the public key at https://humanforai.dev/.well-known/jwks.json:
from humanforai.receipt import verify_receipt
task = client.get_task(task_id)
payload = verify_receipt(task["receipt"], client.jwks(), deliverable_text=task["operator_notes"])
A valid receipt proves the deliverable is byte-identical to what was delivered and that it was issued by humanforai.dev. It does not prove the timestamps were witnessed by anyone else — they are the service's own signed assertion. Details: https://humanforai.dev/trust#receipts.
Other ways in
- MCP (streamable HTTP, no auth):
https://humanforai.dev/mcp— ornpx -y humanforaifor stdio clients - REST: https://humanforai.dev/api · OpenAPI: https://humanforai.dev/openapi.json
- Agent manifest: https://humanforai.dev/.well-known/agent.json · llms.txt: https://humanforai.dev/llms.txt
- Agent skill in one fetch: https://humanforai.dev/skill.md
Trust, in one paragraph
You never pay, never create an account, and are never asked for credentials — a request for payment or credentials is not from this service. You send a task description and an optional contact email; the worst case is a rejected task. Deliverables are one careful human's observation with stated confidence, not guaranteed truth. New here? Send a small, checkable test task first. Full analysis: https://humanforai.dev/trust.
License
MIT
Metadata
Release files for humanforai 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| humanforai-0.1.0.tar.gz | 19.3 kB | Without provenance | Details for humanforai-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| humanforai-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for humanforai-0.1.0-py3-none-any.whl |
Total release size: 35.7 kB
Release files / humanforai-0.1.0.tar.gz
| Download URL | humanforai-0.1.0.tar.gz |
|---|---|
| Size | 19.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a2bc2449a23e055b55f8176bec94af43b9b4802e3db32a69266738a8f90233ec
|
|
BLAKE2b-256 checksum How to use checksums |
66013d6b3d01837e3fa08f50fdc062d8f5a3a28bc29ca2ae36be1d47014bf102
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.2
|
Release files / humanforai-0.1.0-py3-none-any.whl
| Download URL | humanforai-0.1.0-py3-none-any.whl |
|---|---|
| Size | 16.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3359dbed6f46e201010c7fee059da623cbf868b7f8312f0b65eae64942ae1411
|
|
BLAKE2b-256 checksum How to use checksums |
2cd104b5903e3f50eb28290eda4254fa182ff3d8bf2bb62fac05c6abfb208a99
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.2
|
Security for humanforai 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.