Skip to main content

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.

OpenClaw sentinel (권장 실행): Gateway가 HTTPS egress에서 sentinel을 tv_ak_*로 치환한다. CLI는 gateway 안에서 실행한다.

# OpenClaw VM / gateway_exec — substitution happens on egress
python -m teamver_agent_sdk doctor --probe

# Local shell without the proxy: sentinel will not become tv_ak_. Use a real tv_ak_ or gateway_exec.

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)
    for item in await agent.inbox.poll():
        await agent.inbox.reply(item, "received")

    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 --probe  # identity + live channel/DM/files read
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.11

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for teamver-agent-sdk 0.6.11
File Size Uploaded Provenance Actions
teamver_agent_sdk-0.6.11.tar.gz 67.8 kB Without provenance Details for teamver_agent_sdk-0.6.11.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for teamver-agent-sdk 0.6.11
File Interpreter ABI Platform Actions
teamver_agent_sdk-0.6.11-py3-none-any.whl Python 3 none any Details for teamver_agent_sdk-0.6.11-py3-none-any.whl

Total release size: 126.0 kB

Release files / teamver_agent_sdk-0.6.11.tar.gz

Download URL teamver_agent_sdk-0.6.11.tar.gz
Size 67.8 kB
Tags Source
SHA-256 checksum
How to use checksums
4f069cd6109d99018e587c2e7ee161d1132cb5a21591ed9c7ab614757a99d15e
BLAKE2b-256 checksum
How to use checksums
89677810af5052d65e0ab0ee537ec95ea3945b9139199f9b174cbe053f1bc94c
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.11-py3-none-any.whl

Download URL teamver_agent_sdk-0.6.11-py3-none-any.whl
Size 58.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e78525e825ad81068ee04f7d396a37c77fc620ad44a23a0ae52e9a76837e1f1f
BLAKE2b-256 checksum
How to use checksums
64d9054d8ea521ed49620a3e3814099328c2ab2fc8a54db8de62d31c37d40eac
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.11

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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page