@rubytech/create-realagent-code 0.1.254 → 0.1.256
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/plugin-install.test.js +58 -40
- package/dist/index.js +77 -26
- package/dist/lib/plugin-install.js +31 -29
- package/package.json +1 -1
- package/payload/platform/.docs/search-surface-contract.md +58 -0
- package/payload/platform/config/brand-registry.json +8 -0
- package/payload/platform/config/brand.json +2 -2
- package/payload/platform/lib/embed-client/dist/index.d.ts +4 -0
- package/payload/platform/lib/embed-client/dist/index.d.ts.map +1 -0
- package/payload/platform/lib/embed-client/dist/index.js +53 -0
- package/payload/platform/lib/embed-client/dist/index.js.map +1 -0
- package/payload/platform/lib/embed-client/src/index.ts +53 -0
- package/payload/platform/lib/embed-client/tsconfig.json +8 -0
- package/payload/platform/lib/graph-search/dist/index.d.ts +27 -6
- package/payload/platform/lib/graph-search/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/graph-search/dist/index.js +19 -1
- package/payload/platform/lib/graph-search/dist/index.js.map +1 -1
- package/payload/platform/lib/graph-search/src/__tests__/fulltext-coverage.test.ts +12 -0
- package/payload/platform/lib/graph-search/src/index.ts +28 -6
- package/payload/platform/lib/graph-write/dist/index.d.ts +25 -0
- package/payload/platform/lib/graph-write/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/graph-write/dist/index.js +80 -2
- package/payload/platform/lib/graph-write/dist/index.js.map +1 -1
- package/payload/platform/lib/graph-write/src/index.ts +98 -1
- package/payload/platform/neo4j/schema.cypher +126 -0
- package/payload/platform/package.json +2 -2
- package/payload/platform/plugins/.claude-plugin/marketplace.json +5 -0
- package/payload/platform/plugins/admin/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/admin/PLUGIN.md +3 -6
- package/payload/platform/plugins/admin/mcp/dist/index.js +14 -60
- package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/admin/skills/insight/SKILL.md +24 -0
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +84 -31
- package/payload/platform/plugins/docs/PLUGIN.md +1 -0
- package/payload/platform/plugins/docs/references/admin-ui.md +1 -1
- package/payload/platform/plugins/docs/references/deployment.md +18 -5
- package/payload/platform/plugins/docs/references/graph.md +2 -0
- package/payload/platform/plugins/docs/references/internals.md +12 -1
- package/payload/platform/plugins/docs/references/memory-guide.md +4 -0
- package/payload/platform/plugins/docs/references/neo4j.md +2 -2
- package/payload/platform/plugins/docs/references/platform.md +1 -1
- package/payload/platform/plugins/docs/references/plugins-guide.md +1 -1
- package/payload/platform/plugins/docs/references/session-retrospective.md +5 -18
- package/payload/platform/plugins/docs/references/slides.md +31 -0
- package/payload/platform/plugins/docs/references/voice-mirror-guide.md +1 -1
- package/payload/platform/plugins/email/PLUGIN.md +2 -2
- package/payload/platform/plugins/email/mcp/dist/index.js +8 -0
- package/payload/platform/plugins/email/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/attachment-resolve.d.ts +19 -0
- package/payload/platform/plugins/email/mcp/dist/lib/attachment-resolve.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/lib/attachment-resolve.js +64 -0
- package/payload/platform/plugins/email/mcp/dist/lib/attachment-resolve.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/lib/smtp.d.ts +4 -0
- package/payload/platform/plugins/email/mcp/dist/lib/smtp.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/smtp.js +1 -0
- package/payload/platform/plugins/email/mcp/dist/lib/smtp.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-reply.d.ts +1 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-reply.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-reply.js +6 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-reply.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-send.d.ts +1 -0
- package/payload/platform/plugins/email/mcp/dist/tools/email-send.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-send.js +7 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-send.js.map +1 -1
- package/payload/platform/plugins/email/references/email-reference.md +4 -0
- package/payload/platform/plugins/memory/PLUGIN.md +1 -2
- package/payload/platform/plugins/memory/mcp/dist/index.js +6 -44
- package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/document-sectioniser.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/document-sectioniser.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/document-sectioniser.test.js +41 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/document-sectioniser.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/graph-write-embed-net.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/graph-write-embed-net.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/graph-write-embed-net.test.js +90 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/graph-write-embed-net.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/vector-indexed-labels-drift.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/vector-indexed-labels-drift.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/vector-indexed-labels-drift.test.js +27 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/vector-indexed-labels-drift.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/document-sectioniser.d.ts +10 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/document-sectioniser.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/document-sectioniser.js +47 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/document-sectioniser.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/embeddings.d.ts +1 -2
- package/payload/platform/plugins/memory/mcp/dist/lib/embeddings.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/embeddings.js +5 -28
- package/payload/platform/plugins/memory/mcp/dist/lib/embeddings.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/build-text-representation-bound.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/build-text-representation-bound.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/build-text-representation-bound.test.js +20 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/build-text-representation-bound.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-preference-embed.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-preference-embed.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-preference-embed.test.js +67 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-preference-embed.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/embeddings-cap.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/embeddings-cap.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/embeddings-cap.test.js +34 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/embeddings-cap.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-archive-section-writer.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-archive-section-writer.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-archive-section-writer.test.js +61 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-archive-section-writer.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-archive-write.test.js +23 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-archive-write.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-reindex.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-reindex.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-reindex.test.js +87 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-reindex.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-search-fields.test.js +3 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-search-fields.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-search-threshold.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-search-threshold.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-search-threshold.test.js +34 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-search-threshold.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.js +19 -4
- package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.d.ts +33 -6
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.js +280 -10
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-reindex.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-reindex.js +76 -37
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-reindex.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.js +11 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-typed-edge-pass.d.ts +4 -4
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-typed-edge-pass.js +3 -3
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js +20 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js +6 -3
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/vitest.config.ts +5 -0
- package/payload/platform/plugins/memory/references/schema-base.md +1 -1
- package/payload/platform/plugins/memory/references/schema-construction.md +72 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/ics-graph-ingest.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/ics-graph-ingest.js +15 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/ics-graph-ingest.js.map +1 -1
- package/payload/platform/plugins/slides/.claude-plugin/plugin.json +8 -0
- package/payload/platform/plugins/slides/LICENSE +21 -0
- package/payload/platform/plugins/slides/PLUGIN.md +18 -0
- package/payload/platform/plugins/slides/PROVENANCE.md +40 -0
- package/payload/platform/plugins/slides/commands/add-slide.md +29 -0
- package/payload/platform/plugins/slides/commands/slides-claus.md +39 -0
- package/payload/platform/plugins/slides/commands/slides-new-component.md +39 -0
- package/payload/platform/plugins/slides/commands/slides-outline.md +43 -0
- package/payload/platform/plugins/slides/commands/slides-review.md +52 -0
- package/payload/platform/plugins/slides/commands/slides-theme.md +64 -0
- package/payload/platform/plugins/slides/commands/slides.md +59 -0
- package/payload/platform/plugins/slides/skills/deck-system/REFERENCE.md +581 -0
- package/payload/platform/plugins/slides/skills/deck-system/SKILL.md +607 -0
- package/payload/platform/plugins/slides/skills/deck-system/STORYTELLING-board.md +426 -0
- package/payload/platform/plugins/slides/skills/deck-system/STORYTELLING-claus.md +185 -0
- package/payload/platform/plugins/slides/skills/deck-system/STORYTELLING-mbb.md +450 -0
- package/payload/platform/plugins/slides/skills/deck-system/STORYTELLING-product-launch.md +579 -0
- package/payload/platform/plugins/slides/skills/deck-system/STORYTELLING-sales.md +464 -0
- package/payload/platform/plugins/slides/skills/deck-system/STORYTELLING-sequoia.md +489 -0
- package/payload/platform/plugins/slides/skills/deck-system/STORYTELLING.md +273 -0
- package/payload/platform/plugins/slides/skills/deck-system/deck-craft.html +1371 -0
- package/payload/platform/plugins/slides/skills/deck-system/deck-solid.html +1667 -0
- package/payload/platform/plugins/slides/skills/deck-system/deck.html +1359 -0
- package/payload/platform/plugins/url-get/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/url-get/PLUGIN.md +26 -21
- package/payload/platform/plugins/url-get/mcp/dist/index.js +3 -3
- package/payload/platform/plugins/url-get/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/url-get/mcp/dist/tools/url-get.d.ts +1 -2
- package/payload/platform/plugins/url-get/mcp/dist/tools/url-get.d.ts.map +1 -1
- package/payload/platform/plugins/url-get/mcp/dist/tools/url-get.js +20 -40
- package/payload/platform/plugins/url-get/mcp/dist/tools/url-get.js.map +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.js +4 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.js.map +1 -1
- package/payload/platform/scripts/identity-forbidden-token-check.mjs +0 -1
- package/payload/platform/scripts/setup-account.sh +0 -15
- package/payload/platform/services/claude-session-manager/dist/agent-identity-locator.d.ts +23 -0
- package/payload/platform/services/claude-session-manager/dist/agent-identity-locator.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/agent-identity-locator.js +29 -0
- package/payload/platform/services/claude-session-manager/dist/agent-identity-locator.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +0 -2
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts +5 -0
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.js +32 -2
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +8 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/public-agent-reachability.d.ts +13 -1
- package/payload/platform/services/claude-session-manager/dist/public-agent-reachability.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/public-agent-reachability.js +26 -2
- package/payload/platform/services/claude-session-manager/dist/public-agent-reachability.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.js +2 -2
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts +12 -3
- package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/system-prompt.js +3 -2
- package/payload/platform/services/claude-session-manager/dist/system-prompt.js.map +1 -1
- package/payload/platform/templates/agents/admin/IDENTITY.md +2 -2
- package/payload/platform/templates/specialists/agents/database-operator.md +3 -7
- package/payload/platform/templates/specialists/agents/typed-edge-classifier.md +1 -1
- package/payload/server/{chunk-M6A6EZD4.js → chunk-76HRO7NX.js} +16 -2
- package/payload/server/maxy-edge.js +1 -1
- package/payload/server/public/assets/AdminShell-T-YknnBn.js +1 -0
- package/payload/server/public/assets/Checkbox-DmDxpqVv.js +1 -0
- package/payload/server/public/assets/admin-COUV-jgt.js +1 -0
- package/payload/server/public/assets/{arc-aUiRP9AS.js → arc-B2CweJq3.js} +1 -1
- package/payload/server/public/assets/architecture-YZFGNWBL-Dnn6Hc65.js +1 -0
- package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-c09loTER.js → architectureDiagram-Q4EWVU46-DP2o-MFV.js} +1 -1
- package/payload/server/public/assets/{blockDiagram-DXYQGD6D-Cjdeyoq1.js → blockDiagram-DXYQGD6D-DO4mcYDJ.js} +1 -1
- package/payload/server/public/assets/{c4Diagram-AHTNJAMY-NY6Wlzo2.js → c4Diagram-AHTNJAMY-Sy1giHbj.js} +1 -1
- package/payload/server/public/assets/channel-CEpR_0rE.js +1 -0
- package/payload/server/public/assets/{chunk-2KRD3SAO-BK3470lx.js → chunk-2KRD3SAO-CKsCYCsN.js} +1 -1
- package/payload/server/public/assets/chunk-336JU56O-C0-P-aUF.js +2 -0
- package/payload/server/public/assets/chunk-426QAEUC-DFjEt3Zb.js +1 -0
- package/payload/server/public/assets/{chunk-4BX2VUAB-BOvVdJLf.js → chunk-4BX2VUAB-B8bqAmBa.js} +1 -1
- package/payload/server/public/assets/{chunk-4TB4RGXK-BXpto3yW.js → chunk-4TB4RGXK-D1k0VSlW.js} +1 -1
- package/payload/server/public/assets/{chunk-55IACEB6-BwZyF7vR.js → chunk-55IACEB6-B-p_QNqz.js} +1 -1
- package/payload/server/public/assets/{chunk-5FUZZQ4R-C403gCUk.js → chunk-5FUZZQ4R-D6U6tV_j.js} +1 -1
- package/payload/server/public/assets/{chunk-5PVQY5BW-CjVzXQEp.js → chunk-5PVQY5BW-CYK76xfs.js} +1 -1
- package/payload/server/public/assets/{chunk-67CJDMHE-D5bhMrtY.js → chunk-67CJDMHE-BC9js-lf.js} +1 -1
- package/payload/server/public/assets/{chunk-7N4EOEYR-Si7Lgrwc.js → chunk-7N4EOEYR-4j2OqKkv.js} +1 -1
- package/payload/server/public/assets/{chunk-AA7GKIK3-DMuHtDqO.js → chunk-AA7GKIK3-Coen-fXN.js} +1 -1
- package/payload/server/public/assets/{chunk-BSJP7CBP-L79XKVcb.js → chunk-BSJP7CBP-CAiOBvec.js} +1 -1
- package/payload/server/public/assets/{chunk-CIAEETIT-C0O7Upmg.js → chunk-CIAEETIT-AJzzpZVb.js} +1 -1
- package/payload/server/public/assets/{chunk-EDXVE4YY-DJcJAsAg.js → chunk-EDXVE4YY-BL4BKozX.js} +1 -1
- package/payload/server/public/assets/{chunk-ENJZ2VHE-CFDNvYu1.js → chunk-ENJZ2VHE-mhAFG8UD.js} +1 -1
- package/payload/server/public/assets/{chunk-FMBD7UC4-C_E43NFJ.js → chunk-FMBD7UC4-H231gZA_.js} +1 -1
- package/payload/server/public/assets/{chunk-FOC6F5B3-D9lWWHAu.js → chunk-FOC6F5B3-Cl3ZZjYG.js} +1 -1
- package/payload/server/public/assets/{chunk-ICPOFSXX-ecLOxGhL.js → chunk-ICPOFSXX-DOEzvzJa.js} +2 -2
- package/payload/server/public/assets/{chunk-K5T4RW27-DuhsNH4c.js → chunk-K5T4RW27-C_ipbUDD.js} +1 -1
- package/payload/server/public/assets/{chunk-KGLVRYIC-B4-A1Abi.js → chunk-KGLVRYIC-CTsDNSCU.js} +1 -1
- package/payload/server/public/assets/{chunk-LIHQZDEY-BxqgHRgT.js → chunk-LIHQZDEY-DvSXhkGf.js} +1 -1
- package/payload/server/public/assets/{chunk-ORNJ4GCN-DEYQ5WaJ.js → chunk-ORNJ4GCN-p574NOI7.js} +1 -1
- package/payload/server/public/assets/{chunk-OYMX7WX6-B7MW66KB.js → chunk-OYMX7WX6-BlEgFM6U.js} +1 -1
- package/payload/server/public/assets/chunk-QZHKN3VN-DpF06ZZQ.js +1 -0
- package/payload/server/public/assets/{chunk-U2HBQHQK-BMawmsyk.js → chunk-U2HBQHQK-B2bDK0jv.js} +1 -1
- package/payload/server/public/assets/{chunk-X2U36JSP-CT6g7pno.js → chunk-X2U36JSP-D69BxKFw.js} +1 -1
- package/payload/server/public/assets/{chunk-XPW4576I-CBfZXZDB.js → chunk-XPW4576I-Dm-PcyUi.js} +1 -1
- package/payload/server/public/assets/{chunk-YZCP3GAM-xeAluiAH.js → chunk-YZCP3GAM-Be8RnXgx.js} +1 -1
- package/payload/server/public/assets/{chunk-ZZ45TVLE-BRN9qUC5.js → chunk-ZZ45TVLE-Ck8PCTa4.js} +1 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-CYbXvKLI.js +1 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DEyHzRhq.js +1 -0
- package/payload/server/public/assets/clone-y8gexbBy.js +1 -0
- package/payload/server/public/assets/{cose-bilkent-S5V4N54A-Br2gjtEO.js → cose-bilkent-S5V4N54A-CmkW2Eaj.js} +1 -1
- package/payload/server/public/assets/{dagre-DTjePoco.js → dagre-Dqp-ns8F.js} +1 -1
- package/payload/server/public/assets/{dagre-KV5264BT-DHBkRke4.js → dagre-KV5264BT-ZgWWXPLc.js} +1 -1
- package/payload/server/public/assets/data-gy6QH9c1.js +1 -0
- package/payload/server/public/assets/{diagram-5BDNPKRD-BIq1-idL.js → diagram-5BDNPKRD-CTX5-ScM.js} +1 -1
- package/payload/server/public/assets/{diagram-G4DWMVQ6-BsIUDzV6.js → diagram-G4DWMVQ6-BovIsO6H.js} +1 -1
- package/payload/server/public/assets/{diagram-MMDJMWI5-CgHSri2i.js → diagram-MMDJMWI5-DcETsQy-.js} +1 -1
- package/payload/server/public/assets/{diagram-TYMM5635-Ce2Wh9ZX.js → diagram-TYMM5635-yyq6peoZ.js} +1 -1
- package/payload/server/public/assets/{erDiagram-SMLLAGMA-BU0Kh6OQ.js → erDiagram-SMLLAGMA-CiNToftB.js} +1 -1
- package/payload/server/public/assets/{flatten-Bo6YRmWl.js → flatten-BtFI066E.js} +1 -1
- package/payload/server/public/assets/{flowDiagram-DWJPFMVM-B0N06MF7.js → flowDiagram-DWJPFMVM-Xnl3SpIM.js} +1 -1
- package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-BVbx4ARZ.js → ganttDiagram-T4ZO3ILL-C1iyWe0f.js} +1 -1
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-CNs-LD5i.js +1 -0
- package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-C-xRJ94t.js → gitGraphDiagram-UUTBAWPF-D97pbMQb.js} +1 -1
- package/payload/server/public/assets/graph-labels-cZu4pK16.js +1 -0
- package/payload/server/public/assets/{graph-g48ZcA5M.js → graph-qz5tFKqU.js} +3 -3
- package/payload/server/public/assets/{graphlib-YmNcoMjY.js → graphlib-Lq8ijgON.js} +1 -1
- package/payload/server/public/assets/info-OMHHGYJF-DsTNigSS.js +1 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-C_OarRTA.js +2 -0
- package/payload/server/public/assets/{isEmpty-D6Kr-M1M.js → isEmpty-D6QovjYR.js} +1 -1
- package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-DTrq54yC.js → ishikawaDiagram-UXIWVN3A-B8XBdjJn.js} +1 -1
- package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-OZZZMrFX.js → journeyDiagram-VCZTEJTY-CZYbiOaQ.js} +1 -1
- package/payload/server/public/assets/{kanban-definition-6JOO6SKY--w-IP9pN.js → kanban-definition-6JOO6SKY-B1PybFoh.js} +1 -1
- package/payload/server/public/assets/{line-Ckeulv5T.js → line-D-tw3hHp.js} +1 -1
- package/payload/server/public/assets/{linear-DOh_6k2k.js → linear-BHhXD3cd.js} +1 -1
- package/payload/server/public/assets/{mermaid-parser.core-CVRAxYRD.js → mermaid-parser.core-C9RAnysF.js} +2 -2
- package/payload/server/public/assets/{mermaid.core-B-mE18I1.js → mermaid.core-B532LT1r.js} +3 -3
- package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-Bm8mDicL.js → mindmap-definition-QFDTVHPH-DGlgeeTV.js} +1 -1
- package/payload/server/public/assets/{ordinal-BDi6f4xk.js → ordinal-Bl-aM5b9.js} +1 -1
- package/payload/server/public/assets/packet-4T2RLAQJ-DGES22b-.js +1 -0
- package/payload/server/public/assets/pie-ZZUOXDRM-ChKeDbzt.js +1 -0
- package/payload/server/public/assets/{pieDiagram-DEJITSTG-BCmRLgGO.js → pieDiagram-DEJITSTG-DV9FIWko.js} +1 -1
- package/payload/server/public/assets/{public-DknO-g9S.js → public-Bu2_Xi0a.js} +5 -5
- package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-CniTIUTm.js → quadrantDiagram-34T5L4WZ-Betwya4l.js} +1 -1
- package/payload/server/public/assets/radar-PYXPWWZC-FGG5Fs7N.js +1 -0
- package/payload/server/public/assets/{reduce-CGi9ik8i.js → reduce-BD4xUd2c.js} +1 -1
- package/payload/server/public/assets/{requirementDiagram-MS252O5E-CoxBSj9M.js → requirementDiagram-MS252O5E-Cq3vODdg.js} +1 -1
- package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-BjS-4jzq.js → sankeyDiagram-XADWPNL6-x8krXWcS.js} +1 -1
- package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-B9jVOnPR.js → sequenceDiagram-FGHM5R23-i-_uH-Yl.js} +1 -1
- package/payload/server/public/assets/{stateDiagram-FHFEXIEX-BvOQPzP8.js → stateDiagram-FHFEXIEX-il4KqSgI.js} +1 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-B6zNJ6Tv.js +1 -0
- package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-CdfgWLo1.js → timeline-definition-GMOUNBTQ-DATdZkA5.js} +1 -1
- package/payload/server/public/assets/treeView-SZITEDCU-VAQQdbtf.js +1 -0
- package/payload/server/public/assets/treemap-W4RFUUIX-DKchO3zI.js +1 -0
- package/payload/server/public/assets/useSelectionMode-A5KItZ2T.js +13 -0
- package/payload/server/public/assets/{brand-D0gNihp7.css → useSelectionMode-C-Ojh7W9.css} +1 -1
- package/payload/server/public/assets/{vennDiagram-DHZGUBPP-JCgpIbj-.js → vennDiagram-DHZGUBPP-BJh9tJTt.js} +1 -1
- package/payload/server/public/assets/wardley-RL74JXVD-CBGtx0bS.js +1 -0
- package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-Dei3VqHo.js → wardleyDiagram-NUSXRM2D-EMN1Hdfg.js} +1 -1
- package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-DUtIyoIb.js → xychartDiagram-5P7HB3ND-DbUWXa7T.js} +1 -1
- package/payload/server/public/data.html +5 -5
- package/payload/server/public/graph.html +6 -6
- package/payload/server/public/index.html +5 -6
- package/payload/server/public/public.html +4 -5
- package/payload/server/server.js +525 -39
- package/payload/platform/plugins/admin/hooks/__tests__/session-end-retrospective.test.sh +0 -396
- package/payload/platform/plugins/admin/hooks/lib/admin-graph-pass-common.sh +0 -239
- package/payload/platform/plugins/admin/hooks/session-end-retrospective.sh +0 -214
- package/payload/server/public/assets/AdminShell-892Jy_rs.js +0 -1
- package/payload/server/public/assets/Checkbox-Bc2QzX9b.js +0 -1
- package/payload/server/public/assets/admin-D3K13ndi.js +0 -1
- package/payload/server/public/assets/architecture-YZFGNWBL--v-pJPNp.js +0 -1
- package/payload/server/public/assets/brand-CcN3dELF.js +0 -9
- package/payload/server/public/assets/channel-B1IT7to2.js +0 -1
- package/payload/server/public/assets/chunk-336JU56O-CdKRCIeE.js +0 -2
- package/payload/server/public/assets/chunk-426QAEUC-BybuQ3Ve.js +0 -1
- package/payload/server/public/assets/chunk-QZHKN3VN-Bd-GrQM6.js +0 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-rjCize6i.js +0 -1
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BORWOUt0.js +0 -1
- package/payload/server/public/assets/clone-Csqv5U6T.js +0 -1
- package/payload/server/public/assets/data-Br-pdljK.js +0 -1
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-CI0s_tqn.js +0 -1
- package/payload/server/public/assets/graph-labels-BYH-IPCb.js +0 -1
- package/payload/server/public/assets/info-OMHHGYJF-g3gYW7Qm.js +0 -1
- package/payload/server/public/assets/infoDiagram-42DDH7IO-Di6oPQ_-.js +0 -2
- package/payload/server/public/assets/packet-4T2RLAQJ-CT0TB9HI.js +0 -1
- package/payload/server/public/assets/pie-ZZUOXDRM-CXLe7TFF.js +0 -1
- package/payload/server/public/assets/radar-PYXPWWZC-DnPLBl-D.js +0 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-v4ND10uR.js +0 -1
- package/payload/server/public/assets/treeView-SZITEDCU-C3cb7Xwe.js +0 -1
- package/payload/server/public/assets/treemap-W4RFUUIX-Dc7G3Bgm.js +0 -1
- package/payload/server/public/assets/useSelectionMode-DwsyptOw.js +0 -5
- package/payload/server/public/assets/wardley-RL74JXVD-DtgibWAt.js +0 -1
- /package/payload/server/public/assets/{_baseFor-Cam2PbSt.js → _baseFor-Cs8Y-rGh.js} +0 -0
- /package/payload/server/public/assets/{array-DYRGGQae.js → array-iHZP4KWJ.js} +0 -0
- /package/payload/server/public/assets/{cytoscape.esm-nWsJMTNI.js → cytoscape.esm-BR2GOQ8_.js} +0 -0
- /package/payload/server/public/assets/{defaultLocale-Du1XY3Dp.js → defaultLocale-B9aLeOTg.js} +0 -0
- /package/payload/server/public/assets/{dist-BzAsli7o.js → dist-DB-VPj_8.js} +0 -0
- /package/payload/server/public/assets/{init-B5BXBRcm.js → init-BNFRgqHM.js} +0 -0
- /package/payload/server/public/assets/{katex-HOUACuRw.js → katex-B-EfS3nw.js} +0 -0
- /package/payload/server/public/assets/{path-CNO468J-.js → path-DmWWdwp7.js} +0 -0
- /package/payload/server/public/assets/{rough.esm-DRO6hWPh.js → rough.esm-Ci7Kjt46.js} +0 -0
- /package/payload/server/public/assets/{src-CWiyyVfn.js → src-C1jfwBq0.js} +0 -0
|
@@ -0,0 +1,450 @@
|
|
|
1
|
+
# Storytelling: MBB Consulting Format
|
|
2
|
+
|
|
3
|
+
How to build a consulting deck that drives a decision.
|
|
4
|
+
|
|
5
|
+
This is the second storytelling guide for the Slides framework. Where [STORYTELLING.md](STORYTELLING.md) covers the TED Talk six-beat structure, designed to move an audience emotionally, this one covers the McKinsey / MBB (McKinsey, Bain, BCG) consulting structure. Designed to move an executive to action. Same template, different narrative engine.
|
|
6
|
+
|
|
7
|
+
The difference is simple: a TED talk earns belief. A consulting deck earns a decision. Everything in this guide serves that goal.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## The SCR Framework
|
|
12
|
+
|
|
13
|
+
Every consulting deck follows one arc:
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
Situation ──────► Complication ──────► Resolution
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
**Situation:** what is true today. Facts the audience already knows. Common ground.
|
|
20
|
+
|
|
21
|
+
**Complication:** what changed, what's broken, or what's at risk. The tension.
|
|
22
|
+
|
|
23
|
+
**Resolution:** what to do about it. The recommendation.
|
|
24
|
+
|
|
25
|
+
That's it. Every section of the deck, every slide, every headline is in service of moving from S → C → R. If a slide doesn't advance this arc, cut it.
|
|
26
|
+
|
|
27
|
+
SCR works at every level of zoom:
|
|
28
|
+
- The **whole deck** follows S → C → R.
|
|
29
|
+
- Each **section** has its own mini S → C → R.
|
|
30
|
+
- Each **slide** implies it: context → tension → point.
|
|
31
|
+
|
|
32
|
+
If you can't place a slide inside this arc, it's appendix material.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## The Pyramid Principle
|
|
37
|
+
|
|
38
|
+
Barbara Minto's rule: **start with the answer.**
|
|
39
|
+
|
|
40
|
+
In a novel, you build toward the conclusion. In a consulting deck, you lead with it. The executive summary states the recommendation on slide one. Everything after it is evidence.
|
|
41
|
+
|
|
42
|
+
### The governing thought
|
|
43
|
+
|
|
44
|
+
Every slide has a **governing thought**: a complete assertion, stated as a single sentence headline that carries the argument.
|
|
45
|
+
|
|
46
|
+
> **"Revenue grew 23% YoY"**: governing thought
|
|
47
|
+
> **"Revenue performance"**: topic title
|
|
48
|
+
|
|
49
|
+
The first one tells you something. The second one tells you nothing. Topic titles are the single most common mistake in consulting decks. Kill them all.
|
|
50
|
+
|
|
51
|
+
### The headline test
|
|
52
|
+
|
|
53
|
+
If you read only the slide headlines in sequence, top to bottom, they should tell the complete story. No body text. No charts. Just the headlines. If the narrative breaks, if a headline says "Market overview" instead of "The European market contracted 12% in Q3", you have a topic title. Fix it.
|
|
54
|
+
|
|
55
|
+
This is the governing thought test. Run it on every draft. Print the headlines as a list. Read them aloud. If they don't make an argument, the deck doesn't make an argument.
|
|
56
|
+
|
|
57
|
+
### The pyramid structure
|
|
58
|
+
|
|
59
|
+
The recommendation sits at the top. Below it: three to five supporting arguments. Below each argument: the evidence.
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
Recommendation
|
|
63
|
+
/ | \
|
|
64
|
+
Argument Argument Argument
|
|
65
|
+
/ \ | / \
|
|
66
|
+
Data Data Data Data Data
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Every level answers "why?" for the level above it. If a supporting point doesn't answer "why should I believe the thing above me?", it's in the wrong place.
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## The seven-beat structure
|
|
74
|
+
|
|
75
|
+
Consulting decks have a standard shape. The proportions flex, but the order doesn't.
|
|
76
|
+
|
|
77
|
+
| Beat | ~Share | Purpose |
|
|
78
|
+
|------|--------|---------|
|
|
79
|
+
| Executive summary | 5% | The whole deck in one slide |
|
|
80
|
+
| Situation | 15% | Common ground |
|
|
81
|
+
| Complication | 15% | The tension |
|
|
82
|
+
| Key findings | 30% | The evidence |
|
|
83
|
+
| Recommendation | 20% | What to do |
|
|
84
|
+
| Implementation / next steps | 10% | How to do it |
|
|
85
|
+
| Appendix | 5% | Reference material |
|
|
86
|
+
|
|
87
|
+
### Executive summary: *the whole deck in one slide*
|
|
88
|
+
|
|
89
|
+
The single most important slide. State the recommendation, the two or three key findings that support it, and the immediate next steps. One slide. No preamble.
|
|
90
|
+
|
|
91
|
+
A busy executive may read only this slide. A partner skimming before a meeting will read only this slide. It must stand alone.
|
|
92
|
+
|
|
93
|
+
**Purpose:** Deliver the answer before the argument.
|
|
94
|
+
|
|
95
|
+
**What belongs:** The recommendation (one sentence). The key supporting findings (two to three bullets). Proposed next steps or timeline.
|
|
96
|
+
|
|
97
|
+
**What doesn't belong:** Methodology. Background. Caveats. Anything that starts with "In order to understand…"
|
|
98
|
+
|
|
99
|
+
**Example governing thoughts:**
|
|
100
|
+
|
|
101
|
+
> **Consolidate to three vendors** *to reduce procurement cost by $14M annually.*
|
|
102
|
+
> **Enter Southeast Asia in Q2.** *The window closes by year-end.*
|
|
103
|
+
> **Divest the consumer segment.** *It's diluting margins across the portfolio.*
|
|
104
|
+
|
|
105
|
+
**Best Slides components:** Eyebrow + headline + subtitle for the recommendation line. Stat grid with stat-dark highlight for the key metrics that anchor the recommendation. A short bullet list or two-column layout beneath it. Keep it tight: this slide should feel dense but scannable.
|
|
106
|
+
|
|
107
|
+
**Common mistakes:**
|
|
108
|
+
- Making it two slides. It's one. Always one.
|
|
109
|
+
- Writing it last instead of first. Write the executive summary before you build the deck. It forces you to know your answer.
|
|
110
|
+
- Softening the recommendation. "Consider exploring potential options for…" is weak. State what you think they should do.
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
### Situation: *common ground*
|
|
115
|
+
|
|
116
|
+
The current state. Facts the audience already knows and agrees with. You're demonstrating that you understand their world.
|
|
117
|
+
|
|
118
|
+
This section builds alignment. If the audience disagrees with your situation, they'll reject everything that follows. So keep it factual, verifiable, and uncontroversial.
|
|
119
|
+
|
|
120
|
+
**Purpose:** Establish shared context so the complication lands.
|
|
121
|
+
|
|
122
|
+
**What belongs:** Market size, company position, recent performance, strategic context, regulatory environment. Whatever frames the problem.
|
|
123
|
+
|
|
124
|
+
**What doesn't belong:** Your opinion. Any tension. Anything the audience would push back on. Save that for the complication.
|
|
125
|
+
|
|
126
|
+
**Example governing thoughts:**
|
|
127
|
+
|
|
128
|
+
> **The European logistics market grew 8% in 2024,** *driven by e-commerce and nearshoring.*
|
|
129
|
+
> **Your procurement function manages 2,400 suppliers** *across 14 categories.*
|
|
130
|
+
> **Customer acquisition cost has been stable at €47** *for the past six quarters.*
|
|
131
|
+
|
|
132
|
+
**Best Slides components:** Two-column for market context (left: your company, right: the market). Eyebrow + headline + subtitle for single-point context slides. Capability list for summarizing the current operating model.
|
|
133
|
+
|
|
134
|
+
**Common mistakes:**
|
|
135
|
+
- Going too deep. Two to four slides max. The audience knows their own situation. You're just proving you do too.
|
|
136
|
+
- Including data that isn't relevant to the complication. Every fact in the situation should set up the tension that follows.
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
### Complication: *the tension*
|
|
141
|
+
|
|
142
|
+
What changed. What's broken. What's at risk. This is the "but" after the situation's "and."
|
|
143
|
+
|
|
144
|
+
The complication is the reason the deck exists. Without it, there's no need for a recommendation. Make it sharp. Make it uncomfortable.
|
|
145
|
+
|
|
146
|
+
**Purpose:** Create urgency. Make the status quo feel untenable.
|
|
147
|
+
|
|
148
|
+
**What belongs:** The problem, the threat, the missed opportunity, the trend that changes everything. Data that shows the gap between where they are and where they need to be.
|
|
149
|
+
|
|
150
|
+
**What doesn't belong:** The solution. Let the tension build before introducing the answer.
|
|
151
|
+
|
|
152
|
+
**Example governing thoughts:**
|
|
153
|
+
|
|
154
|
+
> **But unit economics turned negative in Q3** *as customer acquisition cost spiked 34%.*
|
|
155
|
+
> **Three of your top five suppliers are single-source,** *creating $200M in concentration risk.*
|
|
156
|
+
> **The market is consolidating.** *Two competitors have already acquired regional players.*
|
|
157
|
+
|
|
158
|
+
**Best Slides components:** Dark slide for the sharpest single-line complication ("The margin gap is widening. Fast."). Two-column for before/after or expected-vs-actual comparisons. Quote slide for a single damning data point.
|
|
159
|
+
|
|
160
|
+
**Common mistakes:**
|
|
161
|
+
- Being too gentle. The complication should make the room slightly uncomfortable. If everyone nods calmly, you haven't found the real tension.
|
|
162
|
+
- Listing five problems instead of one. Find the one complication that matters most. Others can support it, but the narrative needs a single through-line.
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
### Key findings: *the evidence*
|
|
167
|
+
|
|
168
|
+
The longest section. This is where you prove your argument with data. Each slide makes exactly one point. Its governing thought headline states the finding. The body (chart, table, analysis) supports it.
|
|
169
|
+
|
|
170
|
+
**Purpose:** Build the analytical case for your recommendation, one finding at a time.
|
|
171
|
+
|
|
172
|
+
**What belongs:** Data-driven analysis. Each slide: one finding, one governing thought, one supporting visual. Three to eight findings total, structured in a logical sequence.
|
|
173
|
+
|
|
174
|
+
**What doesn't belong:** Raw data without a point. Interesting-but-irrelevant analysis. Anything that doesn't connect to the recommendation.
|
|
175
|
+
|
|
176
|
+
**Example governing thoughts:**
|
|
177
|
+
|
|
178
|
+
> **Vendor consolidation saved comparable companies 15–22%** *across three benchmarked cases.*
|
|
179
|
+
> **Southeast Asian demand is growing 3× faster than domestic,** *with margins 8 points higher.*
|
|
180
|
+
> **The consumer segment contributes 12% of revenue** *but consumes 31% of management attention.*
|
|
181
|
+
> **Customer churn correlates with onboarding time** *rather than product satisfaction scores.*
|
|
182
|
+
|
|
183
|
+
**Best Slides components:** Eyebrow + headline + subtitle as the default: the headline carries the finding, the subtitle gives nuance. Two-column for comparisons (your client vs benchmark, segment A vs segment B). Three-column for breaking a finding into components. Timeline for trend data and longitudinal analysis. JEDUF for positioning choices between strategic options. Feature card row for highlighting distinct capabilities or attributes side by side. Stack grid for categorizing drivers or factors.
|
|
184
|
+
|
|
185
|
+
**MECE your findings.** Each finding should be mutually exclusive (no overlap) and collectively exhaustive (no gaps). If your three findings are "costs are too high," "spending is excessive," and "expenses are above benchmark": that's one finding stated three ways. Restructure until each finding adds something the others don't.
|
|
186
|
+
|
|
187
|
+
**Common mistakes:**
|
|
188
|
+
- Topic title headlines. "Cost analysis" tells the reader nothing. "Costs exceed benchmark by 23% due to fragmented procurement" tells them everything.
|
|
189
|
+
- Too many findings. If you have twelve findings, you haven't synthesized. Group them. Three to five is the sweet spot for a steering committee; eight max for a full analysis deck.
|
|
190
|
+
- Charts without governing thoughts. A chart should never appear without a headline that tells the reader what to conclude from it. The chart is evidence. The headline is the verdict.
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
### Recommendation: *what to do*
|
|
195
|
+
|
|
196
|
+
State what you think they should do. Be specific. Be direct. Include who does what, by when, and what it costs.
|
|
197
|
+
|
|
198
|
+
**Purpose:** Translate findings into action.
|
|
199
|
+
|
|
200
|
+
**What belongs:** The recommendation (one clear statement). The supporting rationale (why this option over the alternatives). Impact projections. Owners. Timeline. Investment required.
|
|
201
|
+
|
|
202
|
+
**What doesn't belong:** Hedging. "We recommend the client consider…" is hedging. Say "Consolidate to three vendors by Q3" instead.
|
|
203
|
+
|
|
204
|
+
**Example governing thoughts:**
|
|
205
|
+
|
|
206
|
+
> **Consolidate from 12 vendors to three** *to capture $14M in annual savings.*
|
|
207
|
+
> **Launch in Vietnam and Indonesia first,** *where regulatory barriers are lowest.*
|
|
208
|
+
> **Divest the consumer segment within 18 months** *to unlock $80M in capital for reinvestment.*
|
|
209
|
+
> **Hire a Chief Data Officer by Q2** *to own the analytics transformation.*
|
|
210
|
+
|
|
211
|
+
**Best Slides components:** Eyebrow + headline + subtitle for the primary recommendation. Two-column for recommendation vs alternative considered. Dot flow for a phased implementation sequence. Three-column for a multi-track recommendation (what to do now / next quarter / next year) or for comparing strategic options side by side.
|
|
212
|
+
|
|
213
|
+
**Common mistakes:**
|
|
214
|
+
- Burying the recommendation at the end of a paragraph. Put it in the headline. First words on the slide.
|
|
215
|
+
- Being vague. "Improve operational efficiency" is not a recommendation. "Reduce headcount in logistics by 15% through automation of three warehouse processes" is.
|
|
216
|
+
- Presenting three options without a clear preference. The client is paying for your judgment. Pick one and defend it. Put the alternatives in the appendix.
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
### Implementation / next steps: *how to do it*
|
|
221
|
+
|
|
222
|
+
The bridge from strategy to execution. This is where the recommendation becomes a plan.
|
|
223
|
+
|
|
224
|
+
**Purpose:** Show that the recommendation is actionable and that you've thought through execution.
|
|
225
|
+
|
|
226
|
+
**What belongs:** Workstreams. Milestones. Owners. Timeline (8–12 weeks, quarterly, etc.). Key risks and mitigations. Quick wins vs structural changes.
|
|
227
|
+
|
|
228
|
+
**What doesn't belong:** Exhaustive project plans. Gantt charts with 200 line items. Save that for the implementation phase. This section is the "we've thought it through" proof, showing the plan's shape.
|
|
229
|
+
|
|
230
|
+
**Example governing thoughts:**
|
|
231
|
+
|
|
232
|
+
> **Three workstreams over 12 weeks** *deliver the first $6M in savings.*
|
|
233
|
+
> **Quick wins in weeks 1–4** *build momentum and fund the longer transformation.*
|
|
234
|
+
> **The critical risk is supplier pushback.** *Mitigate with early engagement in week 2.*
|
|
235
|
+
|
|
236
|
+
**Best Slides components:** Dot flow for the phased timeline. Step stack for sequencing discrete implementation phases. Update row for workstream milestones and status tracking. Two-column for workstream breakdown (left: what, right: who/when). Eyebrow + headline + subtitle for the summary view.
|
|
237
|
+
|
|
238
|
+
**Common mistakes:**
|
|
239
|
+
- Skipping this section. A recommendation without implementation feels theoretical. Even two slides of "here's how this would work" changes the conversation from "interesting idea" to "let's discuss timing."
|
|
240
|
+
- Over-detailing. Three to four slides max. You're showing the shape of the plan.
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
### Appendix: *reference material*
|
|
245
|
+
|
|
246
|
+
Everything that supports the argument but doesn't belong in the narrative flow. Methodology. Detailed data tables. Alternative scenarios. Interview summaries. Sensitivity analyses.
|
|
247
|
+
|
|
248
|
+
**Purpose:** Provide backup for questions without cluttering the story.
|
|
249
|
+
|
|
250
|
+
**What belongs:** Anything a skeptical executive might ask about. Detailed breakdowns of summary numbers. Methodology notes. Sources.
|
|
251
|
+
|
|
252
|
+
**What doesn't belong:** In the presentation. The appendix is referenced during Q&A and follow-up. If you're presenting appendix slides, they should have been in the main deck.
|
|
253
|
+
|
|
254
|
+
**Example governing thoughts:**
|
|
255
|
+
|
|
256
|
+
> **Benchmark methodology** *based on 14 comparable companies, 2021–2024.*
|
|
257
|
+
> **Full supplier spend breakdown** *by category, region, and contract type.*
|
|
258
|
+
> **Sensitivity analysis:** *savings range from $9M to $18M depending on consolidation pace.*
|
|
259
|
+
|
|
260
|
+
**Best Slides components:** Capability list for detailed Q&A-style backup. Stack grid for categorized reference data. Code slide for technical appendix material (data schemas, query logic, model parameters). Two-column for methodology notes.
|
|
261
|
+
|
|
262
|
+
**Common mistakes:**
|
|
263
|
+
- Presenting the appendix. It exists for Q&A and follow-up. If someone asks "how did you calculate that?", you flip to the appendix. Otherwise, skip it.
|
|
264
|
+
- Not having one. A deck without an appendix signals shallow analysis. Even if nobody opens it, knowing it's there builds credibility.
|
|
265
|
+
- Putting important findings in the appendix. If it matters to the argument, it goes in the main deck. The appendix is for supporting detail only.
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## Action titles vs topic titles
|
|
270
|
+
|
|
271
|
+
This is the single highest-leverage improvement you can make to any consulting deck.
|
|
272
|
+
|
|
273
|
+
| Topic title (weak) | Action title (strong) |
|
|
274
|
+
|---|---|
|
|
275
|
+
| Market overview | The European market contracted 12% in Q3 |
|
|
276
|
+
| Cost analysis | Costs exceed benchmark by 23% due to fragmented procurement |
|
|
277
|
+
| Recommendation | Consolidate to three vendors to save $14M annually |
|
|
278
|
+
| Customer analysis | High-value customers churn 2× faster than mid-tier |
|
|
279
|
+
| Implementation plan | Three workstreams over 12 weeks deliver $6M in quick wins |
|
|
280
|
+
| Risk assessment | Supplier concentration creates $200M in single-source risk |
|
|
281
|
+
|
|
282
|
+
Topic titles describe what the slide is about. Action titles state what the slide says. Every slide in a consulting deck should have an action title. No exceptions.
|
|
283
|
+
|
|
284
|
+
If you can't write an action title for a slide, the slide doesn't have a point yet. Figure out the point first. Then write the headline.
|
|
285
|
+
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
## MECE: structuring breakdowns
|
|
289
|
+
|
|
290
|
+
**Mutually Exclusive, Collectively Exhaustive.** Every time you break something into parts (segments, categories, options, causes), the parts should not overlap (ME) and should cover everything (CE).
|
|
291
|
+
|
|
292
|
+
**Good MECE breakdown of revenue decline:**
|
|
293
|
+
1. Volume declined 8% due to customer churn
|
|
294
|
+
2. Price per unit fell 5% due to competitive pressure
|
|
295
|
+
3. Mix shifted toward lower-margin products
|
|
296
|
+
|
|
297
|
+
These don't overlap. Together they explain the full decline.
|
|
298
|
+
|
|
299
|
+
**Bad breakdown:**
|
|
300
|
+
1. Customers are leaving
|
|
301
|
+
2. Competition is increasing
|
|
302
|
+
3. Revenue is declining
|
|
303
|
+
4. The market is tough
|
|
304
|
+
|
|
305
|
+
These overlap, repeat each other, and don't exhaust the problem. MECE forces precision.
|
|
306
|
+
|
|
307
|
+
Apply MECE to:
|
|
308
|
+
- Findings (each finding covers a distinct piece of the argument)
|
|
309
|
+
- Recommendations (each workstream addresses a distinct area)
|
|
310
|
+
- Segments (each segment is distinct, and together they cover the whole)
|
|
311
|
+
- Root causes (each cause is independent, and together they explain the effect)
|
|
312
|
+
|
|
313
|
+
---
|
|
314
|
+
|
|
315
|
+
## Adapting for audience
|
|
316
|
+
|
|
317
|
+
### Board / C-suite
|
|
318
|
+
|
|
319
|
+
- Lead with the executive summary. Spend time there.
|
|
320
|
+
- Cut the key findings to three max. Synthesize aggressively.
|
|
321
|
+
- The recommendation slide is where they'll engage. Make it specific and defensible.
|
|
322
|
+
- Total deck: 10–15 slides plus appendix.
|
|
323
|
+
- Expect to present only the first five slides before the conversation starts.
|
|
324
|
+
|
|
325
|
+
### Steering committee / senior leadership
|
|
326
|
+
|
|
327
|
+
- The full seven-beat structure works as-is.
|
|
328
|
+
- Allow more findings (five to eight). They want to see the work.
|
|
329
|
+
- Include alternatives considered in the recommendation section.
|
|
330
|
+
- Total deck: 15–25 slides plus appendix.
|
|
331
|
+
- You'll likely present most of it, with interruptions.
|
|
332
|
+
|
|
333
|
+
### Working team
|
|
334
|
+
|
|
335
|
+
- Lighten the executive summary. They know the context.
|
|
336
|
+
- Expand key findings and implementation. This is their section.
|
|
337
|
+
- Include more detail on methodology and assumptions.
|
|
338
|
+
- Total deck: 20–35 slides. Appendix is critical. They'll reference it.
|
|
339
|
+
- This deck may be read more than presented.
|
|
340
|
+
|
|
341
|
+
---
|
|
342
|
+
|
|
343
|
+
## Adapting for format
|
|
344
|
+
|
|
345
|
+
### Steering committee deck (the standard)
|
|
346
|
+
|
|
347
|
+
The default consulting deck. Presented live, typically 30–60 minutes including discussion. The seven-beat structure maps directly.
|
|
348
|
+
|
|
349
|
+
### Full analysis deck (the deep dive)
|
|
350
|
+
|
|
351
|
+
A read-only document, often 50–80 pages. The structure is the same, but every section expands. Body copy does more work. Charts have full annotations. Headlines still carry the story, and this is even more important when there's no presenter to explain.
|
|
352
|
+
|
|
353
|
+
### One-pager (the decision doc)
|
|
354
|
+
|
|
355
|
+
A single page (or a single slide). Executive summary format: recommendation, three supporting points, next steps. Use when the audience needs to approve a decision.
|
|
356
|
+
|
|
357
|
+
Use the Eyebrow + headline + subtitle component for the recommendation, followed by a tight three-column layout for the supporting arguments.
|
|
358
|
+
|
|
359
|
+
### Pre-read deck
|
|
360
|
+
|
|
361
|
+
Sent before the meeting. Same structure as the steering committee deck, but write it to be read independently. More subtitle text. More context in the body. The audience should arrive at the meeting having already absorbed the argument. The meeting itself is for discussion and decisions.
|
|
362
|
+
|
|
363
|
+
---
|
|
364
|
+
|
|
365
|
+
## The governing thought test
|
|
366
|
+
|
|
367
|
+
Before you present, run this test. Extract every slide headline into a list:
|
|
368
|
+
|
|
369
|
+
```
|
|
370
|
+
1. [Executive summary headline]
|
|
371
|
+
2. [Situation headline 1]
|
|
372
|
+
3. [Situation headline 2]
|
|
373
|
+
4. [Complication headline]
|
|
374
|
+
5. [Finding 1]
|
|
375
|
+
6. [Finding 2]
|
|
376
|
+
7. [Finding 3]
|
|
377
|
+
8. [Recommendation headline]
|
|
378
|
+
9. [Implementation headline]
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
Read them in sequence. Do they tell a complete, coherent story? Does each headline follow logically from the one before? Does the recommendation feel inevitable by the time you reach it?
|
|
382
|
+
|
|
383
|
+
If yes, your deck works. If there are gaps, jumps, or topic titles, fix the headlines first. The body and the visuals follow the headlines.
|
|
384
|
+
|
|
385
|
+
---
|
|
386
|
+
|
|
387
|
+
## Common mistakes
|
|
388
|
+
|
|
389
|
+
### 1. Topic titles instead of action titles
|
|
390
|
+
Already covered above, but it's worth repeating because it's the most common problem by a wide margin. "Market overview" is not a headline. "The market contracted 12% and shows no signs of recovery" is.
|
|
391
|
+
|
|
392
|
+
### 2. Burying the recommendation
|
|
393
|
+
The recommendation goes in the executive summary on slide one and again in the recommendation section. Lead with it early. The audience should know what you think they should do before they see why.
|
|
394
|
+
|
|
395
|
+
### 3. Too much appendix on-screen
|
|
396
|
+
The appendix is backup. If you're presenting it, it should be in the main deck. If you find yourself flipping to appendix slides during the flow, move them into the narrative.
|
|
397
|
+
|
|
398
|
+
### 4. Analysis without synthesis
|
|
399
|
+
Showing data is not the same as making an argument. Every chart needs a governing thought. Every finding needs a "so what." If the audience has to draw their own conclusion from a chart, you haven't done your job.
|
|
400
|
+
|
|
401
|
+
### 5. Hedging the recommendation
|
|
402
|
+
"We suggest the client may want to consider exploring…" is hedging dressed as advice. State what you think they should do. Defend it. If you're wrong, the discussion will surface it. But at least there's something to discuss.
|
|
403
|
+
|
|
404
|
+
### 6. Skipping the situation
|
|
405
|
+
Jumping straight to the complication feels efficient but loses the audience. They need to see that you understand their world before they'll accept your diagnosis of what's wrong with it. Two to four slides of situation earns you the right to deliver a complication.
|
|
406
|
+
|
|
407
|
+
### 7. The Frankenstein deck
|
|
408
|
+
Assembled from four different workstreams by four different analysts, with no unifying narrative. The fix: one person writes all the headlines. The analysis can be distributed, but the story must have one author.
|
|
409
|
+
|
|
410
|
+
---
|
|
411
|
+
|
|
412
|
+
## A formula that works
|
|
413
|
+
|
|
414
|
+
If you don't know where to start:
|
|
415
|
+
|
|
416
|
+
```
|
|
417
|
+
1. Write the recommendation in one sentence.
|
|
418
|
+
2. Write the executive summary slide: recommendation, three findings, next steps.
|
|
419
|
+
3. Write all the headlines in sequence. Run the governing thought test.
|
|
420
|
+
4. Fill in the body, charts, and evidence under each headline.
|
|
421
|
+
5. Build the appendix from whatever didn't make the cut.
|
|
422
|
+
6. Run the governing thought test again.
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
Recommendation first. Headlines second. Everything else third. If you build the deck in any other order, you'll end up with analysis looking for a story instead of a story supported by analysis.
|
|
426
|
+
|
|
427
|
+
---
|
|
428
|
+
|
|
429
|
+
## On the executive summary
|
|
430
|
+
|
|
431
|
+
Spend more time on the executive summary than any other slide.
|
|
432
|
+
|
|
433
|
+
It should be:
|
|
434
|
+
- **Complete.** A reader who sees only this slide should know your recommendation, your reasoning, and what happens next.
|
|
435
|
+
- **Specific.** Numbers, names, dates. "Consolidate to three vendors by Q3 to save $14M" rather than "optimize the vendor landscape."
|
|
436
|
+
- **One slide.** If it spills to two, you haven't synthesized enough. Cut until it fits.
|
|
437
|
+
|
|
438
|
+
Write it first. Rewrite it last. It bookends the entire process.
|
|
439
|
+
|
|
440
|
+
---
|
|
441
|
+
|
|
442
|
+
## One more thing
|
|
443
|
+
|
|
444
|
+
A consulting deck is not a report. It's an argument.
|
|
445
|
+
|
|
446
|
+
Reports present information. Arguments present a point of view. The structure, the headlines, the pyramid: they all exist to make one thing unmistakable: what you think the client should do, and why.
|
|
447
|
+
|
|
448
|
+
If the audience finishes your deck and says "interesting analysis," you've written a report. If they say "let's discuss the timeline for option A," you've written a consulting deck.
|
|
449
|
+
|
|
450
|
+
Make them decide something.
|