Python SDK for H Company's Agent API: autonomous agents powered by Holo.
Project description
Python SDK for the H Company Agent API. Launch autonomous agents powered by Holo, stream their progress, and steer them mid-run.
Documentation · Get an API key · PyPI · TypeScript SDK · H Company
Installation
pip install hai-agents
Install the optional command-line entry point when you want local tools:
pip install "hai-agents[cli]"
Requires Python 3.10 or newer. Grab an API key at portal.hcompany.ai and export it:
export H_API_KEY=hk-...
Quickstart
Launch the built-in h/web-surfer-holo3-1-35b agent, which ships with its own browser, and describe the task in plain language. run_session polls until the agent finishes and returns the final answer.
from hai_agents import Client, run_session
client = Client() # reads H_API_KEY from the environment
result = run_session(
client,
agent="h/web-surfer-holo3-1-35b",
messages="What are the top 3 stories on Hacker News right now?",
)
print(result.status) # "completed"
print(result.answer)
An AsyncClient mirrors this API for asyncio.
Structured output
Pass a pydantic model as answer_schema and the agent's final answer comes back as a validated instance. The model's JSON schema is sent as the agent's answer_format; the raw wire value stays at result.final_changes.answer.
from pydantic import BaseModel
from hai_agents import Client, run_session
class Job(BaseModel):
title: str
company: str
class Jobs(BaseModel):
jobs: list[Job]
client = Client()
result = run_session(
client,
agent="h/web-surfer-holo3-1-35b",
messages="Find 3 open ML engineering roles in Paris.",
answer_schema=Jobs,
)
for job in result.answer.jobs: # result.answer is a Jobs instance
print(job.title, "@", job.company)
A completed answer that does not match the schema raises AnswerValidationError (the raw payload is on .raw). Sessions that end without completing (cancelled, timed out) return their raw answer untouched.
Custom tools
Expose your own Python functions to the agent: pass them to run_session and the polling loop executes them whenever the agent calls one, posting the result back so the session resumes. Any function with typed parameters and a docstring works; the input schema is derived from the signature.
from hai_agents import Client
def get_weather(city: str) -> str:
"""Get the current weather for a city."""
return f"Sunny in {city}"
client = Client()
result = client.run_session(
agent="h/researcher",
messages="What's the weather in Paris?",
tools=[get_weather],
)
Use @tool(name=..., description=...) to override what the model sees. Tool exceptions are reported to the agent as tool errors rather than crashing the loop. With AsyncClient, tools may be async def. For manual control, client.start_session(tools=[...]) returns a handle whose wait_for_completion() dispatches the same way, and sessions awaiting results report the awaiting_tool_results status with the pending calls.
CLI
The hai-agents[cli] extra installs the hai command:
hai login # browser sign-in; stores a key in ~/.config/hai/.env
hai run "Summarize the H Agent API quickstart"
hai --json run "Reply with exactly: hello" --max-steps 3 --max-time 60
hai sessions list
hai sessions get <session-id>
hai sessions send <session-id> "continue"
hai sessions cancel <session-id>
hai sessions share <session-id>
hai mcp install # wire the hai-agents MCP server into every detected editor
hai mcp install list # see supported clients (Cursor, VS Code, Claude Code, Windsurf)
hai mcp install adds the remote hai-agents MCP server to your local editors and
writes your API key into each client config (in plaintext, so keep them private). On
clients that support agent skills (Cursor, Claude Code) it also symlinks a SKILL.md
that teaches the model how to drive the server.
hai login opens your browser, mints a per-machine API key, and writes it to
~/.config/hai/.env. hai whoami shows the resolved endpoint and whether you are
authenticated; hai logout removes the stored key.
Credentials resolve from flags, then HAI_API_KEY/H_API_KEY in the environment,
then a local .env, then ~/.config/hai/.env. Use --base-url or HAI_API_BASE_URL
to target a specific Agent Platform host.
Documentation
Guides, core concepts, and the full API reference live at hub.hcompany.ai/agent-api, covering streaming progress, steering a live session, regions, structured output, and error handling.
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hai_agents-0.1.8.tar.gz.
File metadata
- Download URL: hai_agents-0.1.8.tar.gz
- Upload date:
- Size: 1.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7c6b77f3fef0f6ff0c811d9ad05b8f3e52866d506fe94dfd2e009debba300e5b
|
|
| MD5 |
d4a98b63496eac5c9af7403854d79786
|
|
| BLAKE2b-256 |
bcdf89a2e0cde3040e2ee5e7f4131aa76176a2ff5b83bdf8e7def6630cd3bc5a
|
Provenance
The following attestation bundles were made for hai_agents-0.1.8.tar.gz:
Publisher:
publish.yml on hcompai/hai-agents-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hai_agents-0.1.8.tar.gz -
Subject digest:
7c6b77f3fef0f6ff0c811d9ad05b8f3e52866d506fe94dfd2e009debba300e5b - Sigstore transparency entry: 1792337253
- Sigstore integration time:
-
Permalink:
hcompai/hai-agents-python@3e2487785f86b180c9cfc4dccaabfc088bd56e75 -
Branch / Tag:
refs/tags/v0.1.8 - Owner: https://github.com/hcompai
-
Access:
internal
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3e2487785f86b180c9cfc4dccaabfc088bd56e75 -
Trigger Event:
release
-
Statement type:
File details
Details for the file hai_agents-0.1.8-py3-none-any.whl.
File metadata
- Download URL: hai_agents-0.1.8-py3-none-any.whl
- Upload date:
- Size: 134.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ce6750cfde3ebcaa7a96b87cf73248aa5b99a7dc1eb6f370451d82d47233e04d
|
|
| MD5 |
81ef0bd81ec0c1c2a5ef617145e84ff0
|
|
| BLAKE2b-256 |
7397cc949ec51fd798d6dee15279746e64361c371299fce8cda79eff082be540
|
Provenance
The following attestation bundles were made for hai_agents-0.1.8-py3-none-any.whl:
Publisher:
publish.yml on hcompai/hai-agents-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hai_agents-0.1.8-py3-none-any.whl -
Subject digest:
ce6750cfde3ebcaa7a96b87cf73248aa5b99a7dc1eb6f370451d82d47233e04d - Sigstore transparency entry: 1792337380
- Sigstore integration time:
-
Permalink:
hcompai/hai-agents-python@3e2487785f86b180c9cfc4dccaabfc088bd56e75 -
Branch / Tag:
refs/tags/v0.1.8 - Owner: https://github.com/hcompai
-
Access:
internal
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3e2487785f86b180c9cfc4dccaabfc088bd56e75 -
Trigger Event:
release
-
Statement type: