[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-80188":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":15,"stars30d":16,"stars90d":14,"forks30d":14,"starsTrendScore":17,"compositeScore":18,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":19,"hasPages":19,"topics":21,"createdAt":9,"pushedAt":9,"updatedAt":22,"readmeContent":23,"aiSummary":24,"trendingCount":14,"starSnapshotCount":14,"syncStatus":17,"lastSyncTime":25,"discoverSource":26},80188,"synthteam","nickwinder\u002Fsynthteam","nickwinder","Consult distilled personas of colleagues — build them from Slack history, get one colleague's take, or convene a deliberating panel. A plugin for Claude Code and Codex.",null,"JavaScript",96,10,84,0,12,13,2,3.12,false,"main",[],"2026-06-12 02:03:59","# synthteam (plugin)\n\nA 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.\n\nPersonas are simulations, not the real people. Verify anything load-bearing with the real humans before acting on it.\n\n## Skills\n\nThe 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.\n\n### distill-slack-persona — build a persona\n\nTurns 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](#building-a-persona-with-distill-slack-persona) below.\n\n### ask-colleague — one person's take\n\nConsults 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.\n\n> Invoke it: `ask alex about \u003Cidea>`, `what would alex think of \u003Cplan>`, or `\u002Fask-colleague alex …`\n\n### ask-team — a panel that deliberates\n\nConvenes 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.\n\n> Invoke it: `ask the team about \u003Cquestion>`, `run this past everyone`, or `\u002Fask-team …`\n\n## What it looks like\n\n```\n> ask alex about dropping the offline cache\n\nAlex (Staff Engineer) — likely take:\n\n  I'd push back. We added that cache after the Q3 outage when the\n  upstream API flaked for 40 minutes — dropping it reintroduces a\n  single point of failure. If the goal is bundle size, I'd argue\n  for shrinking the cache, not removing it.\n\n  ⚠ Extrapolating: the persona doc has no signal on the *current*\n  reliability numbers — check those with the real Alex.\n```\n\n## When to use this\n\n- **Reach for `ask-colleague`** to pressure-test a plan, anticipate one person's pushback, or surface the objection you'd dodge by not asking.\n- **Reach for `ask-team`** when one perspective isn't enough — cross-functional gut-checks, or decisions that genuinely split a team.\n- **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.\n\n## Shared data directory\n\nPersonas and raw Slack dumps live under `~\u002F.synthteam\u002F` — 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):\n\n```\n~\u002F.synthteam\u002F\n├── assets\u002F\u003Cslug>\u002F          # raw Slack dumps — local-only, never committed\n│   ├── raw-messages.jsonl\n│   └── metadata.json\n└── personas\u002F\u003Cslug>.md      # the distilled persona docs the ask-* skills read\n```\n\n## Repo layout\n\n```\nsynthteam\u002F\n├── .claude-plugin\u002F\n│   └── plugin.json               # plugin manifest\n├── .env.example                  # SLACK_USER_TOKEN for the dump script\n├── README.md                     # this file\n├── COMPLIANCE.md                  # GDPR \u002F works-council \u002F privacy-law notes\n└── skills\u002F\n    ├── distill-slack-persona\u002F       # ingestion: dump Slack + distill personas\n    │   ├── SKILL.md\n    │   ├── README.md\n    │   ├── package.json          # node deps for the dump script\n    │   ├── scripts\u002F              # Slack ingestion\n    │   └── references\u002F           # distillation-facets.md — the pipeline spec\n    ├── ask-colleague\u002F            # consume: single-persona take\n    │   ├── SKILL.md\n    │   └── README.md\n    └── ask-team\u002F                 # consume: multi-persona deliberation panel\n        ├── SKILL.md\n        └── README.md\n```\n\n## Installation\n\nThis repo ships as a plugin marketplace for both Claude Code and Codex. Add the marketplace, then install the plugin from it.\n\n### Claude Code\n\nInside Claude Code, from GitHub:\n\n```\n\u002Fplugin marketplace add nickwinder\u002Fsynthteam\n\u002Fplugin install synthteam@synthteam-marketplace\n```\n\nOr from a local clone (point at the repo directory):\n\n```\n\u002Fplugin marketplace add \u002Fabsolute\u002Fpath\u002Fto\u002Fsynthteam\n\u002Fplugin install synthteam@synthteam-marketplace\n```\n\n### Codex\n\nRegister the marketplace from the terminal, from GitHub or a local clone:\n\n```\ncodex plugin marketplace add nickwinder\u002Fsynthteam\n# or: codex plugin marketplace add \u002Fabsolute\u002Fpath\u002Fto\u002Fsynthteam\n```\n\nThen start `codex`, open the `\u002Fplugins` menu, and install **synthteam**. Restart Codex to pick up the new skills.\n\n> `codex plugin marketplace add` only *registers* the marketplace — the `\u002Fplugins` menu performs the actual install.\n\n## Building a persona with distill-slack-persona\n\nBefore `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:\n\n```\ndistill alex's persona\n```\n\nYour agent triggers the `distill-slack-persona` skill and handles the whole flow for you:\n\n1. **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.\n2. **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 `~\u002F.synthteam\u002Fassets\u002F\u003Cslug>\u002F`. DMs are never touched, and it can't see anything your token can't.\n3. **Distill** — it runs a multi-agent distillation that turns the raw messages into a structured persona doc at `~\u002F.synthteam\u002Fpersonas\u002F\u003Cslug>.md`.\n4. **Review** — it spot-checks the result and tells you what it found so you can sanity-check before relying on it.\n\nTo **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\"*.\n\nOnce 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](skills\u002Fdistill-slack-persona\u002FREADME.md).\n\n## Privacy\n\nRaw Slack data and persona docs stay on your machine in `~\u002F.synthteam\u002F` — 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](skills\u002Fdistill-slack-persona\u002FREADME.md#privacy) for the full notes, and [Legal & compliance](#legal--compliance) below for the regulatory side (GDPR, works councils, employee-privacy law).\n\n## Legal & compliance\n\nsynthteam profiles **real, identifiable people** from their workplace\ncommunication. Depending on where you and your colleagues are based, that may be\nregulated by data-protection, privacy, or employment law.\n\n**It is on you to understand and comply with the law that applies to you.** See\n[COMPLIANCE.md](COMPLIANCE.md) — which links to some relevant acts for\ninformational purposes only. None of this is legal advice; if you are unsure,\nconsult a qualified lawyer.\n\n## Limitations\n\n- Personas are built from **public Slack history only** — they miss decisions made in DMs, meetings, docs, or code review.\n- They reflect a **point in time**. A persona distilled three months ago won't know about last week's reorg. Refresh monthly.\n- `ask-colleague` and `ask-team` **extrapolate** when the doc is thin, and say so — but extrapolation is still a guess. Treat flagged sections with extra skepticism.\n- Output is a *simulation of reasoning*, not a quote. Never attribute a persona's take to the real person.\n\n## Troubleshooting\n\n- **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.\n- **Persona feels outdated** — re-run `refresh \u003Cname>'s persona`; optionally widen the window (e.g. *\"from the last 6 months\"*).\n- **`ask-colleague` says it's extrapolating a lot** — the persona doc is thin on that topic. Either accept the lower confidence or distill a longer time window.\n- **A colleague isn't available to `ask-*`** — no persona doc exists yet. Build one first with `distill \u003Cname>'s persona`.\n\n## License\n\nMIT — see [marketplace.json](.claude-plugin\u002Fmarketplace.json) for plugin metadata.\n","synthteam 是一个用于咨询同事虚拟人格的插件，通过分析 Slack 历史记录来构建这些虚拟人格。其核心功能包括将 Slack 消息转化为结构化的个人文档（distill-slack-persona），以及基于这些文档进行单人视角咨询（ask-colleague）或团队讨论模拟（ask-team）。技术上，该项目采用多代理流水线处理信息，并且强调输出内容是基于数据提炼而非模仿个人风格。适用于需要从他人角度预判反馈、测试决策或计划的场景中使用，尤其在希望避免直接打扰实际人员时更为有用。","2026-06-11 03:59:35","CREATED_QUERY"]