A plugin for consulting distilled personas of colleagues — locally, without involving them. Useful for pressure-testing plans, anticipating pushback, or stress-testing decisions through someone else's lens.
Personas are simulations, not the real people. Verify anything load-bearing with the real humans before acting on it.
The plugin has three skills that split into an ingestion side and a consumption side. distill-slack-persona produces persona docs; ask-colleague and ask-team consume them. Every persona that exists is automatically available to both consuming skills.
Turns a colleague's Slack history into a structured persona doc: a natural-language description of what they know, what they believe, and how they decide. It dumps their channel messages with a script, then runs a multi-agent pipeline that distills the raw messages into five facets (strategic priorities, specific opinions, decision-making patterns, domain knowledge, and operational context). The doc captures substance, not voice — no verbatim text, no style mimicry. This is the only skill that writes personas; the others just read them. See how to use it below.
Consults a single distilled persona for their likely take, critique, or pushback on an idea — locally, without involving the real person. Use it to pressure-test a plan, anticipate a reaction, or surface the objection you might dodge by not asking. It answers in first-person as that person would reason, grounded in their persona doc, and flags when it's extrapolating beyond what the doc covers.
Invoke it:
ask alex about <idea>,what would alex think of <plan>, or/ask-colleague alex …
Convenes a simulated panel of all your personas to deliberate a question together. Each persona becomes its own research agent, forms a position, then reacts to everyone else's positions across multiple rounds until the panel converges. The output maps where the team agrees, where it genuinely splits and why, and what only the real humans can settle. More expensive than ask-colleague (~8–12 subagent runs) — reach for it when one perspective isn't enough.
Invoke it:
ask the team about <question>,run this past everyone, or/ask-team …
> ask alex about dropping the offline cache
Alex (Staff Engineer) — likely take:
I'd push back. We added that cache after the Q3 outage when the
upstream API flaked for 40 minutes — dropping it reintroduces a
single point of failure. If the goal is bundle size, I'd argue
for shrinking the cache, not removing it.
⚠ Extrapolating: the persona doc has no signal on the *current*
reliability numbers — check those with the real Alex.
- Reach for
ask-colleagueto pressure-test a plan, anticipate one person's pushback, or surface the objection you'd dodge by not asking. - Reach for
ask-teamwhen one perspective isn't enough — cross-functional gut-checks, or decisions that genuinely split a team. - Don't treat persona output as a sign-off. Personas are simulations built from past Slack history; they miss recent context and anything said outside Slack. Verify load-bearing conclusions with the real humans.
Personas and raw Slack dumps live under ~/.synthteam/ — deliberately outside the plugin so they survive reinstalls and are reachable by whichever skills are installed (override the location with the SYNTHTEAM_HOME env var):
~/.synthteam/
├── assets/<slug>/ # raw Slack dumps — local-only, never committed
│ ├── raw-messages.jsonl
│ └── metadata.json
└── personas/<slug>.md # the distilled persona docs the ask-* skills read
synthteam/
├── .claude-plugin/
│ └── plugin.json # plugin manifest
├── .env.example # SLACK_USER_TOKEN for the dump script
├── README.md # this file
├── COMPLIANCE.md # GDPR / works-council / privacy-law notes
└── skills/
├── distill-slack-persona/ # ingestion: dump Slack + distill personas
│ ├── SKILL.md
│ ├── README.md
│ ├── package.json # node deps for the dump script
│ ├── scripts/ # Slack ingestion
│ └── references/ # distillation-facets.md — the pipeline spec
├── ask-colleague/ # consume: single-persona take
│ ├── SKILL.md
│ └── README.md
└── ask-team/ # consume: multi-persona deliberation panel
├── SKILL.md
└── README.md
This repo ships as a plugin marketplace for both Claude Code and Codex. Add the marketplace, then install the plugin from it.
Inside Claude Code, from GitHub:
/plugin marketplace add nickwinder/synthteam
/plugin install synthteam@synthteam-marketplace
Or from a local clone (point at the repo directory):
/plugin marketplace add /absolute/path/to/synthteam
/plugin install synthteam@synthteam-marketplace
Register the marketplace from the terminal, from GitHub or a local clone:
codex plugin marketplace add nickwinder/synthteam
# or: codex plugin marketplace add /absolute/path/to/synthteam
Then start codex, open the /plugins menu, and install synthteam. Restart Codex to pick up the new skills.
codex plugin marketplace addonly registers the marketplace — the/pluginsmenu performs the actual install.
Before ask-colleague or ask-team can do anything, you need at least one persona. You build one entirely by prompting your agent — just ask it to distill a colleague:
distill alex's persona
Your agent triggers the distill-slack-persona skill and handles the whole flow for you:
- Slack access — the first time you build a persona, your agent will prompt you for a Slack user token (
xoxp-…) and walk you through saving it. You provide the token; it does the rest. - Dump — it searches that colleague's public Slack messages over a time window, expands the threads they took part in, and stores the raw data locally under
~/.synthteam/assets/<slug>/. DMs are never touched, and it can't see anything your token can't. - Distill — it runs a multi-agent distillation that turns the raw messages into a structured persona doc at
~/.synthteam/personas/<slug>.md. - Review — it spot-checks the result and tells you what it found so you can sanity-check before relying on it.
To refresh a persona later, prompt it the same way (refresh alex's persona) — monthly is a reasonable cadence. You can also ask for a different time window, e.g. "distill alex's persona from the last 6 months".
Once the persona exists, that colleague is immediately available to both ask-colleague and ask-team — no extra step. Full details in the distill-slack-persona README.
Raw Slack data and persona docs stay on your machine in ~/.synthteam/ — nothing persona-related is committed to this repo. Persona docs describe what someone believes and how they decide; treat them as private notes about colleagues. The dump script cannot exceed the Slack access your token already has, and excludes DMs entirely. See the distill-slack-persona README for the full notes, and Legal & compliance below for the regulatory side (GDPR, works councils, employee-privacy law).
synthteam profiles real, identifiable people from their workplace communication. Depending on where you and your colleagues are based, that may be regulated by data-protection, privacy, or employment law.
It is on you to understand and comply with the law that applies to you. See COMPLIANCE.md — which links to some relevant acts for informational purposes only. None of this is legal advice; if you are unsure, consult a qualified lawyer.
- Personas are built from public Slack history only — they miss decisions made in DMs, meetings, docs, or code review.
- They reflect a point in time. A persona distilled three months ago won't know about last week's reorg. Refresh monthly.
ask-colleagueandask-teamextrapolate when the doc is thin, and say so — but extrapolation is still a guess. Treat flagged sections with extra skepticism.- Output is a simulation of reasoning, not a quote. Never attribute a persona's take to the real person.
- Slack token rejected — the dump needs a user token (
xoxp-…), not a bot token. Re-run the distill prompt and provide a fresh token when asked. - Persona feels outdated — re-run
refresh <name>'s persona; optionally widen the window (e.g. "from the last 6 months"). ask-colleaguesays it's extrapolating a lot — the persona doc is thin on that topic. Either accept the lower confidence or distill a longer time window.- A colleague isn't available to
ask-*— no persona doc exists yet. Build one first withdistill <name>'s persona.
MIT — see marketplace.json for plugin metadata.