teams

teams is a skill for Claude Code from gw-space/claude-skillbelt. It costs 193 tokens per session (1,931 once invoked), scanned B, original, MIT.

A tool for searching and sending messages in Microsoft Teams chats through an existing logged-in web session.

In plain words
What is it for?
Use it to search Teams discussions, review recent or missed messages, extract decisions and tasks, identify who said something, or send a message or reply.
Why use it?
It helps you catch up on conversations and find decisions or action items without reading every message or requiring Microsoft Graph administrator approval.

Skill for Claude Code

Written for Claude Code: ${CLAUDE_PLUGIN_ROOT} variable. Also seen: reads .claude/ paths.

Runs only inside its plugin — its command needs a path that Claude Code sets for a plugin’s own hooks and for nothing else. Install the plugin, not this.

Part of the skillbelt plugin — 3 skills shipped together

Good fit Use it to search Teams discussions, review recent or missed messages, extract decisions and tasks, identify who said something, or send a message or reply.

Compare 6 skills from other repositories ↓
Install

Getting it into your agent

This one installs as part of its plugin. Adding the marketplace and installing the plugin brings it with everything else the plugin ships.

Claude Code
/plugin marketplace add gw-space/claude-skillbelt
Claude Code
/plugin install skillbelt

Made for: Claude Code.

Or install skillbelt, the plugin that ships this one along with the rest of its 3 skills.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for teams

README.md
[![agentmods](https://agentmods.dev/badge/skills/gw-space/claude-skillbelt/teams/github.svg)](https://agentmods.dev/skills/gw-space/claude-skillbelt/teams)
Your own site
<a href="https://agentmods.dev/skills/gw-space/claude-skillbelt/teams"><img src="https://agentmods.dev/badge/skills/gw-space/claude-skillbelt/teams/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for teams

Your own site · 80×15
<a href="https://agentmods.dev/skills/gw-space/claude-skillbelt/teams"><img src="https://agentmods.dev/badge/skills/gw-space/claude-skillbelt/teams.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 193 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,931 The whole file, excluding the scripts and references it only reads on demand.
Security scan B 1 finding. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00193 $0.01931
Opus 5 $0.00097 $0.00966
Sonnet 5 $0.00039 $0.00386
Haiku 4.5 $0.00019 $0.00193

Measured 10d ago against content hash 5020723c4dd4, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-10, from the pricing page.

Security

Grade B, and why

teams scanned grade B with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 10d ago.

The scan reads SKILL.md. This mod also ships 2 executable files (scripts/page-api.js, scripts/teams-export.mjs), listed below but not scanned — reading those needs a real analyzer, not pattern matching.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Reads agent configuration directoriesmediumAgent snooping

.claude/, .codex/, .gemini/ hold keys, settings and other credentials a mod has no legitimate need for.

`~/.claude/settings.json` 의 `permissions.allow` 에 아래를 추가하도록 안내한다:
plugins/skillbelt/skills/teams/SKILL.md · 126 lines

How it starts

The opening of the file, as written. The whole thing — 126 lines — stays where its author put it; the contents beside it link to each section on GitHub.

teams

Teams 대화를 근거로 답하고, 사용자가 시키면 메시지를 보낸다.

Graph API 를 쓰지 않는다. 대부분의 조직 테넌트가 사용자 동의(user consent)를 막아 Chat.Read 조차 관리자 승인을 요구하기 때문이다. 대신 이미 로그인된 Teams 웹 세션의 토큰을 재사용해 채팅 서비스를 직접 호출한다.

TX="${CLAUDE_PLUGIN_ROOT}/skills/teams/scripts/teams-export.mjs"

이하 모든 예시는 node "$TX" <명령> 형태다. 데이터(로그인 세션·수집본)는 ~/.teams-export/ 에 저장된다 — 플러그인이 업데이트돼도 남는다.

최초 1회 준비

사용자가 아직 안 했다면 이 순서로 안내한다. login 은 내가 대신 못 한다 (MFA 대화형 인증) — 사용자가 직접 실행해야 한다.

node "$TX" setup     # 데이터 디렉터리 + playwright-core 설치
node "$TX" login     # 창이 열리면 회사 계정으로 로그인

불변 규칙

  • out/*.json 을 통째로 Read 하지 말 것. 방 하나가 수천 건일 수 있어 컨텍스트가 터진다. 반드시 find / recent / stats 로 좁혀서 필요한 대목만 본다.
  • 요약은 대화창에만. 사용자가 "파일로 남겨줘" 라고 할 때만 저장한다.
  • 수집 갱신은 묻지 않고 실행. 단 세션당 1회로 제한한다(절차 1).
  • 없는 내용을 지어내지 않는다. 검색에 없으면 "수집 범위에 없습니다" 라고 말하고 stats 의 수집 기간을 근거로 제시한다.

절차

1. 신선도 확인 → 필요하면 갱신 (세션 첫 Teams 질문에서만)

node "$TX" stats

첫 줄이 마지막 수집: ... (N분/시간/일 전).

상태 조치
1시간 이내 갱신 없이 바로 조회
1시간 초과 node "$TX" export --all 실행 후 조회 (묻지 않는다)
없음 export --all 실행. 첫 수집은 오래 걸린다고 미리 알린다

증분이라 2회차부터는 금방 끝난다. 같은 세션에서 두 번 이상 돌리지 않는다.

2. 질문 유형에 맞는 조회 (네트워크 없음, 즉시)

질문 명령
"놓친 것 / 요 며칠 뭐 있었어" recent --days 3
"OO 관련 논의 찾아줘" find "OO" --context 2
"그 방에서 무슨 얘기" find "키워드" --room "방이름"
"누가 언제 그 말 했지" find "키워드" --from "이름"
"지난주 ~" find "키워드" --since 2026-07-20 --until 2026-07-27

출력이 많으면 --limit, --room, 기간으로 좁힌다. 한 번에 안 잡히면 검색어를 바꿔 두세 번 시도한다(동의어·영문 표기·약어).

3. 답변

  • 근거를 붙인다: [방이름] 2026-07-22 홍길동: "..." 형식으로 인용.
  • 결정사항·액션아이템은 누가·무엇을·언제까지 형태로. 담당자가 불명확하면 불명확하다고 쓴다(추정 금지).
  • 놓친 것 따라잡기는 방별로 묶고, 사용자 언급·질문·답장 필요한 건을 앞에 둔다.

발송

사용자가 "OO한테 ~라고 보내줘" 라고 하면 내가 직접 보낸다. 명령어를 알려주고 사용자더러 치라고 하지 않는다 — 그게 이 도구를 만든 이유다.

node "$TX" send "<방이름|번호|self>" "내용" --yes
  • 대상은 방 이름 부분일치이고 최근순 첫 번째가 선택된다. 번호는 list 순서라 바뀔 수 있으니 이름 매칭을 우선한다.
  • --yes 없이 돌리면 미리보기만 된다. 매칭이 불확실하면 먼저 미리보기로 확인한다.
  • 먼저 확인할 것: 대상이 애매하게 매칭될 때, 내용을 내가 작성·의역했을 때, 여러 방에 보낼 때. 사용자가 문구를 그대로 준 경우엔 되묻지 말고 바로 보낸다.
  • 보낸 뒤 실제 전송된 대상과 문구를 그대로 보고한다.
  • 되돌릴 수 없다 — 삭제해도 수신 알림은 이미 나간다. 잘못 보냈으면 숨기지 말고 즉시 알린다.

Read the full file on GitHub · 126 lines

Files

What ships with it

2 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 10d ago First seen · 126 lines · 193 tokens per session scan B 5020723c4dd4

Subscribe to this mod's changes

teams is a skill published in the GitHub repository gw-space/claude-skillbelt (2 stars, last pushed 1mo ago), licensed MIT. It adds 193 tokens to every session and 1,931 once invoked, about $0.0010 per session on Opus 5. A static security scan graded it B with 1 finding (reads agent configuration directories). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other skills, from other repositories

alive:system-cleanup

The world feels messy. Stale tasks, orphan folders, v2 remnants, unsaved sessions — entropy is accumulating and needs to be addressed before it compounds. Scans across all walnuts, then surfaces issues one at a time.

alivecontext/alive · 52 tokens

alive:world

The human doesn't know what to work on, or wants to see everything at once. They need the big picture — what's active, what's stale, what needs attention. Renders a live world view grouped by ALIVE domain, then routes to open, tidy, find, history, or map.

alivecontext/alive · 63 tokens

alive:bundle

Create, share, and graduate bundles — the unit of focused work within a walnut. Manages the full bundle lifecycle from creation through sharing to graduation.

alivecontext/alive · 34 tokens

alive:settings

The human wants to adjust how the system behaves — not what it contains, but how it feels. Voice, rhythm, preferences, walnut-level config, full permissions toggleable, named squirrel config, action logging toggle. The system adapting to them. Routes to preferences.yaml or walnut config.yaml depending on scope. For…

alivecontext/alive · 84 tokens

cco-budget

Configure token budget limits, auto-compact settings, and view current budget status (model-aware — Claude 5 lineup, Opus 5 default fallback, full 1M context at standard price).

egorfedorov/claude-context-optimizer · 43 tokens

alive-cleanup

System maintenance -- stale tasks, orphan folders, unsaved sessions, world health check.

alivecontext/alive · 20 tokens