Skip to content
Agentmart
Submit a tool

comms

Sync client communication history (email + Slack) into Obsidian weekly rollup files.

Skill by hamchowderr

IndexedMIT★ 2
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/hamchowderr-comms

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Sync client communication history (email + Slack) into Obsidian weekly rollup files. Use when the user says "sync comms", "weekly comms", "comms for [client]", "backfill comms", "client communication history", "what did [client] say this week", or wants summarised weekly digests of conversations grouped per client and per channel.

Use cases: productivity

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 26, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found
Runs as
Python package

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/comms
  • Your home directory (~)

Tools it pre-approves 5

From allowed-tools in SKILL.md: the agent may use these without asking you each time.

  • Bash(python3:*),
  • Bash(node:*),
  • Bash(slk:*),
  • Bash(claude:*),
  • Bash(obsidian:*)

What's inside

Skill name
comms
Description
Sync client communication history (email + Slack) into Obsidian weekly rollup files. Use when the user says "sync comms", "weekly comms", "comms for [client]", "backfill comms", "client communication history", "what did [client] say this week", or wants summarised weekly digests of conversations grouped per client and per channel.
License
MIT
Allowed tools
Bash(python3:*),, Bash(node:*),, Bash(slk:*),, Bash(claude:*),, Bash(obsidian:*)
Instructions
82 lines in SKILL.md · view on GitHub

Before installing

  • Ships executable scripts
  • Pre-approves some shell commands

Files (2)

  • SKILL.md
  • comms.py · scripts/

SKILL.md (first lines)

# Comms Skill

Pulls messages from each client's configured channels (email, Slack), groups them into threads,
summarises every thread with `claude -p`, and writes one weekly rollup file plus a per-thread
detail file per client into `2. Areas/Comms/<Client>/YYYY-MM/Wn.md`.

The data model lives entirely on existing vault notes:

- **Client note** (`2. Areas/Business/*/Clients/<Client>/<file>.md`) declares its channel sources
  via a `sources:` frontmatter block (`slack_channel`, `slack_workspace_id`, `email_domains`).
- **Contact notes** (`2. Areas/Contacts/<Person>.md`) carry a unified `channels:` array; each entry
  has a `kind:` (slack, email, linkedin, phone, ...). The skill matches inbound message senders
  against these to attribute messages to a person.

Nothing about specific clients, channels, domains, or contact identifiers is hard-coded — everything
is discovered from the user's own vault at runtime. A Slack-only client works the same way as an
email-only client; the skill just iterates whatever the client's `sources:` declares.

## Commands

```bash
# Sync the current week for one client (client name matches a folder under
# 2. Areas/Business/<Business>/Clients/)
python3 {baseDir}/scripts/comms.py sync "<ClientName>"

# Sync a specific week (Wn = ordinal Monday of the month)
python3 {baseDir}/scripts/comms.py sync "<ClientName>" --week 2026-05-W3

# Backfill every week since a given date (inclusive)
python3 {baseDir}/scripts/comms.py backfill "<ClientName>" --since 2026-03-16

# List all clients with their declared sources + contact counts
python3 {baseDir}/scripts/comms.py list

# Show contacts (and the channels each carries) for one client
python3 {baseDir}/scripts/comms.py contacts "<ClientName>"
```

## Output shape

```
2. Areas/Comms/<Client Name>/
  YYYY-MM/
    Wn.md             ← weekly rollup, per-thread summaries + Week roll-up footer
  threads/
    YYYY-MM-DD-<slug>.md  ← raw thread detail (one file per thread)
```

`Wn` is the ordinal Monday of the month (`W1` = first Monday of that month). A week spans
Monday → Sunday and is filed under the month containing its Monday.

The weekly file body is produced in one `claude -p` call per week using the threads + contact
context as input; the frontmatter is generated programmatically. Re-running `sync` for the same
week overwrites the weekly file and refreshes each thread file (idempotent).

## How sender → contact resolution works

For each message pulled, the skill walks every contact note's `channels:` array. A contact matches
when one of their channels matches the sender:

- `kind: email` matches by `address`
- `kind: slack` matches by `user_id`

If no contact matches, the message is still included in the summary but attributed to the raw
sender (e.g. `Tylan Miller` for the vault owner's own outbound messages). That keeps the rollup
honest about who's talking, even before all contacts are catalogued.

## Idempotency / safety

- Re-running `sync` overwrites the weekly + thread files for that week. Manual edits to those
  files will be lost on re-sync — keep editorial notes in a sibling file (e.g. `Wn-notes.md`).
- All vault writes go through `Obsidian.com eval` (per [[CLAUDE.md]]); never edits files directly.
- No API key consumed: summarisation uses `claude -p` which runs on the user's Claude Code OAuth
  subscription. The script refuses to run if `claude` is not on PATH.

## See also

- [[feedback_contacts_channels_additive]] — channels are listed only when present, never as empty slots
- [[feedback_braynee_no_user_specific_data]] — skill ships logic, user supplies data
- [[feedback_never_assume_api_billing]] — `claude -p` only, never `ANTHROPIC_API_KEY`

From hamchowderr/braynee, MIT.

More from hamchowderr/braynee

Signals

Stars
2
Forks
0
Open issues
1
Last commit (this folder)
Sep 21, 2026 (1 month ago)
Last release
Oct 12, 2026 (16 days ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from hamchowderr

Cite this page

comms skill. Agent Mart. https://agentmart.dev/skills/hamchowderr-comms (last updated 2026-10-24)