teamver-agent-sdk
Official Teamver Agent SDK for agent runtimes (e.g. OpenClaw, Hermes).
This directory is the source of truth. Publish to PyPI; do not fork it into ns-teamver-agents/packages.
One facade (TeamverAgent + AgentToolAdapter) for:
- Channels — list / post / read / react
- DM — threads open / read / post
- Drive — list / download / upload (presigned)
- Mail — via
teamver-mail-agent - Jobs · heartbeat · SSE events
- agent tools —
adapter.list_tools()/adapter.dispatch(...)
Install
pip install teamver-agent-sdk
python -m teamver_agent_sdk required-env # what a human must provide
python -m teamver_agent_sdk channels # ACL list (SDK fallbacks only)
python -m teamver_agent_sdk files # ACL shared-drive files (alias: drive-list)
python -m teamver_agent_sdk dm # agent DM threads (alias: dm-list)
TEAMVER_AGENT_TOKEN may be tv_ak_* or an OpenClaw oc-sent-v….end sentinel.
Pulls in teamver-mail-agent and teamver-sdk-core. Python ≥ 3.11.
What a human must provide
Only TEAMVER_AGENT_TOKEN (tv_ak_*). Workspace id (W-…) and agent id (AG2-…) are discovered via GET /api/v2/ai-agents/me. Do not ask someone to copy those from the Teamver web UI.
GET /api/v2/ai-agents/me response example
Main BE (not Agents). 200:
{
"workspace_id": "W-1a2b3c",
"agent_id": "AG2-9f8e7d",
"name": "한돌",
"handle": "handol",
"scopes": ["messages:read", "messages:write", "channels:read"],
"channels": {
"items": [
{"channel_id": "CH-aaa111", "name": "한돌ch2", "visibility": "public"},
{"channel_id": "CH-bbb222", "name": "한돌ch1", "visibility": "public"}
],
"total": 2
},
"drives": {
"items": [
{
"shared_drive_id": "SD-ccc333",
"name": "한돌 Drive",
"can_read": true,
"can_write": true
}
],
"total": 1
},
"dm": {"applied_enabled": true},
"report_channel_id": "CH-bbb222"
}
401: { "error": { "code": "invalid_token", "message": "Missing or invalid agent token", "retryable": false, "request_id": "req_…", "details": {} } }
Public contract: teamver-sdk-docs api-reference.
| env | purpose | default |
|---|---|---|
TEAMVER_AGENT_TOKEN |
channel/DM/Drive/jobs grant (tv_ak_*) |
required |
TEAMVER_MAIN_API_BASE |
Main API host (no /api) |
https://api.teamver.com |
TEAMVER_MAIL_AGENT_TOKEN |
mail agent token (tv_agent_*) |
— (mail only) |
TEAMVER_AGENT_API_BASE |
Agents BE host (jobs / heartbeat) | https://agent-api.teamver.com |
TEAMVER_AGENTS_API_BASE |
alias of the above (OpenClaw openclaw.env) |
used if TEAMVER_AGENT_API_BASE is unset |
TEAMVER_WORKSPACE_ID |
workspace id (W-…) |
optional — auto from token |
TEAMVER_AGENT_ID |
agent id (AG2-…) |
optional — auto from token |
TEAMVER_CONTROL_PLANE_TOKEN |
Agents whoami fallback (tv_cp_*) |
— (identity fallback only) |
Staging: set TEAMVER_MAIN_API_BASE to the staging Main host.
Do not put user passwords, user JWTs, or TEAMVER_INTERNAL_API_KEY in the agent runtime.
Quick start
import asyncio
from teamver_agent_sdk import TeamverAgent, AgentToolAdapter
async def main():
agent = await TeamverAgent.connect() # token → /me → workspace + agent id
who = await agent.whoami()
channels = await agent.channel.list_channels() # ACL accessible-channels
await agent.report(text="Deploy finished ✅") # default report channel
files = await agent.drive.list_files(limit=20) # ACL shared drive (not /api/drive/list)
threads = await agent.dm.list_threads(limit=10)
adapter = AgentToolAdapter(agent)
await adapter.dispatch("teamver_whoami", {})
await agent.aclose()
asyncio.run(main())
TeamverAgent() still works when ids are already in env. Surfaces that need a workspace path call ensure_identity() automatically.
CLI
python -m teamver_agent_sdk required-env # print human prompt (no network)
python -m teamver_agent_sdk whoami # GET /ai-agents/me
python -m teamver_agent_sdk doctor # identity + channel/drive summary
python -m teamver_agent_sdk channels # ACL channels
python -m teamver_agent_sdk files # ACL shared-drive files
Documentation
Public docs: github.com/NeuralStudioKr/teamver-sdk-docs/tree/main/agent-sdk
License
MIT — see LICENSE.
Metadata
Release files for teamver-agent-sdk 0.6.10
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 |
|---|---|---|---|---|
| teamver_agent_sdk-0.6.10.tar.gz | 60.6 kB | Without provenance | Details for teamver_agent_sdk-0.6.10.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| teamver_agent_sdk-0.6.10-py3-none-any.whl | Python 3 | none | any | Details for teamver_agent_sdk-0.6.10-py3-none-any.whl |
Total release size: 112.8 kB
Release files / teamver_agent_sdk-0.6.10.tar.gz
| Download URL | teamver_agent_sdk-0.6.10.tar.gz |
|---|---|
| Size | 60.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
16913227c4668a6cad4da6976d8c96d992b0aa3f3d9c7d8a646c96e8469ad86d
|
|
BLAKE2b-256 checksum How to use checksums |
5b4999d775c83b2a555e18d89856828898eb226807083f110bcc2122fd4f4c9c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.9
|
Release files / teamver_agent_sdk-0.6.10-py3-none-any.whl
| Download URL | teamver_agent_sdk-0.6.10-py3-none-any.whl |
|---|---|
| Size | 52.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cf1bbdaf906aeda4b5e41942998749fa632dc6766fd408edf64c96acda673524
|
|
BLAKE2b-256 checksum How to use checksums |
0b401ba830c55386caea01969b59acaf916878c66b351f6503c7f93090258030
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.9
|
Security for teamver-agent-sdk 0.6.10
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.