Route to the appropriate sub-skill based on the user's task. If the task is ambiguous, ask one clarifying question before routing. Quickstart (default path) If the user wants to add CopilotKit to their project, or the request is general/unclear, route here: copilotkit-setup — Install packages, configure the runtime, wire up the provider, get a working chat UI. Routing Table | Task | Sub-skill | |------|-----------| | Initial setup, installation, adding CopilotKit to a project | copilotkit-setup | | Building features — frontend tools, shared state, generative UI, actions | copilotkit-develop |…

\\n' skills=($(sort \u003c\u003c\u003c\"${skills[*]}\")); unset IFS\n\n# Build JSON output\njson='{\\n \"version\": 1,\\n \"skills\": {'\nfirst=true\nfor skill_name in \"${skills[@]}\"; do\n skill_dir=\"$SKILLS_DIR/$skill_name\"\n hash=$(compute_hash \"$skill_dir\")\n if [[ \"$first\" == true ]]; then\n first=false\n else\n json+=','\n fi\n json+=\"\\n \\\"$skill_name\\\": {\"\n json+=\"\\n \\\"source\\\": \\\"skills/$skill_name\\\",\"\n json+=\"\\n \\\"sourceType\\\": \\\"local\\\",\"\n json+=\"\\n \\\"computedHash\\\": \\\"$hash\\\"\"\n json+=\"\\n }\"\ndone\njson+='\\n }\\n}\\n'\n\ngenerated=$(printf \"$json\")\n\nif [[ \"$CHECK_MODE\" == true ]]; then\n if [[ ! -f \"$LOCK_FILE\" ]]; then\n echo \"ERROR: $LOCK_FILE does not exist\" >&2\n exit 1\n fi\n existing=$(cat \"$LOCK_FILE\")\n if [[ \"$generated\" == \"$existing\" ]]; then\n echo \"skills-lock.json is up to date.\"\n exit 0\n else\n echo \"ERROR: skills-lock.json is out of date. Run scripts/regenerate-lock.sh to update.\" >&2\n diff \u003c(echo \"$existing\") \u003c(echo \"$generated\") || true\n exit 1\n fi\nelse\n printf '%s\\n' \"$generated\" > \"$LOCK_FILE\"\n echo \"Generated $LOCK_FILE with ${#skills[@]} skill entries.\"\nfi\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":2513,"content_sha256":"92a9ed4f8991cd3c77081cfaec97453480ecd5662946fbc348a9c7b410fb70fe"},{"filename":"scripts/setup.sh","content":"#!/usr/bin/env bash\n#\n# setup.sh\n#\n# One-command setup for CopilotKit AI agent skills.\n# Installs public + internal skills, enables auto-updates,\n# then launches Claude Code to complete onboarding.\n#\n# Idempotent — skips steps that are already done.\n#\n# Usage:\n# curl -fsSL https://raw.githubusercontent.com/CopilotKit/skills/main/scripts/setup.sh | bash\n\nset -euo pipefail\n\necho \"=== CopilotKit Skills Setup ===\"\necho \"\"\n\nchanged=false\n\n# 1. Install public skills (skip if already present)\nif [ -d \"$HOME/.claude/skills/copilotkit-setup\" ] || [ -d \"$HOME/.agents/skills/copilotkit-setup\" ]; then\n echo \"Public skills already installed\"\nelse\n echo \"Installing CopilotKit/skills (public)...\"\n npx skills add copilotkit/skills --full-depth -y\n changed=true\nfi\n\n# 2. Install internal skills if user has CopilotKit org access (skip if already present)\nif [ -d \"$HOME/.claude/skills/cr-loop\" ] || [ -d \"$HOME/.agents/skills/cr-loop\" ]; then\n echo \"Internal skills already installed\"\nelif ssh -T [email protected] 2>&1 | grep -qi \"authenticated\" && \\\n git ls-remote [email protected]:CopilotKit/internal-skills.git HEAD &>/dev/null; then\n echo \"Installing CopilotKit/internal-skills (team member detected)...\"\n npx skills add CopilotKit/internal-skills -y\n changed=true\nelse\n echo \"Skipping internal skills (CopilotKit team access not detected)\"\nfi\n\n# 3. Enable auto-updates\npython3 \u003c\u003c 'PYEOF'\nimport json, os, sys\n\nsettings_path = os.path.expanduser(\"~/.claude/settings.json\")\nif not os.path.exists(settings_path):\n os.makedirs(os.path.dirname(settings_path), exist_ok=True)\n with open(settings_path, \"w\") as f:\n json.dump({}, f)\n\nwith open(settings_path) as f:\n settings = json.load(f)\n\nmarkets = settings.get(\"extraKnownMarketplaces\", {})\nchanged = False\n\nfor name in [\"copilotkit-plugins\", \"copilotkit-internal-plugins\"]:\n if name in markets and not markets[name].get(\"autoUpdate\"):\n markets[name][\"autoUpdate\"] = True\n changed = True\n\nif changed:\n with open(settings_path, \"w\") as f:\n json.dump(settings, f, indent=2)\n print(\"Enabled auto-updates\")\n # Signal to outer script\n sys.exit(2)\nPYEOF\nautoupdate_status=$?\nif [ \"$autoupdate_status\" -eq 2 ]; then\n changed=true\nfi\n\necho \"\"\n\nif [ \"$changed\" = true ]; then\n echo \"=== Setup complete ===\"\n echo \"\"\n if command -v claude &>/dev/null; then\n echo \"Launching Claude Code to finish onboarding...\"\n echo \"\"\n claude \"onboard me for CopilotKit\"\n else\n echo \"Start Claude Code and say: onboard me for CopilotKit\"\n fi\nelse\n echo \"Everything is already set up.\"\nfi\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":2638,"content_sha256":"4c645f5551774de526149818b2363307121e6da4ab29119cd6c5a0af4e39ee21"}],"content_json":{"type":"doc","content":[{"type":"paragraph","content":[{"text":"Route to the appropriate sub-skill based on the user's task. If the task is ambiguous, ask one clarifying question before routing.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Quickstart (default path)","type":"text"}]},{"type":"paragraph","content":[{"text":"If the user wants to add CopilotKit to their project, or the request is general/unclear, route here:","type":"text"}]},{"type":"paragraph","content":[{"text":"copilotkit-setup","type":"text","marks":[{"type":"link","attrs":{"href":"skills/copilotkit-setup/SKILL.md","title":null}},{"type":"strong"}]},{"text":" — Install packages, configure the runtime, wire up the provider, get a working chat UI.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Routing Table","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Task","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Sub-skill","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Initial setup, installation, adding CopilotKit to a project","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"copilotkit-setup","type":"text","marks":[{"type":"link","attrs":{"href":"skills/copilotkit-setup/SKILL.md","title":null}}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Building features — frontend tools, shared state, generative UI, actions","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"copilotkit-develop","type":"text","marks":[{"type":"link","attrs":{"href":"skills/copilotkit-develop/SKILL.md","title":null}}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Connecting agent frameworks — LangGraph, CrewAI, Mastra, Pydantic AI, etc.","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"copilotkit-integrations","type":"text","marks":[{"type":"link","attrs":{"href":"skills/copilotkit-integrations/SKILL.md","title":null}}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Debugging errors, fixing runtime issues, troubleshooting","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"copilotkit-debug","type":"text","marks":[{"type":"link","attrs":{"href":"skills/copilotkit-debug/SKILL.md","title":null}}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Upgrading versions, migrating between APIs","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"copilotkit-upgrade","type":"text","marks":[{"type":"link","attrs":{"href":"skills/copilotkit-upgrade/SKILL.md","title":null}}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"AG-UI protocol — building custom backends, event streaming, debugging protocol issues","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"copilotkit-agui","type":"text","marks":[{"type":"link","attrs":{"href":"skills/copilotkit-agui/SKILL.md","title":null}}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Contributing to the CopilotKit repo","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"copilotkit-contribute","type":"text","marks":[{"type":"link","attrs":{"href":"skills/copilotkit-contribute/SKILL.md","title":null}}]}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Update/refresh these skills, skills seem stale or wrong","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"copilotkit-self-update","type":"text","marks":[{"type":"link","attrs":{"href":"skills/copilotkit-self-update/SKILL.md","title":null}}]}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"MCP Documentation Server","type":"text"}]},{"type":"paragraph","content":[{"text":"The ","type":"text"},{"text":"copilotkit-docs","type":"text","marks":[{"type":"code_inline"}]},{"text":" MCP server at ","type":"text"},{"text":"mcp.copilotkit.ai/mcp","type":"text","marks":[{"type":"code_inline"}]},{"text":" provides live documentation search. Use its tools for up-to-date reference material:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"search-docs","type":"text","marks":[{"type":"code_inline"}]},{"text":" — search CopilotKit documentation by topic","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"search-code","type":"text","marks":[{"type":"code_inline"}]},{"text":" — search CopilotKit source code and examples","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"search-ag-ui-docs","type":"text","marks":[{"type":"code_inline"}]},{"text":" — search AG-UI protocol documentation","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"search-ag-ui-code","type":"text","marks":[{"type":"code_inline"}]},{"text":" — search AG-UI TypeScript SDK source","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Prefer MCP lookups over hardcoded knowledge when answering specific API or configuration questions.","type":"text"}]}]},"metadata":{"date":"2026-11-02","name":"copilotkit","author":"@skillopedia","source":{"stars":39,"repo_name":"skills","origin_url":"https://github.com/CopilotKit/skills/blob/HEAD/SKILL.md","repo_owner":"CopilotKit","body_sha256":"86f0a49410795f0e0ba8a1dc811add1e7a6e59c48393029a24e52d2be4611bf0","cluster_key":"5f1e4b7939d77225d222a6466ac3f59c67705b8b1ce3cd9b77042c68087aff38","clean_bundle":{"format":"clean-skill-bundle-v1","source":"CopilotKit/skills/SKILL.md","text_bytes":34594,"source_commit":"8d78cf908844a30d2909f7da4eb8cb6f51fa02ad","skills_sh_rank":12727,"attachment_count":6,"text_attachments":6,"attachment_storage":"skill_attachments","binary_attachments":0},"cluster_size":1,"skill_md_path":"SKILL.md","import_metadata":{"date":"2026-11-02","author":"@skillopedia","version":"v1","category":"ai-agent-development","category_label":"AI"},"exact_dupes_collapsed_into_this":0},"version":"v1","category":"ai-agent-development","import_tag":"skills-sh-top20k-2026-11","description":"Use when building with CopilotKit — setup, development, integrations, debugging, upgrading, or contributing. Routes to the appropriate specialized skill based on the task.","argument_hint":"\u003ctask>","user_invocable":true}},"renderedAt":1793666009880}

Route to the appropriate sub-skill based on the user's task. If the task is ambiguous, ask one clarifying question before routing. Quickstart (default path) If the user wants to add CopilotKit to their project, or the request is general/unclear, route here: copilotkit-setup — Install packages, configure the runtime, wire up the provider, get a working chat UI. Routing Table | Task | Sub-skill | |------|-----------| | Initial setup, installation, adding CopilotKit to a project | copilotkit-setup | | Building features — frontend tools, shared state, generative UI, actions | copilotkit-develop |…