
showcase-demo-debugging
Build, debug, and regression-test CopilotKit showcase demos. Use when working under showcase/, creating new showcase demos/items/cells/pills, implementing showcase features, investigating showcase demo bugs, D5/e2e-deep failures, aimock fixture gaps, direct-LLM versus aimock behavior, recording fixtures, testing every demo pill/cell, verifying repeated and interleaved suggestion-pill fixture stability, enforcing langgraph-python 1:1 parity, or migrating a demo to the v2 CopilotKit showcase flow.
- Installs
- 41
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/copilotkit/copilotkit --skill showcase-demo-debugging- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads showcase-demo-debugging automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Showcase Demo Work
Start Here
Before changing code or fixtures, read the current local guides:
showcase/README.mdshowcase/RUNBOOK.mdshowcase/DEBUGGING.mdshowcase/INTEGRATION-CHECKLIST.mdwhen adding or changing a demo
Use showcase/bin/showcase for showcase operations. Do not use raw docker compose, raw docker build, or direct harness commands unless the CLI lacks the needed operation and you explain why.
Prefer isolated runs when another session may be using showcase:
showcase/bin/showcase test <slug> --d5 --verbose --cycle --isolate
Baseline Rules
- Keep showcase demo code on CopilotKit v2 APIs.
- Treat
showcase/integrations/langgraph-pythonas the gold standard for D5 behavior. Every other showcase demo must be a 1:1 match tolanggraph-pythonfor the same demo behavior, prompts, pills, tool flow, UI assertions, and D5 coverage unless the user explicitly approves a documented divergence. - For new or migrated demos, compare dependency versions against
showcase/integrations/langgraph-pythonbefore implementation and keep the same versions or newer unless the user explicitly approves a documented divergence. - Use Google ADK as extra context only when it is relevant.
- For any D5 cell or migration, make every pill work against a real agent first, then implement fixtures, then run the local D5 validation until green.
- E2E tests for migrated demos should match the
langgraph-pythonbehavior and assertions unless the user explicitly approves a divergence. - Every pill in a demo must be exercised and covered by aimock-backed D5 replay before the demo is complete.
- When implementing a new feature, click every suggestion pill in the demo and verify it works before declaring the feature complete.
- With aimock replay, fixture behavior must be stable when a pill is clicked once, clicked five times in a row, clicked after another pill, and clicked again after intervening pills. The same pill should produce the same expected output for the same fixture-backed prompt regardless of prior pill order.
- Verify locally before saying a fix or demo is done.
- Do not weaken a demo to satisfy a test. The demo behavior is the product.
New Showcase Items
Use this workflow when creating a new showcase item, adding a new demo cell, adding suggestion pills, or implementing a new showcase feature. The same rules apply as debugging:
- Read the current showcase guides listed above.
- Find the matching
langgraph-pythondemo or define the newlanggraph-pythonbehavior first. - Compare dependencies with
showcase/integrations/langgraph-python; use the same versions or newer for shared demo/runtime/test dependencies unless a documented incompatibility requires otherwise. - Implement the demo behavior with CopilotKit v2 APIs and make every suggestion pill work against a real agent.
- If any local step talks to a real LLM, run it through aimock record mode so fixtures are captured.
- Convert recordings into deterministic source D5 fixtures.
- Verify every pill once, repeated, and interleaved under aimock replay.
- Add or update D5 E2E coverage for every pill.
- Run local validation before marking the new showcase item complete.
Do not treat new showcase work as done after the UI appears to work once. New demos need the same fixture consistency, replay stability, and regression coverage as bug fixes.
Bug Investigation Loop
- Read the relevant demo, D5 script, and existing fixtures before reproducing.
- Determine whether the flow is using aimock or a real LLM:
- Inspect
showcase/docker-compose.local.yml, provider base URLs, andshowcase/harness/fixtures/d5/*.json. - Check whether the matching fixture exists in
showcase/aimock/d5-all.jsonor source fixtures undershowcase/harness/fixtures/d5/. - Use
showcase/bin/showcase logs aimock --grep "fixture|match|NO match|404"after a run.
- Inspect
- If the flow is supposed to use aimock, reproduce with:
showcase/bin/showcase up aimock <slug> showcase/bin/showcase test <slug> --d5 --verbose --cycle - If fixtures look suspect, run aimock locally and inspect fixture matching before editing app code.
- If the flow bypasses aimock and talks directly to a real LLM, always run aimock in record mode locally for that step. Do not run an unrecorded real-LLM local flow. Use the recorded fixture output to make later replay deterministic and to reach aimock-backed D5 coverage.
- Once root cause is pinpointed and a fix is implemented, ask the user to click through the exact flow and confirm it works before locking the regression coverage.
- After the user confirms, add or update D5 fixtures and regression E2E coverage so the issue cannot silently return.
- For every additional issue the user reports while clicking around, repeat this same loop: reproduce, root cause, user verification, fixture, regression test.
Environment Setup
If a real LLM provider is needed, inspect showcase/.env without printing secret values. If the required key is missing or empty:
- Ensure
showcase/.envexists, copying fromshowcase/.env.exampleif needed. - Open it for the user:
code --new-window "F:\projects\cpk\CopilotKit\showcase\.env" - Ask the user to paste the required key, usually
OPENAI_API_KEY; useANTHROPIC_API_KEYorGOOGLE_API_KEYonly when the target provider needs it. - Ask the user to tell you when the file is saved. Do not ask them to paste secrets into chat.
If env/config changes affect containers, use:
showcase/bin/showcase recreate <slug>
Use rebuild only for dependency, Dockerfile, or non-mounted source changes.
Reproducing Interactively
If the user says they will reproduce manually, start the needed local services and ask them to click through the flow, then tell you when finished so you can inspect logs and recorded fixtures.
If the user asks you to reproduce from instructions, run the showcase demo in headed Playwright or the Browser MCP, interact until the bug is reproduced, and preserve the exact steps, prompt text, selected pill, URL, and observed failure.
Use headed D5 when useful:
showcase/bin/showcase test <slug> --d5 --headed --verbose --cycle
Recording Fixtures
For a new demo or any local step that talks to a real LLM, run aimock in record mode so the interaction becomes fixture-backed. This is mandatory: real-provider traffic should produce fixtures that can be replayed later.
docker compose -f showcase/docker-compose.local.yml -f showcase/docker-compose.record.yml --profile infra up -d aimock <slug>
This record-mode compose override is the accepted exception to the normal "use showcase/bin/showcase" rule until the showcase CLI has a first-class record command.
Then drive every pill in the demo manually or with the D5 harness. Recorded calls land under showcase/aimock/d5-recorded/.
After recording:
- Convert or move recorded output into source D5 fixtures under
showcase/harness/fixtures/d5/. - Ensure
showcase/aimock/d5-all.jsoncontains the replay fixture path required by current docs/scripts. - Run fixture validation.
- Re-run the demo with aimock replay only.
- Add or update D5 E2E coverage for every pill.
When using the existing D5 recorder helper, read showcase/scripts/record-d5-fixtures.mjs first. It documents the current recorder patch requirement for multi-turn fixtures. If aimock cannot record the needed response shape, do not fake the behavior in the demo; discuss the smallest upstream aimock change with the user.
Pill Replay Stability
When adding a feature, changing fixtures, or debugging any fixture-backed demo, verify suggestion-pill stability under aimock replay:
- Click each suggestion pill once in a fresh session and confirm the expected UI and assistant output.
- Click each suggestion pill repeatedly, including at least five consecutive clicks for pills that exercise LLM/tool behavior.
- Click multiple different pills one after another, then return to a previously clicked pill and confirm it still produces the same expected output.
- Inspect aimock logs for fixture misses, incorrect matches, repeated stale matches, or order-dependent matches.
- Fix fixture matching if output depends on click order, prior pills, or how many times the same pill was clicked.
Fixtures must be consistent and replayable. Do not rely on turnIndex or conversation history when a stable userMessage, toolCallId, hasToolResult, or more specific fixture key can make the replay deterministic across repeated and interleaved pill clicks.
Fixture Rules
- Source fixtures live under
showcase/harness/fixtures/d5/*.json. - Bundled runtime fixtures live in
showcase/aimock/d5-all.json. - Use
toolCallIdfor multi-turn disambiguation when a stable tool id exists; usehasToolResultonly when the exact tool id is unavailable or intentionally runtime-variable. - Do not introduce
turnIndexin new fixtures unless no stable request property can distinguish the turn and the divergence is documented. - Prefer stable, specific
userMessage,systemMessage,toolCallId, and tool-surface matching. Avoid broad catch-alls that can steal another pill's fixture. - After fixture edits, validate and recreate aimock:
showcase/bin/showcase fixtures validate showcase/bin/showcase recreate aimock showcase/bin/showcase test <slug> --d5 --verbose --cycle - If adding a new fixture file, update the compose mount and aimock Dockerfile copy rules when the current docs require it.
Regression Tests
Add regression coverage after the user confirms the fixed flow works:
- Add or update the D5 fixture for the exact prompt/pill/tool flow.
- Add an E2E regression that fails on the original bug and passes with the fix.
- Cover every pill in the demo, including pills that only exist to expose edge cases.
- Include repeated and interleaved pill-click coverage when fixtures are involved, so a fixture cannot pass only on a single first click.
- Match the langgraph-python D5 assertion style and behavior 1:1 for equivalent demos.
- Include every separate user-reported demo issue as its own covered behavior unless a single test naturally covers the shared root cause.
- Run the narrow relevant D5 test first, then broader showcase validation when the change touches shared fixtures, harness logic, runtime behavior, or multiple demos.
Aimock Upstream Gaps
If aimock lacks a feature needed to accurately replay the LLM provider response:
- Confirm the gap with a recorded provider response or logs.
- Avoid adding demo workarounds that hide the mismatch.
- Ask the user what the easiest way is for you to file the upstream PR.
- If approved, make the smallest aimock change, rebuild with:
showcase/bin/showcase aimock-rebuild --from <aimock-source-path> - Re-run the showcase D5 flow with the rebuilt aimock.
Done Criteria
Before final status:
- The root cause is stated concretely.
- The affected local showcase demos are running and their local URLs are provided in the overview so the user can manually test the fixed flows.
- The user has confirmed the fixed UI flow when manual verification was requested.
- Fixtures are deterministic and validated.
- Any real-LLM local run was routed through aimock record mode and produced replayable fixtures.
- Every pill in the affected demo has aimock-backed D5 coverage.
- Aimock fixture replay is stable for single, repeated, and interleaved suggestion-pill clicks.
- Non-
langgraph-pythondemo behavior matcheslanggraph-python1:1 or has an explicit documented user-approved divergence. - The relevant D5/e2e regression is present and passing locally.
- Any aimock limitation is either fixed upstream, linked to an upstream PR/plan, or explicitly called out as a blocker.
FAQ
What does the showcase-demo-debugging skill do?
Build, debug, and regression-test CopilotKit showcase demos. Use when working under showcase/, creating new showcase demos/items/cells/pills, implementing showcase features, investigating showcase demo bugs, D5/e2e-deep failures, aimock fixture gaps, direct-LLM versus aimock behavior, recording fixtures, testing every demo pill/cell, verifying repeated and interleaved suggestion-pill fixture stability, enforcing langgraph-python 1:1 parity, or migrating a demo to the v2 CopilotKit showcase flow.
How do I install showcase-demo-debugging?
Run npx skills add https://github.com/copilotkit/copilotkit --skill showcase-demo-debugging in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/showcase-demo-debugging/ (personal) or .claude/skills/showcase-demo-debugging/ (project).
Which AI agents can use showcase-demo-debugging?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is showcase-demo-debugging safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains showcase-demo-debugging?
It is published by copilotkit in copilotkit/copilotkit. It has 41 recorded installs.
More from copilotkit/copilotkit
copilotkit-debug
copilotkit/copilotkit
Use when diagnosing CopilotKit issues -- runtime connectivity failures, agent not responding, streaming errors, tool execution problems, transcription failures, version mismatches, and AG-UI event tracing.
copilotkit-develop
copilotkit/copilotkit
Use when building AI-powered features with CopilotKit v2 -- adding chat interfaces, registering frontend tools, sharing application context with agents, handling agent interrupts, and working with the CopilotKit runtime.
copilotkit-agui
copilotkit/copilotkit
Use when building custom agent backends, implementing the AG-UI protocol, debugging streaming issues, or understanding how agents communicate with frontends. Covers event types, SSE transport, AbstractAgent/HttpAgent patterns, state synchronization, tool calls, and human-in-the-loop flows.
react-core
copilotkit/copilotkit
@copilotkit/react-core — mount the CopilotKit provider (from @copilotkit/react-core/v2) in a Next.js App Router / React Router v7 / TanStack Start / SPA app, drop in CopilotChat/CopilotPopup/CopilotSidebar (v2 chat components ship from react-core/v2 — NOT react-ui, which is CSS-only in v2), access and subscribe to agents with useAgent / useAgentContext / useCapabilities, switch between multiple agents, manage durable Intelligence threads with useThreads, register browser-side tools via useFrontendTool, render tool calls with useRenderTool / useComponent / useDefaultRenderTool, gate execution with useHumanInTheLoop, wire file attachments with useAttachments, configure suggestion pills, and register activity- and custom-message renderers. Load the reference under references/ that matches your task.
runtime
copilotkit/copilotkit
@copilotkit/runtime — mount a fetch-native CopilotRuntime on any JS server, wire middleware, pick an AgentRunner, instantiate BuiltInAgent (Factory Mode with TanStack AI is the preferred default) or plug in any of 12 external agent frameworks (Mastra, LangGraph, CrewAI Crews/Flows, PydanticAI, ADK, LlamaIndex, Agno, AWS Strands, MS Agent Framework, AG2, A2A), enable Intelligence mode for durable threads + websocket, register server-side tools via defineTool, and wire voice transcription. Uses the fetch-based createCopilotRuntimeHandler primitive — the Express/Hono adapters are discouraged. Load the reference under references/ that matches your task.
copilotkit-setup
copilotkit/copilotkit
Use when adding CopilotKit to an existing project or bootstrapping a new CopilotKit project from scratch. Covers framework detection, package installation, runtime wiring (managed Intelligence or self-hosted SSE), provider setup, and first working chat integration.
Popular code quality & workflow skills
grill-me
mattpocock/skills
A relentless interview to sharpen a plan or design.
improve-codebase-architecture
mattpocock/skills
Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick.
handoff
mattpocock/skills
Compact the current conversation into a handoff document for another agent to pick up.
domain-modeling
mattpocock/skills
Build and sharpen a project's domain model. Use when discussing codebase terminology, writing or editing a GLOSSARY.md, or recording or editing an ADR.
codebase-design
mattpocock/skills
Shared vocabulary for designing deep modules. Use when the user wants to design or improve a module's interface, find deepening opportunities, decide where a seam goes, make code more testable or AI-navigable, or when another skill needs the deep-module vocabulary.
diagnosing-bugs
mattpocock/skills
Diagnosis loop for hard bugs and performance regressions. Use when the user says "diagnose"/"debug this", or reports something broken/throwing/failing/slow.