Use case to showcase
One brief in, a showable and defensible package out. The chain is:
brief -> synthetic data plane -> grounded agents -> deployed app
-> Copilot Studio suite -> captured demo -> films -> deck -> catalog entry
Each stage below can run alone. Work them in order the first time; later, jump to the stage you need.
The standard this work is held to: these get demoed to executives and customers. A claim that turns out to be untrue in the room costs more than a day of extra work. So every stage ends with evidence you gathered by exercising the real artifact - not a green build, not a subagent's report.
Stage 0 - Read the brief, decide the fiction
Extract from the brief: the business problem, who asks the questions, what sources hold the answers, and what "one good answer" looks like.
Then invent the customer. Never use the real customer's name in any artifact, even internal ones - they leak into films and repos. Invent a company, a program, and a roster, and keep them consistent everywhere. Today's fiction, reusable as a template: Meridian Manufacturing Group running Project Phoenix, an ECC-to-S/4HANA transformation, with eight workstreams each having a named lead and backup.
Write the fiction down once (a canon file) and treat it as law - every generated document, every dataset, every slide draws names, dates and numbers from it. When two artifacts disagree about who owns Procurement, the demo dies.
Stage 1 - The synthetic data plane (this is the differentiator)
Publish the customer's systems as static APIs on the commons at
kody-w/rapp-static-apis. Server-free, CORS-open, forkable, curl-able by anyone
with no credentials. See references/data-plane.md for the conventions, the
Microsoft IQ product family, and the exact build pattern.
Two things decide whether this lands:
Scale. Fourteen documents proves nothing and the audience will say so. A real tenant has hundreds. Generate to ~300 documents / 1.5-3 MB / thousands of passages using a deterministic generator, not hand-authored files. Weekly minutes across 26 weeks per workstream is the cheapest way to get there honestly.
Wire shape. Match the real API the customer would call - Microsoft Graph
paged driveItem listings with @odata.nextLink, SAP OData v2 {"d":{"results": [...]}}, Fabric executeQueries result envelopes. When the shapes are right,
"repoint two URLs at your tenant" is a true statement rather than a hope.
Stage 2 - Grounded, citation-first agents
Two stdlib-only agents on the rapp_ai platform (kody-w/rapp-ai):
- an ingest agent that walks the listing (following
@odata.nextLink), fetches documents concurrently, and chunks by markdown section - a companion agent that scores chunks and returns passages with their source document, section, author and URL
The instruction the companion returns to the orchestrating model matters more than the retrieval: tell it to answer only from the returned passages, cite each fact as a markdown link, and refuse when the corpus does not cover the question. An agent that says "the knowledge base does not cover this" is worth more than one that guesses, because the moment a customer catches a guess, nothing else in the demo is believed.
Open every answer with what was actually searched -
"Searched 300 program documents (3,344 passages) in 77 ms". Without it the
audience assumes a toy. scripts/knowledge_agents/ has both agents; adapt the
descriptions and the canon, keep the shape.
Keep both files stdlib-only. That is what makes Stage 5's lightning loop possible.
Stage 3 - Deploy the function app
Use scripts/deploy-rapp-kc.sh as the template. It encodes the compliant shape
for a policy-constrained subscription, where tenant policy will fight anything else:
identity-based storage (no keys - shared-key auth is policy-disabled), VNet with
private endpoints (public storage access is force-disabled), a file share for
hot-deployable agents, and a reused AAD-only Azure OpenAI resource.
Two failure modes worth knowing before they cost you an hour: az functionapp create refuses a storage account with networking restrictions unless you pass
VNet flags, and PIM Owner must be self-activated before any ARM write
(az rest ... roleAssignmentScheduleRequests, SelfActivate).
Verify by curling the live /api/health?deep=true and one real conversation
payload. Check agent_logs in the response - a plausible answer with no tool
call means the model fabricated it, which is a failure even though it reads well.
Stage 4 - The Copilot Studio suite
Build the suite in the two-solution shape: a parent solution holding the orchestrating agent, plus a connected child solution per tier holding the child agents it delegates to. Any builder that holds that shape works. Then import in order - children before the parent, connectors before agents - with fresh version names on every import, and publish.
Then the part that decides whether it answers at all: the manual MCP attach.
There is no API for it. references/mcp-attach.md has the four gates and the
browser recipe. The one that costs everyone an afternoon: authentication mode
defaults to User, and under User auth the tool attaches, appears in the panel,
publishes with no error, and never reaches the agent runtime. Switch it to
Maker.
Verify in Preview with a question only the data can answer, and read the citation. "It replied" is not evidence - an agent explaining that it cannot find anything is behaving correctly and looks like success at a glance.
Stage 5 - The lightning loop (the thing nobody else shows)
Because the platform loads *_agent.py from the file share at runtime, a changed
agent can be pushed over HTTP into the running app and answer seconds later, with
no redeploy and no solution reimport. Measured today: 11 s to push, ~9 s to a
changed answer in the channel.
Demo it live. Editing an agent in front of the customer and watching their Copilot change behaviour is the moment the room sits up.
Stage 6 - Capture the demo
scripts/capture_demo.py drives the published agent and records tab-only over
CDP. Read references/browser.md before touching a browser - it has the profile
clone that gives you a signed-in, automatable Chrome, and the hard rule:
never close that browser, open new tabs. Every close destroys a sign-in the
user performed by hand.
Two capture traps:
- Completion detection. A length plateau is not completion - the page sits still while the agent spins. Require no spinner text and a settled body, or you will type question 4 over question 3's "Working on it...".
- Turn on End user preview before rolling, or the chain-of-thought rows and raw tool identifiers are on screen for the whole take.
Then compress dead time with scripts/compress_demo.py - hard cuts only. Never
motion-interpolate text; it turns readable answers into ghosted soup.
Stage 7 - The films
Two cuts from the same capture, with different vocabularies:
- Customer showcase (~150 s) - the industry-film grammar. Sparse open, dense demo, locked CTA. No internal words at all.
- Internal training film (~140 s) - the manual gates from Stage 4, so the next engineer skips the afternoon you lost.
Also produce a NOBED variant of each - narration only, true digital silence
between reads - so the presenter can lay their own music under it. Use
scripts/remix_nobed.py; it is built in two steps for a reason explained in
references/film.md, along with the audio contract and the three defects that
shipped today before frame-reading caught them (tofu glyphs, a doubled narration
track, an amplified room-tone wash).
Style both to the Microsoft Fluent deck kit - light paper, blue left spine, four
-square mark. references/brand.md has the palette.
Watch the film. Extract frames across the whole timeline and read them. Then have a separate reviewer, briefed as the audience and blind to your intent, look for what you cannot see because you know what you meant.
Stage 8 - The workshop deck
A leave-behind the presenter can also deliver live: ~18 slides, speaker notes written as what he says rather than a re-read of the bullets, Fluent styling, and only numbers you measured.
Render every slide to PNG and read them. Static checks miss what the eye catches - today a decorative rule at a fixed Y struck through two labels because the text above it flowed taller than expected.
Where a fact is not yours to assert - the presenter's name, the customer's own
wording, the security answers - leave a visible [confirm] placeholder. Inventing
them is how a deck becomes wrong in the room.
Stage 9 - Catalog entry and paper trail
Package for the industry agents catalog: one-pager, both films, the deck, scenario inputs, and the deployment gates. Then write dated field notes into the work repo and, when the pattern is novel, a no-PII article. The commit history is the provenance - "we did it first" only holds if it is timestamped.
Gate what ships. Anything with live tenant coordinates (runbooks, deploy scripts) is internal-only and must be marked as such in the bundle.
Delegation
Stages 1, 7 and 8 are bulk artifact generation - hand them to background "muscle" model runs (see the muscle skill), e.g.
copilot -p "Read ORDER-<slug>.md ..." --allow-all-tools.
Write the order to a file first with numbered acceptance checks and a
"Flags / surprises" section; that section is where the real findings come from -
today a muscle flagged that our narration claimed a surface we had never
exercised, which was correct and which we then fixed.
Then gate-check by hand. The muscles' green suites are honest about what they tested and blind to everything else; every defect that mattered today was found by opening the artifact, not by reading a report.
The gates that apply to everything
- No PII, ever. No real customer name, employee name, tenant or subscription identifier in any artifact. Grep before every push and every render.
- Two vocabularies. Customer-facing content never says RAPP, Factory, brainstem, MVP-as-jargon, skill, pipeline, MCP, connector, or a Microsoft product we did not show. Internal content may.
- Only measured numbers. If it was not timed or counted today, it does not go on a slide or in a script.
- Never claim a surface you did not exercise. If the footage is the authoring preview, the narration says "built to answer in Microsoft 365 Copilot", not "answers in".
Run this — do not improvise
This capability's deterministic implementation is a RAPP single-file agent, linked beside this file as usecase_to_showcase_agent.py and embedded as the fenced Python below (sha256 cfa3ed5d6999be8d…; a byte-exact copy is also vaulted in the capsule comment at the end of this file). On a host with sandbox execution, run the linked file directly — if it is missing, write the fence contents verbatim to usecase_to_showcase_agent.py first:
python3 usecase_to_showcase_agent.py '{"key": "value"}' # arguments as one JSON object
echo '{"key": "value"}' | python3 usecase_to_showcase_agent.py # or on stdin
python3 usecase_to_showcase_agent.py --tool # emit the JSON tool contract
Treat stdout as a tool result. If it reports missing or unresolved inputs, stop and collect them. If it returns steps, execute those steps in order exactly as returned; if it returns instructions, follow them with the supplied inputs. Otherwise use the result verbatim. Do not invent behavior beyond that output. On a host without code execution, treat the Parameters schema and the code below as the exact specification and never paraphrase a step. Never edit inside the generated markers; a converter-equipped host can instead restore the original file checksum-verified with the installed rapp-agent-converter/scripts/toast.py convert SKILL.md --to agent.
"""UsecaseToShowcase -- Take a customer MVP use-case brief (a paragraph, a slide, a discovery transcript) all the way to a demonstrable showcase: a synthetic enterprise data plane at tenant scale, grounded citation-first agents, a deployed function app, a Copilot Studio suite that actually answers, a filmed customer showcase plus an internal training film, a workshop deck, and a catalog entry. Use for "build this out end to end", "make this real", "showcase this", or "film the demo". Every stage also stands alone.
Generated by the rapp skill from usecase-to-showcase. The RCI capsule at the bottom of this file carries the full original; `toast.py convert` restores it byte-exact."""
import json
import re
import sys
try:
from agents.basic_agent import BasicAgent
except ImportError: # running OUTSIDE a brainstem -- stay executable anyway.
class BasicAgent: # noqa: D101 - minimal stand-in, same contract
def __init__(self, name=None, metadata=None):
if name:
self.name = name
if metadata:
self.metadata = metadata
def perform(self, **kwargs):
return "Not implemented."
def system_context(self):
return None
def to_tool(self):
return {"type": "function", "function": {
"name": self.name,
"description": self.metadata.get("description", ""),
"parameters": self.metadata.get("parameters", {})}}
# The procedural layer, verbatim from the source capability.
INSTRUCTIONS = '# Use case to showcase\n\nOne brief in, a showable and defensible package out. The chain is:\n\n```\nbrief -> synthetic data plane -> grounded agents -> deployed app\n -> Copilot Studio suite -> captured demo -> films -> deck -> catalog entry\n```\n\nEach stage below can run alone. Work them in order the first time; later, jump to\nthe stage you need.\n\n**The standard this work is held to:** these get demoed to executives and\ncustomers. A claim that turns out to be untrue in the room costs more than a day\nof extra work. So every stage ends with evidence you gathered by exercising the\nreal artifact - not a green build, not a subagent's report.\n\n## Stage 0 - Read the brief, decide the fiction\n\nExtract from the brief: the business problem, who asks the questions, what\nsources hold the answers, and what "one good answer" looks like.\n\nThen invent the customer. **Never use the real customer's name in any artifact**,\neven internal ones - they leak into films and repos. Invent a company, a program,\nand a roster, and keep them consistent everywhere. Today's fiction, reusable as a\ntemplate: *Meridian Manufacturing Group* running *Project Phoenix*, an\nECC-to-S/4HANA transformation, with eight workstreams each having a named lead\nand backup.\n\nWrite the fiction down once (a canon file) and treat it as law - every generated\ndocument, every dataset, every slide draws names, dates and numbers from it. When\ntwo artifacts disagree about who owns Procurement, the demo dies.\n\n## Stage 1 - The synthetic data plane (this is the differentiator)\n\nPublish the customer's *systems* as static APIs on the commons at\n`kody-w/rapp-static-apis`. Server-free, CORS-open, forkable, curl-able by anyone\nwith no credentials. See `references/data-plane.md` for the conventions, the\nMicrosoft IQ product family, and the exact build pattern.\n\nTwo things decide whether this lands:\n\n**Scale.** Fourteen documents proves nothing and the audience will say so. A real tenant\nhas hundreds. Generate to **~300 documents / 1.5-3 MB / thousands of passages**\nusing a deterministic generator, not hand-authored files. Weekly minutes across\n26 weeks per workstream is the cheapest way to get there honestly.\n\n**Wire shape.** Match the real API the customer would call - Microsoft Graph\npaged `driveItem` listings with `@odata.nextLink`, SAP OData v2 `{"d":{"results":\n[...]}}`, Fabric `executeQueries` result envelopes. When the shapes are right,\n"repoint two URLs at your tenant" is a true statement rather than a hope.\n\n## Stage 2 - Grounded, citation-first agents\n\nTwo stdlib-only agents on the `rapp_ai` platform (`kody-w/rapp-ai`):\n\n- an **ingest** agent that walks the listing (following `@odata.nextLink`),\n fetches documents concurrently, and chunks by markdown section\n- a **companion** agent that scores chunks and returns passages **with their\n source document, section, author and URL**\n\nThe instruction the companion returns to the orchestrating model matters more\nthan the retrieval: tell it to answer only from the returned passages, cite each\nfact as a markdown link, and refuse when the corpus does not cover the question.\nAn agent that says "the knowledge base does not cover this" is worth more than\none that guesses, because the moment a customer catches a guess, nothing else in\nthe demo is believed.\n\nOpen every answer with what was actually searched -\n*"Searched 300 program documents (3,344 passages) in 77 ms"*. Without it the\naudience assumes a toy. `scripts/knowledge_agents/` has both agents; adapt the\ndescriptions and the canon, keep the shape.\n\nKeep both files stdlib-only. That is what makes Stage 5's lightning loop possible.\n\n## Stage 3 - Deploy the function app\n\nUse `scripts/deploy-rapp-kc.sh` as the template. It encodes the compliant shape\nfor a policy-constrained subscription, where tenant policy will fight anything else:\nidentity-based storage (no keys - shared-key auth is policy-disabled), VNet with\nprivate endpoints (public storage access is force-disabled), a file share for\nhot-deployable agents, and a reused AAD-only Azure OpenAI resource.\n\nTwo failure modes worth knowing before they cost you an hour: `az functionapp\ncreate` refuses a storage account with networking restrictions unless you pass\nVNet flags, and PIM Owner must be self-activated before any ARM write\n(`az rest ... roleAssignmentScheduleRequests`, `SelfActivate`).\n\nVerify by curling the live `/api/health?deep=true` and one real conversation\npayload. Check `agent_logs` in the response - a plausible answer with no tool\ncall means the model fabricated it, which is a failure even though it reads well.\n\n## Stage 4 - The Copilot Studio suite\n\nBuild the suite in the two-solution shape: a parent solution holding the\norchestrating agent, plus a connected child solution per tier holding the child\nagents it delegates to. Any builder that holds that shape works. Then import in\norder - children before the parent, connectors before agents - with fresh version\nnames on every import, and publish.\n\nThen the part that decides whether it answers at all: **the manual MCP attach**.\nThere is no API for it. `references/mcp-attach.md` has the four gates and the\nbrowser recipe. The one that costs everyone an afternoon: **authentication mode\ndefaults to User, and under User auth the tool attaches, appears in the panel,\npublishes with no error, and never reaches the agent runtime.** Switch it to\nMaker.\n\nVerify in Preview with a question only the data can answer, and read the\ncitation. "It replied" is not evidence - an agent explaining that it cannot find\nanything is behaving correctly and looks like success at a glance.\n\n## Stage 5 - The lightning loop (the thing nobody else shows)\n\nBecause the platform loads `*_agent.py` from the file share at runtime, a changed\nagent can be pushed over HTTP into the running app and answer seconds later, with\nno redeploy and no solution reimport. Measured today: **11 s to push, ~9 s to a\nchanged answer in the channel**.\n\nDemo it live. Editing an agent in front of the customer and watching their Copilot\nchange behaviour is the moment the room sits up.\n\n## Stage 6 - Capture the demo\n\n`scripts/capture_demo.py` drives the published agent and records **tab-only** over\nCDP. Read `references/browser.md` before touching a browser - it has the profile\nclone that gives you a signed-in, automatable Chrome, and the hard rule:\n**never close that browser, open new tabs**. Every close destroys a sign-in the\nuser performed by hand.\n\nTwo capture traps:\n\n- **Completion detection.** A length plateau is not completion - the page sits\n still while the agent spins. Require no spinner text *and* a settled body, or\n you will type question 4 over question 3's "Working on it...".\n- **Turn on End user preview** before rolling, or the chain-of-thought rows and\n raw tool identifiers are on screen for the whole take.\n\nThen compress dead time with `scripts/compress_demo.py` - hard cuts only. Never\nmotion-interpolate text; it turns readable answers into ghosted soup.\n\n## Stage 7 - The films\n\nTwo cuts from the same capture, with different vocabularies:\n\n- **Customer showcase** (~150 s) - the industry-film grammar. Sparse open, dense\n demo, locked CTA. No internal words at all.\n- **Internal training film** (~140 s) - the manual gates from Stage 4, so the next\n engineer skips the afternoon you lost.\n\nAlso produce a **NOBED** variant of each - narration only, true digital silence\nbetween reads - so the presenter can lay their own music under it. Use\n`scripts/remix_nobed.py`; it is built in two steps for a reason explained in\n`references/film.md`, along with the audio contract and the three defects that\nshipped today before frame-reading caught them (tofu glyphs, a doubled narration\ntrack, an amplified room-tone wash).\n\nStyle both to the Microsoft Fluent deck kit - light paper, blue left spine, four\n-square mark. `references/brand.md` has the palette.\n\n**Watch the film.** Extract frames across the whole timeline and read them. Then\nhave a separate reviewer, briefed as the audience and blind to your intent, look\nfor what you cannot see because you know what you meant.\n\n## Stage 8 - The workshop deck\n\nA leave-behind the presenter can also deliver live: ~18 slides, speaker notes written as\nwhat he *says* rather than a re-read of the bullets, Fluent styling, and only\nnumbers you measured.\n\nRender every slide to PNG and read them. Static checks miss what the eye catches -\ntoday a decorative rule at a fixed Y struck through two labels because the text\nabove it flowed taller than expected.\n\nWhere a fact is not yours to assert - the presenter's name, the customer's own\nwording, the security answers - leave a visible `[confirm]` placeholder. Inventing\nthem is how a deck becomes wrong in the room.\n\n## Stage 9 - Catalog entry and paper trail\n\nPackage for the industry agents catalog: one-pager, both films, the deck, scenario\ninputs, and the deployment gates. Then write dated field notes into the work repo\nand, when the pattern is novel, a no-PII article. The commit history is the\nprovenance - "we did it first" only holds if it is timestamped.\n\nGate what ships. Anything with live tenant coordinates (runbooks, deploy scripts)\nis internal-only and must be marked as such in the bundle.\n\n## Delegation\n\nStages 1, 7 and 8 are bulk artifact generation - hand them to background "muscle" model runs (see the `muscle` skill), e.g.\n`copilot -p "Read ORDER-<slug>.md ..." --allow-all-tools`.\nWrite the order to a file first with numbered acceptance checks and a\n"Flags / surprises" section; that section is where the real findings come from -\ntoday a muscle flagged that our narration claimed a surface we had never\nexercised, which was correct and which we then fixed.\n\nThen gate-check by hand. The muscles' green suites are honest about what they\ntested and blind to everything else; every defect that mattered today was found\nby opening the artifact, not by reading a report.\n\n## The gates that apply to everything\n\n- **No PII, ever.** No real customer name, employee name, tenant or subscription\n identifier in any artifact. Grep before every push and every render.\n- **Two vocabularies.** Customer-facing content never says RAPP, Factory,\n brainstem, MVP-as-jargon, skill, pipeline, MCP, connector, or a Microsoft\n product we did not show. Internal content may.\n- **Only measured numbers.** If it was not timed or counted today, it does not go\n on a slide or in a script.\n- **Never claim a surface you did not exercise.** If the footage is the authoring\n preview, the narration says "built to answer in Microsoft 365 Copilot", not\n "answers in".'
# Ordered commands lifted verbatim from the capability's own documentation.
STEPS = []
class UsecaseToShowcaseAgent(BasicAgent):
def __init__(self):
self.name = 'UsecaseToShowcase'
self.metadata = {
"name": "UsecaseToShowcase",
"description": "Take a customer MVP use-case brief (a paragraph, a slide, a discovery transcript) all the way to a demonstrable showcase: a synthetic enterprise data plane at tenant scale, grounded citation-first agents, a deployed function app, a Copilot Studio suite that actually answers, a filmed customer showcase plus an internal training film, a workshop deck, and a catalog entry. Use for \"build this out end to end\", \"make this real\", \"showcase this\", or \"film the demo\". Every stage also stands alone.",
"parameters": {
"type": "object",
"properties": {},
"required": []
}
}
super().__init__(name=self.name, metadata=self.metadata)
def perform(self, **kwargs): # toaster:generated-perform
return json.dumps({"status": "ok", "instructions": INSTRUCTIONS,
"inputs": kwargs,
"note": "Prose-only capability: follow INSTRUCTIONS "
"with the given inputs."}, indent=2)
if __name__ == "__main__":
# echo '{"arg": "value"}' | python3 usecase_to_showcase_agent.py
# python3 usecase_to_showcase_agent.py '{"arg": "value"}'
# python3 usecase_to_showcase_agent.py --tool # emit the JSON tool contract
_a = sys.argv[1:]
if _a and _a[0] == "--tool":
print(json.dumps(UsecaseToShowcaseAgent().to_tool(), indent=2))
else:
_raw = _a[0] if _a else (sys.stdin.read().strip() or "{}")
print(UsecaseToShowcaseAgent().perform(**json.loads(_raw)))
# rci-capsule:v1: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
…(truncated)