Skip to main content

teamver-agent-sdk

Official Teamver Agent SDK for agent runtimes (e.g. OpenClaw, Hermes).

변경 이력

일시 (KST) 변경 내용
2026-09-21 16:15 0.6.15: inbox 출고 시도/성공 커서 · doctor deliver_ok · adapter tools-rpc
2026-09-21 15:50 0.6.14: inbox 툴 기본 숨김 · webhook timestamp skew · from_token staging · echo queue skip
2026-09-21 14:40 0.6.13: 채널 SSOT plugin/hostd · inbox opt-in · CIS HMAC · agent upload · staging env

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-… or O-…) 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.

Channel/DM auto-reply is not this SDK. Product OpenClaw uses the channel plugin + hostd turn (docs_specs/39). SDK can still read/write channel messages as a tool. The automatic conversation loop is not rewritten here — 설명: docs_reference/agent/03. inbox.poll / inbox.reply / adapter :8788 are opt-in for external workers. Set TEAMVER_INBOX_REPLY=1 only when you intentionally run a second loop. Product default is off so hostd and SDK cannot double-answer.

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_ENV staging → stg-api.teamver.com (and staging mail/agent hosts) production
TEAMVER_MAIN_API_BASE Main API host (no /api). Wins over TEAMVER_ENV https://api.teamver.com
TEAMVER_INBOX_REPLY Enable inbox.reply (external worker). Product default 0 0
TEAMVER_WEBHOOK_SECRET W4 inbox HMAC. Alias: TEAMVER_CHANNEL_INGRESS_SECRET (tv_cis_) —
TEAMVER_WEBHOOK_MAX_SKEW_SECONDS Reject stale HMAC timestamps. 0 disables 600
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-… / O-…) 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: TEAMVER_ENV=staging or set TEAMVER_MAIN_API_BASE=https://stg-api.teamver.com. Do not use the site host https://stg.teamver.com as an API base.

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)
    # Channel auto-receive is plugin + hostd. Do not enable inbox.reply here.

    adapter = AgentToolAdapter(agent)
    await adapter.dispatch("teamver_whoami", {})
    await adapter.dispatch("teamver_drive_list_files", {})

    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.

Opt-in inbox worker (TEAMVER_INBOX_REPLY=1)

Not the product OpenClaw path. Use only for an external worker. HMAC accepts TEAMVER_WEBHOOK_SECRET or TEAMVER_CHANNEL_INGRESS_SECRET.

# export TEAMVER_INBOX_REPLY=1
for item in await agent.inbox.poll(store=store):
    await agent.inbox.reply(item, "received", store=store)
# result = await agent.inbox.handle_webhook(raw_body, headers, store=store)
ID What Channel message created?
W1 Event webhook (Access UI) No — notification only
W3 Plugin /teamver/webhook loopback + tv_cis_ Yes, via hostd/plugin
W4 SDK handle_webhook / adapter :8788 Only if inbox.reply is on

Do not bind adapter :8788 on 0.0.0.0 in a product guest.

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.15

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.15
File Size Uploaded Provenance Actions
teamver_agent_sdk-0.6.15.tar.gz 84.0 kB Without provenance Details for teamver_agent_sdk-0.6.15.tar.gz

Built distribution (wheel)

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

Total release size: 151.7 kB

Release files / teamver_agent_sdk-0.6.15.tar.gz

Download URL teamver_agent_sdk-0.6.15.tar.gz
Size 84.0 kB
Tags Source
SHA-256 checksum
How to use checksums
b204d2c62468dc34583ace1e3ea393e50bac20bc6a99541879b5d0171d62203b
BLAKE2b-256 checksum
How to use checksums
0a1726b8e1545a784a0192a648ba0524abde8e9996353373496e2e51249d8c3c
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.15-py3-none-any.whl

Download URL teamver_agent_sdk-0.6.15-py3-none-any.whl
Size 67.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1e09d3185c16bf60213e9ccd756a607a53d7be6788cf76a318130cce4eaa14e2
BLAKE2b-256 checksum
How to use checksums
cc99f795388f0369ba7586e7b2c52a70d39ce4cc8868c3007ee6933ff841c9e5
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.15

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