bama
BAMA: Build Any Mac App. Agent skills to research, clone, design, build, optimize, and test native macOS apps with Swift and SwiftUI.
A workshop synthesizer for Claude Code. It grills you about the decision first, writes themes where every quote is verbatim and source-tagged, and loops until a script and a second reader can’t knock
SkillsGitHub @bbulmanOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
A workshop synthesizer for Claude Code: grills you first, quotes every source word for word, and checks its own themes before you see them.
Loading the full README.
Read the full README ↗A workshop synthesizer for Claude Code that grills you first, quotes your sources word for word, and checks its own themes before you see them.
Hand it interviews, survey answers, support tickets, field notes, whiteboard photos or a FigJam board. It asks what decision the research is for, then writes themes where every claim carries a verbatim quote and a source tag. Then it loops: a script checks every quote against the sources, a second agent tries to knock each theme down, and the first agent fixes only what they caught, until the synthesis holds up.
/synthesize research/notes/
Site: bbulman.github.io/workshop_synthesizer
This is the basis for the synthesize harness in Workshopr.io: the same grill, quote gate and second-reader loop, open-sourced so you can run it in Claude Code on your own research.
You need Claude Code and Python 3.
git clone https://github.com/bbulman/workshop_synthesizer.git
cd workshop_synthesizer
./install.sh
It copies the two agents to ~/.claude/agents/ and the skill to ~/.claude/skills/synthesize/, keeping any earlier copy as a backup. Open a new Claude Code session (or type /reload-skills), and run /synthesize on a folder of notes.
For whiteboard photos nothing else is needed. For FigJam boards, connect a Figma MCP server; the agents fall back to asking for an export or screenshots when none is connected.
workshop-synthesizer agent reads everything before coding anything, codes each source with equal care, clusters the codes into 3–7 themes, and cuts any theme that could have been written without reading the data. Your hunches become hypotheses it marks supported, contradicted or open. They never count as evidence.check_quotes.py checks again: case, wording and order must match, and a [...] can't stitch two interviews together.research-verifier agent re-reads the sources and tries to prove each theme wrong: recounts support, checks the ratings, and looks for smoothed-over contradictions, missed themes and unused sources.## Theme 2 — Nobody can tell how far through setup they are
**Observed:** All four participants and one ticket say setup gives no sense of how many steps remain.
**Insight:** The friction is uncertainty about the end, not the length of setup.
**Support:** P01, P02, P03, P04, T03 — 4 of 4 participants, plus 1 ticket
**Confidence:** High — every participant, both segments, no counter-evidence
**Evidence:**
> "It wasn't long exactly. It was more that I couldn't tell where the end was." — P03, 05:13
> "Not the length. A few people said they didn't know when it would end." — P04, 08:16
> "How many more steps are in setup? I have done five screens already." — T03
**Counter-evidence:** none observed
**Implication:** Show progress ("step 3 of 5") before cutting steps.
Anything one source says on its own goes under Outliers, and what the data can't answer goes under Gaps, each with a suggested follow-up.
Language models are fluent synthesizers and unreliable ones. They invent or smooth quotes, over-report rare themes, give the first and last sources more weight than the middle, and drift toward whatever the research question seems to want. Four things push back:
This is the beginning of the README. Read the rest at the original. Read the full README ↗