Chisle
The coding-agent plugin that bills 52% of a bare model across 20 live tasks. Terse persona + tool-output compressor + context diet.
Single-binary Microsoft Teams CLI for AI agents, CI/CD pipelines, and developers. JSON output, deterministic exit codes, and delegated Graph auth.
Developer toolsRustGitHub @osodevopsOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
A fast, single-binary Microsoft Teams CLI built in Rust — agent-first design, structured JSON output, real-time webhooks, and full Graph API coverage
Loading the full README. The saved excerpt is shown below.
teams — Microsoft Teams CLI for AI Agents and Developers (Rust)
A fast, single-binary CLI that gives AI agents and automation full access to Microsoft Teams via the Microsoft Graph API.
Every command returns structured JSON with deterministic exit codes — designed from the ground up for autonomous agents (Claude, GPT, custom LLM agents), CI/CD pipelines, and developer scripts. Not a chatbot framework. A tool that agents wield.Read the full README ↗A fast, single-binary CLI that gives AI agents and automation full access to Microsoft Teams via the Microsoft Graph API.
Every command returns structured JSON with deterministic exit codes — designed from the ground up for autonomous agents (Claude, GPT, custom LLM agents), CI/CD pipelines, and developer scripts. Not a chatbot framework. A tool that agents wield.
Website: msteamscli.com
AI agents need to operate in Microsoft Teams — reading messages, posting updates, managing channels, reacting to events — but there is no comprehensive CLI for Teams. Existing MCP servers cover only a fraction of the Graph API. Bot Framework SDKs assume a conversational UI inside Teams, not an external agent calling in.
teams-cli fills this gap: a complete, headless, machine-readable interface to Teams that any agent can call as a subprocess.
Every command, when piped or called programmatically, returns a JSON envelope:
{
"success": true,
"data": { "id": "...", "displayName": "Engineering", "..." : "..." },
"metadata": {
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"timestamp": "2026-03-15T00:00:00Z",
"duration_ms": 123
}
}
Paged list results add metadata.has_more (more pages exist) and, when true, metadata.next_link (Graph's @odata.nextLink). With --all-pages, has_more is false. Human and plain output note truncation on stderr.
On failure:
{
"success": false,
"error": {
"code": "AUTH_TOKEN_EXPIRED",
"message": "Access token has expired. Run `teams auth login` to re-authenticate."
}
}
Exit codes map directly to error categories — agents can branch on $? without parsing:
| Code | Meaning | Agent Action |
|---|---|---|
| 0 | Success | Parse .data from stdout |
| 1 | General error | Log and investigate |
| 2 | Invalid arguments | Fix command syntax |
| 3 | Authentication error | Re-authenticate |
| 4 | Permission denied (403) | Escalate or skip |
| 5 | Resource not found (404) | Handle missing resource |
| 6 | Rate limited (429) | Back off and retry |
| 7 | Network error / timeout | Retry with backoff |
| 8 | Server error (5xx) | Retry with backoff |
| 10 | Configuration error | Check config/env vars |
A closed stdout pipe (e.g. teams team list | head -1) is treated as normal early termination: exit 0, nothing on stderr. Errors that occur while the pipe is already closed still return their real exit code.
Output auto-detection: When stdout is a TTY, output defaults to human-readable tables. When piped (which is how agents call it), output defaults to JSON. Override with --output json|human|plain.
# Homebrew (macOS/Linux)
brew install osodevops/tap/teams-cli
# Scoop (Windows)
scoop bucket add osodevops https://github.com/osodevops/scoop-bucket
scoop install teams
# Pre-built binaries — download from GitHub Releases
# https://github.com/osodevops/ms-teams-cli/releases
# From source
cargo install --git https://github.com/osodevops/ms-teams-cli
Install the agent skills so Claude, Codex and other AI agents know how to drive teams: sign-in and output contract, messaging, team administration, and automation.
npx skills add osodevops/ms-teams-cli
npx skills add osodevops/ms-teams-cli --skill teams-cli-messaging
| Skill | Use it for |
|---|---|
teams-cli-setup | Install, sign in, profiles, CI auth, JSON envelope and exit codes |
teams-cli-messaging | Read, send and reply in chats and channels, attachments, files |
teams-cli-admin | Teams, channels, members, tags, apps and tabs |
teams-cli-automation | Presence, meetings, notifications, webhooks and polling |
docs/man/teams.1, docs/man/teams-config.5, docs/man/teams-auth.7, docs/man/teams-agent-contract.7, docs/man/teams-examples.7# 1. Sign in with the built-in OSO public client app
teams auth login --device-code
# 2. Check auth, tenant, token type, and consent URL
teams auth doctor --output json
# 3. Read Teams context
teams user me --output json
teams chat list --page-size 10 --output json
teams team list --output json
# 4. Send only to a known safe test chat or channel
teams message send --chat <chat-id> --body "teams-cli smoke test" --output json
Use a dedicated test target for first writes. Do not test against client or production chats.
The CLI has OSO's multi-tenant delegated public client app baked in:
Client ID: fba1b5d0-fdd0-4fe2-9729-9ccdc38f9595
Default authority: organizations
Loopback redirect URI: http://localhost/callback (any port)
Customer admin consent:
teams auth consent-url --tenant-id <customer-tenant-id-or-domain> --output json
This prints a Microsoft identity platform v2 admin-consent URL with an explicit
scope parameter for the CLI's default delegated Graph scopes.
This is the beginning of the README. Read the rest at the original. Read the full README ↗