{"owner":"clockworklabs","repo":"SpacetimeDB","hasSkills":true,"totalSkillsCount":288,"totalTokensCount":108482,"categories":["anthropic-skill","root-instruction","claude-rule","marketplace","plugin-manifest","cursor-rule"],"hasMcp":true,"mcpConfig":{"mcpServers":{"SpacetimeDB":{"command":"npx","args":["-y","@modelcontextprotocol/server-SpacetimeDB"]}}},"found":["skills/csharp-server/SKILL.md","skills/mcp/SKILL.md","skills/csharp-client/SKILL.md","skills/cli/SKILL.md","skills/concepts/SKILL.md","skills/cpp-server/SKILL.md","skills/rust-server/SKILL.md","codex-plugin/plugins/spacetimedb/skills/cli/SKILL.md","skills/typescript-client/SKILL.md","skills/unity/SKILL.md","skills/typescript-server/SKILL.md","skills/unreal/SKILL.md","codex-plugin/plugins/spacetimedb/skills/concepts/SKILL.md","codex-plugin/plugins/spacetimedb/skills/cpp-server/SKILL.md","codex-plugin/plugins/spacetimedb/skills/csharp-client/SKILL.md","codex-plugin/plugins/spacetimedb/skills/csharp-server/SKILL.md","codex-plugin/plugins/spacetimedb/skills/mcp/SKILL.md","codex-plugin/plugins/spacetimedb/skills/rust-server/SKILL.md","codex-plugin/plugins/spacetimedb/skills/typescript-client/SKILL.md","codex-plugin/plugins/spacetimedb/skills/typescript-server/SKILL.md","codex-plugin/plugins/spacetimedb/skills/unity/SKILL.md","codex-plugin/plugins/spacetimedb/skills/unreal/SKILL.md","AGENTS.md","CLAUDE.md",".claude-plugin/marketplace.json",".agents/plugins/marketplace.json","tools/llm-oneshot/README.md","tools/llm-oneshot/package-lock.json","tools/llm-oneshot/package.json","tools/llm-sequential-upgrade/CLAUDE.md","tools/llm-sequential-upgrade/DEVELOP.md","tools/llm-sequential-upgrade/GRADING.md","tools/llm-sequential-upgrade/GRADING_WORKFLOW.md","tools/llm-sequential-upgrade/README.md","tools/llm-sequential-upgrade/RUNBOOK.md","tools/llm-sequential-upgrade/docker-compose.otel.yaml","tools/llm-sequential-upgrade/otel-collector-config.yaml","tools/release/README.md","tools/templates/README.md","tools/templates/package.json","tools/xtask-llm-benchmark/README.md","skills/cli/README.md","skills/concepts/README.md","skills/cpp-server/README.md","skills/csharp-client/README.md","skills/csharp-server/README.md","skills/mcp/README.md","skills/rust-server/README.md","skills/typescript-client/README.md","skills/typescript-server/README.md","skills/unity/README.md","skills/unreal/README.md","codex-plugin/.agents/plugins/marketplace.json","codex-plugin/plugins/spacetimedb/.mcp.json","tools/llm-sequential-upgrade/backends/mongodb.md","tools/llm-sequential-upgrade/backends/postgres.md","tools/llm-sequential-upgrade/backends/spacetime-templates.md","tools/llm-sequential-upgrade/backends/spacetime.md","tools/llm-sequential-upgrade/perf-benchmark/README.md","tools/llm-sequential-upgrade/perf-benchmark/package-lock.json","tools/llm-sequential-upgrade/perf-benchmark/package.json","tools/llm-sequential-upgrade/perf-benchmark/tsconfig.json","tools/llm-sequential-upgrade/templates/BUG_REPORT.template.md","tools/llm-sequential-upgrade/templates/ITERATION_LOG.template.md","tools/llm-sequential-upgrade/templates/README.md","codex-plugin/plugins/spacetimedb/.codex-plugin/plugin.json","demo/Blackholio/client-unity/Packages/manifest.json","demo/Blackholio/client-unity/Packages/packages-lock.json","tools/llm-oneshot/.cursor/rules/benchmark.mdc","tools/llm-oneshot/.cursor/rules/deployment.mdc","tools/llm-oneshot/.cursor/rules/frontend-csharp.mdc","tools/llm-oneshot/.cursor/rules/frontend-rust.mdc","tools/llm-oneshot/.cursor/rules/frontend-typescript.mdc","tools/llm-oneshot/.cursor/rules/grading.mdc","tools/llm-oneshot/.cursor/rules/patterns-react.mdc","tools/llm-oneshot/.cursor/rules/patterns-rust.mdc","tools/llm-oneshot/.cursor/rules/patterns-typescript.mdc","tools/llm-oneshot/.cursor/rules/postgres.mdc","tools/llm-oneshot/.cursor/rules/spacetimedb-styling.mdc","tools/llm-sequential-upgrade/perf-benchmark/optimized-reference/METHODOLOGY.md","tools/llm-oneshot/apps/chat-app/prompts/README.md","tools/llm-oneshot/apps/chat-app/prompts/base_mongodb.md","tools/llm-oneshot/apps/chat-app/prompts/base_postgres.md","tools/llm-oneshot/apps/chat-app/prompts/base_spacetime.md","tools/llm-oneshot/apps/chat-app/prompts/grading_checklist.md","tools/llm-oneshot/apps/chat-app/prompts/grading_rubric.md","tools/llm-oneshot/apps/chat-app/prompts/output_instructions.md","tools/llm-oneshot/apps/paint-app/prompts/README.md","tools/llm-oneshot/apps/paint-app/prompts/base_postgres.md","tools/llm-oneshot/apps/paint-app/prompts/base_spacetime.md","tools/llm-oneshot/apps/paint-app/prompts/grading_checklist.md","tools/llm-oneshot/apps/paint-app/prompts/grading_rubric.md","tools/llm-oneshot/apps/paint-app/prompts/output_instructions.md","demo/Blackholio/client-unity/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json","tools/llm-oneshot/apps/chat-app/prompts/composed/01_basic.md","tools/llm-oneshot/apps/chat-app/prompts/composed/02_scheduled.md","tools/llm-oneshot/apps/chat-app/prompts/composed/03_realtime.md","tools/llm-oneshot/apps/chat-app/prompts/composed/04_reactions.md","tools/llm-oneshot/apps/chat-app/prompts/composed/05_edit_history.md","tools/llm-oneshot/apps/chat-app/prompts/composed/06_permissions.md","tools/llm-oneshot/apps/chat-app/prompts/composed/07_presence.md","tools/llm-oneshot/apps/chat-app/prompts/composed/08_threading.md","tools/llm-oneshot/apps/chat-app/prompts/composed/09_private_rooms.md","tools/llm-oneshot/apps/chat-app/prompts/composed/10_activity.md","tools/llm-oneshot/apps/chat-app/prompts/composed/11_drafts.md","tools/llm-oneshot/apps/chat-app/prompts/composed/12_anon_migration.md","tools/llm-oneshot/apps/chat-app/prompts/composed/13_pinned.md","tools/llm-oneshot/apps/chat-app/prompts/composed/14_profiles.md","tools/llm-oneshot/apps/chat-app/prompts/composed/15_mentions.md","tools/llm-oneshot/apps/chat-app/prompts/composed/16_bookmarks.md","tools/llm-oneshot/apps/chat-app/prompts/composed/17_forwarding.md","tools/llm-oneshot/apps/chat-app/prompts/composed/18_slowmode.md","tools/llm-oneshot/apps/chat-app/prompts/composed/19_polls.md","tools/llm-oneshot/apps/chat-app/prompts/features/01_basic.md","tools/llm-oneshot/apps/chat-app/prompts/features/02_scheduled.md","tools/llm-oneshot/apps/chat-app/prompts/features/03_ephemeral.md","tools/llm-oneshot/apps/chat-app/prompts/features/04_reactions.md","tools/llm-oneshot/apps/chat-app/prompts/features/05_edit_history.md","tools/llm-oneshot/apps/chat-app/prompts/features/06_permissions.md","tools/llm-oneshot/apps/chat-app/prompts/features/07_presence.md","tools/llm-oneshot/apps/chat-app/prompts/features/08_threading.md","tools/llm-oneshot/apps/chat-app/prompts/features/09_private_rooms.md","tools/llm-oneshot/apps/chat-app/prompts/features/10_activity.md","tools/llm-oneshot/apps/chat-app/prompts/features/11_drafts.md","tools/llm-oneshot/apps/chat-app/prompts/features/12_anon_migration.md","tools/llm-oneshot/apps/chat-app/prompts/features/13_pinned.md","tools/llm-oneshot/apps/chat-app/prompts/features/14_profiles.md","tools/llm-oneshot/apps/chat-app/prompts/features/15_mentions.md","tools/llm-oneshot/apps/chat-app/prompts/features/16_bookmarks.md","tools/llm-oneshot/apps/chat-app/prompts/features/17_forwarding.md","tools/llm-oneshot/apps/chat-app/prompts/features/18_slowmode.md","tools/llm-oneshot/apps/chat-app/prompts/features/19_polls.md","tools/llm-oneshot/apps/chat-app/prompts/language/csharp-spacetime.md","tools/llm-oneshot/apps/chat-app/prompts/language/rust-spacetime.md","tools/llm-oneshot/apps/chat-app/prompts/language/typescript-mongodb.md","tools/llm-oneshot/apps/chat-app/prompts/language/typescript-postgres.md","tools/llm-oneshot/apps/chat-app/prompts/language/typescript-spacetime.md","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/BENCHMARK_COMPARISON_REPORT.md","tools/llm-oneshot/apps/paint-app/prompts/composed/01_basic.md","tools/llm-oneshot/apps/paint-app/prompts/composed/02_shapes.md","tools/llm-oneshot/apps/paint-app/prompts/composed/03_selection.md","tools/llm-oneshot/apps/paint-app/prompts/composed/04_layers.md","tools/llm-oneshot/apps/paint-app/prompts/composed/05_presence.md","tools/llm-oneshot/apps/paint-app/prompts/composed/06_comments.md","tools/llm-oneshot/apps/paint-app/prompts/composed/07_versions.md","tools/llm-oneshot/apps/paint-app/prompts/composed/08_permissions.md","tools/llm-oneshot/apps/paint-app/prompts/composed/09_follow.md","tools/llm-oneshot/apps/paint-app/prompts/composed/10_activity.md","tools/llm-oneshot/apps/paint-app/prompts/composed/11_sharing.md","tools/llm-oneshot/apps/paint-app/prompts/composed/12_full.md","tools/llm-oneshot/apps/paint-app/prompts/features/01_basic.md","tools/llm-oneshot/apps/paint-app/prompts/features/02_cursor_indicators.md","tools/llm-oneshot/apps/paint-app/prompts/features/03_shapes.md","tools/llm-oneshot/apps/paint-app/prompts/features/04_selection.md","tools/llm-oneshot/apps/paint-app/prompts/features/05_layers_locking.md","tools/llm-oneshot/apps/paint-app/prompts/features/06_presence.md","tools/llm-oneshot/apps/paint-app/prompts/features/07_comments.md","tools/llm-oneshot/apps/paint-app/prompts/features/08_version_history.md","tools/llm-oneshot/apps/paint-app/prompts/features/09_realtime_permissions.md","tools/llm-oneshot/apps/paint-app/prompts/features/10_follow_mode.md","tools/llm-oneshot/apps/paint-app/prompts/features/11_activity_feed.md","tools/llm-oneshot/apps/paint-app/prompts/features/12_private_canvases.md","tools/llm-oneshot/apps/paint-app/prompts/features/13_canvas_chat.md","tools/llm-oneshot/apps/paint-app/prompts/features/14_auto_cleanup.md","tools/llm-oneshot/apps/paint-app/prompts/features/15_text_sticky.md","tools/llm-oneshot/apps/paint-app/prompts/features/16_keyboard_shortcuts.md","tools/llm-oneshot/apps/paint-app/prompts/language/csharp-spacetime.md","tools/llm-oneshot/apps/paint-app/prompts/language/rust-spacetime.md","tools/llm-oneshot/apps/paint-app/prompts/language/typescript-postgres.md","tools/llm-oneshot/apps/paint-app/prompts/language/typescript-spacetime.md","tools/xtask-llm-benchmark/src/templates/csharp/server/global.json","tools/xtask-llm-benchmark/src/templates/typescript/server/package.json","tools/xtask-llm-benchmark/src/templates/typescript/server/tsconfig.json","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/GRADING_RESULTS.md","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/GRADING_RESULTS.md","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/README.md","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/GRADING_RESULTS.md","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/GRADING_RESULTS.md","tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/GRADING_RESULTS.md","tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/README.md","tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/GRADING_RESULTS.md","tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/README.md","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/GRADING_RESULTS.md","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/README.md","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/GRADING_RESULTS.md","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/README.md","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/GRADING_RESULTS.md","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/README.md","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/GRADING_RESULTS.md","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/README.md","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/GRADING_RESULTS.md","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/README.md","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/GRADING_RESULTS.md","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/README.md","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/GRADING_RESULTS.md","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/README.md","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/package-lock.json","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/package.json","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/tsconfig.json","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/package-lock.json","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/package.json","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/tsconfig.json","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/package-lock.json","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/package.json","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/tsconfig.json","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/tsconfig.node.json","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/package-lock.json","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/package.json","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/tsconfig.json","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/package-lock.json","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/package.json","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/tsconfig.json","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/package-lock.json","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/package.json","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/tsconfig.json","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/tsconfig.node.json","tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/package-lock.json","tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/package.json","tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/tsconfig.json","tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/tsconfig.node.json","tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/package-lock.json","tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/package.json","tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/tsconfig.json","tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/package-lock.json","tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/package.json","tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/tsconfig.json","tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/tsconfig.node.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/package-lock.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/package.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/tsconfig.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/tsconfig.node.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/package-lock.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/package.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/tsconfig.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/package-lock.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/package.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/tsconfig.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/server/package.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/server/tsconfig.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/client/package.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/client/tsconfig.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/server/package.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/server/tsconfig.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/package-lock.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/package.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/tsconfig.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/package-lock.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/package.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/tsconfig.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/package-lock.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/package.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/tsconfig.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/package-lock.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/package.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/tsconfig.json","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/package-lock.json","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/package.json","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/tsconfig.json","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/package-lock.json","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/package.json","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/tsconfig.json","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/package-lock.json","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/package.json","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/tsconfig.json","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/package-lock.json","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/package.json","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/tsconfig.json","tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/package-lock.json","tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/package.json","tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/tsconfig.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/package-lock.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/package.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/tsconfig.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/package-lock.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/package.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/tsconfig.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/package-lock.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/package.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/tsconfig.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/package-lock.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/package.json","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/tsconfig.json","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/package-lock.json","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/package.json","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/tsconfig.json","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/package-lock.json","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/package.json","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/tsconfig.json"],"skills":{"skills/csharp-server/SKILL.md":"---\nname: csharp-server\ndescription: SpacetimeDB C# server module SDK reference. Use when writing tables, reducers, or module logic in C#.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: server\n  language: csharp\n  cursor_globs: \"**/*.cs\"\n  cursor_always_apply: true\n---\n\n# SpacetimeDB C# SDK Reference\n\n## Module Structure\n\nReducers are static methods in a `static partial class`; tables are `public partial struct`s. This reference keeps everything in one `public static partial class Module`, which needs only `using SpacetimeDB;`:\n\nMethods exported through SpacetimeDB attributes, including reducers, procedures, views, HTTP handlers, and routers, must be `public static`; generated bindings invoke them from another class.\n\n```csharp\nusing SpacetimeDB;\n\npublic static partial class Module\n{\n    [SpacetimeDB.Table(Accessor = \"ScoreRecord\", Public = true)]\n    public partial struct ScoreRecord\n    {\n        [PrimaryKey]\n        [AutoInc]\n        public ulong Id;\n        public Identity Owner;\n        public uint Value;\n    }\n\n    [SpacetimeDB.Reducer]\n    public static void AddRecord(ReducerContext ctx, uint value)\n    {\n        ctx.Db.ScoreRecord.Insert(new ScoreRecord { Id = 0, Owner = ctx.Sender, Value = value });\n    }\n}\n```\n\n## Tables\n\n`[SpacetimeDB.Table(...)]` on a `public partial struct`. `Accessor` should be PascalCase:\n\n```csharp\n[SpacetimeDB.Table(Accessor = \"Entity\", Public = true)]\npublic partial struct Entity\n{\n    [PrimaryKey]\n    [AutoInc]\n    public ulong Id;\n    [SpacetimeDB.Index.BTree]\n    public Identity Owner;\n    public string Name;\n    [SpacetimeDB.Index.BTree]\n    public bool Active;\n}\n```\n\nOptions: `Accessor = \"PascalCase\"` (recommended), `Public = true`, `Scheduled = nameof(ReducerFn)`, `ScheduledAt = nameof(field)`, `Event = true`\n\n`ctx.Db` accessors use the `Accessor` name: `ctx.Db.Entity`, `ctx.Db.ScoreRecord`.\n\n## Column Types\n\n| C# type | Notes |\n|---------|-------|\n| `byte` / `ushort` / `uint` / `ulong` | unsigned integers |\n| `U128` / `U256` | large unsigned integers (SpacetimeDB types) |\n| `sbyte` / `short` / `int` / `long` | signed integers |\n| `I128` / `I256` | large signed integers (SpacetimeDB types) |\n| `float` / `double` | floats |\n| `bool` | boolean |\n| `string` | text |\n| `List<T>` | list/array |\n| `Identity` | user identity |\n| `ConnectionId` | connection handle |\n| `Timestamp` | server timestamp (microseconds since epoch) |\n| `TimeDuration` | duration in microseconds |\n| `Uuid` | UUID |\n\nOptional columns: nullable types (`string? Nickname`, `uint? HighScore`)\n\n## Column Attributes\n\nThe complete set of column attributes:\n\n```csharp\n[PrimaryKey]          // primary key\n[AutoInc]             // auto-increment (use 0 as placeholder on insert)\n[Unique]              // unique constraint; indexes the column, enables .Find()\n[SpacetimeDB.Index.BTree]  // btree index (enables .Filter() on this column)\n[Default(true)]       // migration-safe default for a newly appended field\n```\n\nDefaults support compatible addition of a newly appended field. Do not apply `[Default(...)]` to primary-key, unique, or auto-increment fields.\n\n## Indexes\n\nWrite the index attribute fully qualified: `[SpacetimeDB.Index.BTree]`. Prefer inline for single-column; multi-column uses struct-level:\n\n```csharp\n// Inline (preferred for single-column):\n[SpacetimeDB.Index.BTree]\npublic ulong AuthorId;\n// Access: ctx.Db.Post.AuthorId.Filter(authorId)\n\n// Multi-column (struct-level):\n[SpacetimeDB.Table(Accessor = \"Membership\")]\n[SpacetimeDB.Index.BTree(Accessor = \"ByGroupUser\", Columns = new[] { nameof(GroupId), nameof(UserId) })]\npublic partial struct Membership { public ulong GroupId; public Identity UserId; ... }\n```\n\nPrefer a multi-column index over filtering by one column and looping.\n\n## Reducers\n\n```csharp\n[SpacetimeDB.Reducer]\npublic static void CreateEntity(ReducerContext ctx, string name, int age)\n{\n    ctx.Db.Entity.Insert(new Entity { Owner = ctx.Sender, Name = name, Age = age, Active = true });\n}\n\n// No arguments:\n[SpacetimeDB.Reducer]\npublic static void DoReset(ReducerContext ctx) { ... }\n```\n\n## DB Operations\n\n```csharp\nvar row = ctx.Db.Entity.Insert(new Entity { Name = \"Sample\" });   // Insert; returns the row with AutoInc fields assigned\nctx.Db.Entity.Id.Find(entityId);                                  // Find by PK → Entity? (nullable)\nctx.Db.Entity.Identity.Find(ctx.Sender);                          // Find by unique column → Entity?\nif (ctx.Db.Entity.Id.Find(entityId) is { } entity) { ... }        // unwrap Entity? before member access\nctx.Db.Item.AuthorId.Filter(authorId);                            // Filter by index → IEnumerable<Item>\nctx.Db.Entity.Iter();                                             // All rows → IEnumerable<Entity>\nctx.Db.Entity.Count;                                              // Count rows\nctx.Db.Entity.Id.Update(existing with { Name = newName });        // Update by PK\nctx.Db.Entity.Id.Delete(entityId);                                // Delete by PK\n```\n\nNote: Filter/Iter return enumerables. Use `.ToList()` if you need to sort or mutate.\n\nThe pattern is `ctx.Db.{Accessor}.{ColumnName}.{Method}(value)` for all indexed column operations.\n\n## Lifecycle Hooks\n\n```csharp\n[SpacetimeDB.Reducer(ReducerKind.Init)]\npublic static void OnInit(ReducerContext ctx) { ... }\n\n[SpacetimeDB.Reducer(ReducerKind.ClientConnected)]\npublic static void OnConnect(ReducerContext ctx) { ... }\n\n[SpacetimeDB.Reducer(ReducerKind.ClientDisconnected)]\npublic static void OnDisconnect(ReducerContext ctx) { ... }\n```\n\n`ctx.ConnectionId` is `ConnectionId?`, including in connection lifecycle reducers. Check or unwrap it before storing it in a non-nullable column or passing it to an index accessor.\n\n## Views\n\n```csharp\n// Anonymous view (same result for all clients):\n[SpacetimeDB.View(Accessor = \"ActiveUsers\", Public = true)]\npublic static List<Entity> ActiveUsers(AnonymousViewContext ctx)\n{\n    return ctx.Db.Entity.Active.Filter(true).ToList();\n}\n\n// Per-user view:\n[SpacetimeDB.View(Accessor = \"MyEntities\", Public = true)]\npublic static List<Entity> MyEntities(ViewContext ctx)\n{\n    return ctx.Db.Entity.Owner.Filter(ctx.Sender).ToList();\n}\n```\n\nView contexts expose read-only table handles. These support `Count` plus `Find`/`Filter` on declared indexes, but not full-table `Iter()`. Start procedural view traversal from an indexed lookup or filter.\n\nQuery-builder views use `ViewContext`, `ctx.From`, and return `IQuery<T>` directly. Use `Where` for predicates and `RightSemijoin` when the result should contain right-side rows that have a matching left-side row:\n\n```csharp\nctx.From.Article().Where(article => article.Published.Eq(true));\nctx.From.Subscription().RightSemijoin(\n    ctx.From.Account(),\n    (subscription, account) => subscription.AccountId.Eq(account.Id)\n);\n```\n\nDeclare a procedural view primary key in its attribute: `[SpacetimeDB.View(Accessor = \"CatalogEntry\", Public = true, PrimaryKey = nameof(CatalogRow.Sku))]`.\n\nProcedural-view primary keys are explicit schema metadata. Add one only when the view itself is required to expose a primary key; a source table's primary key is not inherited by the view.\n\nInclusive btree ranges use tuples, for example `ctx.Db.Shipment.DeliverBy.Filter((new Timestamp(1_000), new Timestamp(2_000)))`.\n\n## Client Visibility Filters\n\n```csharp\n[ClientVisibilityFilter]\npublic static readonly Filter PrivateNoteFilter = new Filter.Sql(\n    \"SELECT * FROM OwnedRow WHERE Owner = :sender\"\n);\n```\n\n## Reducer Context API\n\n`ReducerContext` (`ctx`) is the only source of sender identity, time, and randomness; stdlib clocks and RNG are unavailable in modules.\n\n```csharp\n// Auth: ctx.Sender is the caller's Identity\nif (row.Owner != ctx.Sender)\n    throw new Exception(\"unauthorized\");\n\n// Server timestamp (deterministic per reducer call)\nctx.Db.Item.Insert(new Item { CreatedAt = ctx.Timestamp, .. });\n\n// Timestamp arithmetic\nvar expiry = ctx.Timestamp + new TimeDuration(delayMicros);\n\n// Deterministic RNG\nint roll = ctx.Rng.Next(1, 7);          // [1, 7): inclusive 1, exclusive 7\ndouble f = ctx.Rng.NextDouble();        // [0.0, 1.0)\n\n// Timestamp → milliseconds since epoch\ntimestamp.MicrosecondsSinceUnixEpoch / 1000\n```\n\n## Scheduled Tables\n\nDeclare the scheduled table and its reducer in the same `Module` class so `nameof(...)` resolves:\n\n```csharp\n[SpacetimeDB.Table(\n    Accessor = \"TickTimer\",\n    Scheduled = nameof(Tick),\n    ScheduledAt = nameof(ScheduledAt),\n    Public = true\n)]\npublic partial struct TickTimer\n{\n    [PrimaryKey]\n    [AutoInc]\n    public ulong ScheduledId;\n    public ScheduleAt ScheduledAt;\n}\n\n[SpacetimeDB.Reducer]\npublic static void Tick(ReducerContext ctx, TickTimer timer)\n{\n    // timer row is auto-deleted after this reducer runs\n}\n\n// One-time: fires once at a specific time\nvar at = new ScheduleAt.Time(ctx.Timestamp + new TimeDuration(10_000_000));\n// Repeating: fires on an interval\nvar at = new ScheduleAt.Interval(TimeSpan.FromSeconds(5));\n\nctx.Db.TickTimer.Insert(new TickTimer { ScheduledId = 0, ScheduledAt = at });\n```\n\nScheduled reducer callbacks use the ordinary `[SpacetimeDB.Reducer]` attribute. There is no `ReducerKind.Scheduled`; the table's `Scheduled` option associates the callback.\n\nTo construct a `ConnectionId` from a 128-bit numeric representation, encode it as exactly 16 little-endian bytes and call `ConnectionId.From(bytes)`. The result is nullable and must be checked before use.\n\n## Procedures and HTTP\n\nProcedures are unstable APIs, so modules using them should include `#pragma warning disable STDB_UNSTABLE`. They receive `ProcedureContext` and may return `[SpacetimeDB.Type]` values:\n\n```csharp\n[SpacetimeDB.Type]\npublic partial struct ResultValue { public string Value; }\n\n[SpacetimeDB.Procedure]\npublic static ResultValue Inspect(ProcedureContext ctx, string input) =>\n    new() { Value = input };\n```\n\nOutbound HTTP is available through `ctx.Http`; handle its success/error result before using the response. Open short database transactions with `ctx.WithTx`. Perform network I/O before opening the transaction, and keep only database work inside its callback.\n\n```csharp\nvar result = ctx.Http.Get(uri);\nvar text = result.Match(\n    response => response.Body.ToStringUtf8Lossy(),\n    error => throw new Exception(error.Message)\n);\n\nctx.WithTx(tx =>\n{\n    tx.Db.ScoreRecord.Insert(new ScoreRecord { Id = 0, Owner = ctx.Sender, Value = 1 });\n    return 0;\n});\n```\n\n`WithTx` is generic: its callback must return a value (use `return 0;` when no result is needed). The callback's generated `tx.Db` exposes module table accessors; `ProcedureContext` and `HandlerContext` do not expose tables directly.\n\nFor non-GET requests, construct and send an `HttpRequest` directly:\n\n```csharp\nvar result = ctx.Http.Send(new HttpRequest\n{\n    Uri = uri,\n    Method = SpacetimeDB.HttpMethod.Post,\n    Headers = new() { new HttpHeader(\"content-type\", \"text/plain\") },\n    Body = HttpBody.FromString(payload),\n});\n```\n\n`HttpResponse.StatusCode` is `ushort`. HTTP headers are `HttpHeader` values, not tuples, and each header's `Value` is `byte[]`; decode text values with `System.Text.Encoding.UTF8.GetString(header.Value)`. Treat bodies as bytes: use `HttpBody.FromString(...)` to create text, `new HttpBody(bytes)` to supply raw bytes, `ToBytes()` to read raw bytes, and `ToStringUtf8Lossy()` to read text. There is no `HttpBody.FromBytes`, and `ToString()` does not return body contents. Qualify `SpacetimeDB.HttpMethod` when .NET's implicit `System.Net.Http` imports could make the name ambiguous.\n\nScheduled procedures use the ordinary scheduled-table shape. Its `Scheduled` name refers to a `[SpacetimeDB.Procedure]` method taking `ProcedureContext` plus the scheduled row, and database access inside that procedure goes through `ctx.WithTx`.\n\nInbound HTTP uses handler attributes and one router. Handler database access also goes through `ctx.WithTx`:\n\n```csharp\n[SpacetimeDB.HttpHandler]\npublic static HttpResponse Health(HandlerContext ctx, HttpRequest request) => new(\n    200, HttpVersion.Http11, new(), HttpBody.FromString(\"ok\")\n);\n\n[SpacetimeDB.HttpRouter]\npublic static Router Routes() => SpacetimeDB.Router.New().Get(\"/health\", Handlers.Health);\n```\n\n`Handlers` is generated from methods marked `[SpacetimeDB.HttpHandler]`; do not declare it yourself. Reference an attributed method in a router as `Handlers.MethodName`.\n\n## Custom Types\n\n```csharp\n[SpacetimeDB.Type]\npublic enum Status { Online, Away, Offline }\n\n[SpacetimeDB.Type]\npublic partial struct Point { public float X; public float Y; }\n```\n\nTagged enums (discriminated unions): a `partial record` with empty body and no constructor parameters. Payloads are `[Type] partial struct`s:\n\n```csharp\n[SpacetimeDB.Type]\npublic partial struct Circle { public int Radius; }\n\n[SpacetimeDB.Type]\npublic partial struct Rectangle { public int Width; public int Height; }\n\n[SpacetimeDB.Type]\npublic partial record Shape : SpacetimeDB.TaggedEnum<(Circle Circle, Rectangle Rectangle)> { }\n\n// Construct variants via the generated nested constructors:\nvar a = new Shape.Circle(new Circle { Radius = 10 });\nvar b = new Shape.Rectangle(new Rectangle { Width = 4, Height = 6 });\n```\n","skills/mcp/SKILL.md":"---\nname: mcp\ndescription: Operate a running SpacetimeDB database through MCP tools rather than the CLI - list databases, read schemas, run SQL, and call reducers. Use when the client exposes spacetimedb MCP tools and the task is to inspect or change data in a live database.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: shared\n  language: all\n  cursor_globs: \"**/*\"\n  cursor_always_apply: false\ntriggers:\n  - inspect the database\n  - query the database\n  - list my databases\n  - read the schema\n  - call a reducer\n  - use the MCP server\n  - spacetimedb MCP\n---\n\n# SpacetimeDB over MCP\n\nA SpacetimeDB host speaks MCP, so an MCP-aware client can operate a live database with tool calls\ninstead of shell commands. If the client exposes `spacetimedb` tools, use them for anything that\nreads or changes a running database.\n\nCheck the tool list before deciding they are missing. The tools are passive: they appear as\n`spacetimedb.list_databases`, `spacetimedb.get_schema`, `spacetimedb.sql`, `spacetimedb.call`, and\n`spacetimedb.ping`, and nothing announces them.\n\n## Which to reach for\n\n| Task | Use |\n| --- | --- |\n| List databases, read a schema, run SQL, call a reducer | **MCP tools** |\n| init, build, publish, generate, start, logs | **`spacetime` CLI** (see the `cli` skill) |\n\nThe MCP tools only operate a database that already exists. They cannot scaffold a project, compile a\nmodule, publish, or generate bindings, so the two are complementary rather than alternatives. Prefer\nthe tools when they are present: they are typed, they return JSON, and the client can gate the\ndestructive ones. When no MCP client is attached, the equivalent CLI commands are correct.\n\n## The tools\n\n| Tool | Arguments | Returns |\n| --- | --- | --- |\n| `list_databases` | none | the databases **you own**, with identity and names |\n| `get_schema` | `database` | tables and reducers as JSON |\n| `sql` | `database`, `sql`, optional `confirmed` | rows as JSON |\n| `call` | `database`, `reducer`, optional `args` (JSON array) | the reducer outcome |\n| `ping` | optional `message` | a health check |\n\n`list_databases` lists only your own databases, so it is empty for an anonymous identity. Start there\nwhen you do not know the database name.\n\n## Two shapes, so read `tools/list` first\n\nA server is either host-wide or scoped to one database. Do not assume which:\n\n**Host-wide** (`spacetime mcp` with no database, or `POST /v1/mcp`). Every data tool takes a required\n`database` argument, a name or an identity, and `list_databases` is offered:\n\n```json\n{ \"name\": \"sql\", \"arguments\": { \"database\": \"mydb\", \"sql\": \"SELECT * FROM message\" } }\n```\n\n**Scoped** (`spacetime mcp <database>`, or `POST /v1/database/<db>/mcp`). The connection fixes the\ndatabase, so there is no `database` argument and no `list_databases`:\n\n```json\n{ \"name\": \"sql\", \"arguments\": { \"sql\": \"SELECT * FROM message\" } }\n```\n\nWhen `spacetime mcp` runs inside a project with a `spacetime.json` that has a single unambiguous\n`server`, it uses that server unless `--server` or `--no-config` is passed. It does not infer a\ndatabase from the config; omitting the database argument still means host-wide mode.\n\n## Rules that do not change\n\nThe tools run with your identity, exactly as the HTTP API does. The model is the same as everywhere\nelse, so the `concepts` skill still governs:\n\n1. **Reducers are the write path.** Use `call` to change data. It runs in a transaction that either\n   fully commits or fully rolls back.\n2. **SQL writes require ownership.** `sql` reads public tables; writing through it needs you to own\n   the database. Prefer `call`.\n3. **Private tables are not client-readable.** `get_schema` still shows a private table's\n   declaration, so a `no such table` error from `sql` usually means the table is private rather than\n   missing. Access depends on your identity, so do not assume a private table is readable.\n4. **Tool errors come back in band.** A failed reducer or a bad query returns a result with\n   `isError: true` and the message as text, not a transport failure. Read the text before retrying.\n\n## Inspecting a database\n\n```\nlist_databases {}\nget_schema     { \"database\": \"mydb\" }\nsql            { \"database\": \"mydb\", \"sql\": \"SELECT * FROM message\" }\ncall           { \"database\": \"mydb\", \"reducer\": \"send_message\", \"args\": [\"hello\"] }\n```\n\nPass `\"confirmed\": true` to `sql` to wait for a durably confirmed read.\n\n## Troubleshooting\n\n| Message | Meaning |\n| --- | --- |\n| `database argument must be a string` | The server is host-wide and you omitted `database` |\n| `unknown tool: list_databases` | The server is scoped to one database already |\n| `` `x` not found `` | No such database on this server, or a name where an identity was meant |\n| `no such table: x` | The table is private, or you are querying the wrong database |\n| No `spacetimedb` tools at all | No MCP server is connected. Use the CLI instead (`cli` skill) |\n\n`spacetime mcp` is UNSTABLE and subject to breaking changes. If a client cannot start it, fall back\nto the CLI commands in the `cli` skill.\n\nReference: https://spacetimedb.com/docs\n","skills/csharp-client/SKILL.md":"---\nname: csharp-client\ndescription: SpacetimeDB C#/.NET client SDK reference. Use when building C# clients that connect to SpacetimeDB (console, desktop, or any .NET app).\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: client\n  language: csharp\n  cursor_globs: \"**/*.cs\"\n  cursor_always_apply: true\n---\n\n# SpacetimeDB C# Client\n\nInstall: `dotnet add package SpacetimeDB.ClientSDK`\n\nGenerated bindings convert snake_case names to PascalCase, including row fields: a server column `trip_id` is `TripId` on client rows.\n\n## Connection\n\n```csharp\nusing SpacetimeDB;\nusing SpacetimeDB.Types;\n\nvar conn = DbConnection.Builder()\n    .WithUri(\"http://localhost:3000\")\n    .WithDatabaseName(\"my-database\")\n    .WithToken(savedToken)\n    .WithCompression(Compression.Brotli) // optional; this is the default\n    .OnConnect((conn, identity, token) =>\n    {\n        Console.WriteLine($\"Connected as: {identity}\");\n        // Save token for reconnection\n        File.WriteAllText(\"auth_token.txt\", token);\n\n        conn.SubscriptionBuilder()\n            .OnApplied(OnSubscriptionApplied)\n            .SubscribeToAllTables();\n    })\n    .OnConnectError(err => Console.Error.WriteLine($\"Connection failed: {err}\"))\n    .OnDisconnect((conn, err) =>\n    {\n        if (err != null) Console.Error.WriteLine($\"Disconnected: {err}\");\n    })\n    .Build();\n```\n\nCompression options are `Compression.Brotli`, `Compression.Gzip`, and `Compression.None`. The SDK uses Brotli when `WithCompression` is omitted.\n\n## Automatic Reconnect and Token Refresh\n\nAutomatic reconnect is opt-in: add `.WithAutomaticReconnect()` to the builder. Initial connection failures do not retry. After an established connection is lost, the SDK retries with exponential backoff and jitter from `MinDelay` (default 1 s) up to `MaxDelay` (default 30 s); tune them with `.WithAutomaticReconnect(new AutomaticReconnectOptions { MinDelay = ..., MaxDelay = ... })`. Values below the 500 ms and 1 s floors are raised with a warning, so that retrying clients cannot overwhelm the database. `Disconnect()` permanently stops recovery.\n\nKeep calling `FrameTick()` while `IsActive` is false. `IsReconnecting` is true while recovering before the next handshake. Use `.OnDisconnect((conn, error, next) => ...)` and `.OnConnectError((error, next) => ...)` to inspect `NextReconnect?`: a non-null value provides `Attempt` and `Delay`; null means no retry is scheduled. Existing callback overloads still work.\n\n`OnConnect` runs on every successful reconnect, so create the subscription in the example above only on the first connection, or move it after `Build()`. Register row callbacks once as well. The same connection, identity, table handles, and subscriptions survive; each attempt gets a fresh `ConnectionId`. Cached rows stay readable but stale during outages. The SDK replays subscriptions in one batch and emits only net row changes. Subscription `OnApplied` runs again after replay; use it to mark data ready, not for repeated one-time setup.\n\nFor expiring credentials, combine `.WithToken(initialToken)` with `.WithTokenProvider(() => RefreshTokenAsync())`, where your provider returns `Task<string>` for the same identity. The provider is not called for the initial connection. Before retries, it is called when remaining validity is at most 30 seconds or 5% of the token lifetime, whichever is greater, when expiry cannot be read, or after a reused token is rejected. Provider failures retry; rejection of a freshly provided token is terminal. No periodic refresh runs while connected. Disconnecting ignores a pending provider result but does not cancel the provider's own work.\n\nCalls made while disconnected fail immediately. Pending reducer calls receive `Status.UnknownResult`; pending procedures and one-off queries fail with `UnknownResultException`. These calls may already have executed and are never replayed. Regenerate bindings so unhandled unknown reducer outcomes reach `OnUnhandledReducerError`.\n\n## Event Loop (Critical)\n\n**`FrameTick()` must be called in your main loop.** The SDK queues all network messages and only processes them when you call `FrameTick()`. Without it, no callbacks fire.\n\n```csharp\nwhile (running)\n{\n    conn.FrameTick();\n    // Your application logic...\n    Thread.Sleep(16); // ~60fps\n}\n```\n\n**Thread safety**: `FrameTick()` processes messages on the calling thread. Do NOT call it from a background thread. Do NOT access `conn.Db` from background threads.\n\n## Subscriptions\n\n```csharp\n// Subscribe to all tables\nconn.SubscriptionBuilder()\n    .OnApplied(ctx => Console.WriteLine(\"Subscription ready\"))\n    .SubscribeToAllTables();\n\n// Subscribe with typed query builder (recommended)\nconn.SubscriptionBuilder()\n    .OnApplied(OnSubscriptionApplied)\n    .AddQuery(q => q.From.Player().Where(p => p.Level.Gte(5u)))\n    .AddQuery(q => q.From.GameState())\n    .Subscribe();\n\n// Or with raw SQL strings\nconn.SubscriptionBuilder()\n    .OnApplied(OnSubscriptionApplied)\n    .Subscribe(new[] {\n        \"SELECT * FROM player WHERE level >= 5\",\n        \"SELECT * FROM game_state\"\n    });\n```\n\n## Row Callbacks\n\n```csharp\nconn.Db.Player.OnInsert += (EventContext ctx, Player player) =>\n{\n    Console.WriteLine($\"Player joined: {player.Name}\");\n};\n\nconn.Db.Player.OnDelete += (EventContext ctx, Player player) =>\n{\n    Console.WriteLine($\"Player left: {player.Name}\");\n};\n\nconn.Db.Player.OnUpdate += (EventContext ctx, Player oldPlayer, Player newPlayer) =>\n{\n    Console.WriteLine($\"Player updated: {newPlayer.Name}\");\n};\n```\n\n## Reading the Client Cache\n\n```csharp\n// Find by primary key\nif (conn.Db.Player.Id.Find(playerId) is Player player)\n{\n    Console.WriteLine($\"Player: {player.Name}\");\n}\n\n// Find by unique column\nvar me = conn.Db.Player.Identity.Find(myIdentity);\n\n// Filter by indexed column\nforeach (var p in conn.Db.Player.Level.Filter(5))\n{\n    Console.WriteLine($\"Level 5: {p.Name}\");\n}\n\n// Iterate all rows\nforeach (var p in conn.Db.Player.Iter())\n{\n    Console.WriteLine(p.Name);\n}\n\n// Count\nint total = conn.Db.Player.Count;\n```\n\n## Calling Reducers\n\n```csharp\nconn.Reducers.CreatePlayer(\"Alice\");\nconn.Reducers.MovePlayer(10.0f, 20.0f);\nconn.Reducers.SendMessage(\"Hello!\");\n```\n\nReducer calls return `void`; observe failures via the reducer callbacks below (`Status.Failed`).\n\n## Reducer Callbacks\n\n```csharp\nconn.Reducers.OnSendMessage += (ReducerEventContext ctx, string text) =>\n{\n    if (ctx.Event.Status is Status.Committed)\n        Console.WriteLine($\"Message sent: {text}\");\n    else if (ctx.Event.Status is Status.Failed(var reason))\n        Console.Error.WriteLine($\"Send failed: {reason}\");\n    else if (ctx.Event.Status is Status.UnknownResult)\n        Console.Error.WriteLine(\"Connection lost before the result arrived; the message may have been sent.\");\n};\n```\n\n## Identity\n\n```csharp\n// Identities from OnConnect callback\nIdentity myIdentity;\n\n// Compare identities\nif (player.Owner == myIdentity) { /* it's me */ }\n\n// Display\nConsole.WriteLine($\"Identity: {identity}\");\n```\n","skills/cli/SKILL.md":"---\nname: cli\ndescription: SpacetimeDB CLI reference for initializing projects, building modules, publishing databases, querying data, and managing servers\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: shared\n  language: all\n  cursor_globs: \"**/*\"\n  cursor_always_apply: false\ntriggers:\n  - spacetime init\n  - spacetime build\n  - spacetime publish\n  - spacetime dev\n  - spacetime sql\n  - spacetime call\n  - spacetime logs\n  - spacetime server\n  - spacetime login\n  - spacetime generate\n  - how do I use the CLI\n  - CLI command\n---\n\n# SpacetimeDB CLI\n\nUse this skill when the user needs help with the `spacetime` CLI tool - initializing projects, building modules, publishing databases, querying data, managing servers, or troubleshooting CLI issues.\n\n## Quick Reference\n\n### Project Initialization & Development\n\n```bash\n# Initialize new project\nspacetime init my-project --lang rust|csharp|typescript|cpp\nspacetime init my-project --template <template-id>\n\n# Build module\nspacetime build                    # release build\nspacetime build --debug            # faster iteration, slower runtime\n\n# Dev mode (auto-rebuild, auto-publish, generates bindings)\nspacetime dev\nspacetime dev --client-lang typescript --module-bindings-path ./client/src/module_bindings\n\n# Generate client bindings\nspacetime generate --lang typescript|csharp|rust --out-dir ./bindings --module-path ./server\nspacetime generate --lang unrealcpp --uproject-dir ./MyGame --module-path ./server --unreal-module-name MyGame\n```\n\n### Publishing & Deployment\n\n```bash\n# Publish to Maincloud (default)\nspacetime publish my-database --yes\n\n# Publish to local server\nspacetime publish my-database --server local --yes\n\n# Clear database and republish\nspacetime publish my-database --delete-data=always --yes\n```\n\n### Database Interaction\n\n```bash\n# SQL queries\nspacetime sql my-database \"SELECT * FROM users\"\nspacetime sql my-database --interactive   # REPL mode\n\n# Call reducers (each argument is a separate positional arg)\nspacetime call my-database my_reducer '\"value\"' '123'\n\n# Subscribe to changes\nspacetime subscribe my-database \"SELECT * FROM users\" --num-updates 10\n\n# View logs\nspacetime logs my-database -f              # follow logs\nspacetime logs my-database -n 100          # up to 100 log lines\n\n# Describe schema\n# (without --json, output is human-readable text)\nspacetime describe my-database --json\nspacetime describe my-database tables --json   # also views, reducers, procedures, routes, env, types\nspacetime describe my-database tables users --json\nspacetime describe my-database reducers my_reducer --json\n```\n\n### Database Management\n\n```bash\n# List databases\nspacetime list\n\n# Delete database\nspacetime delete my-database\n\n# Rename database\nspacetime rename <database-identity> --to new-name\n```\n\n### Server Management\n\n```bash\n# List configured servers\nspacetime server list\n\n# Add server\nspacetime server add local --url http://localhost:3000 --default\nspacetime server add myserver --url https://my-spacetime.example.com\n\n# Set default server\nspacetime server set-default local\n\n# Test connectivity\nspacetime server ping local\n\n# Start local instance\nspacetime start\n\n# Clear local data\nspacetime server clear\n```\n\n### Authentication\n\n```bash\n# Login (opens browser)\nspacetime login\n\n# Login with token\nspacetime login --token <token>\n\n# Show login status\nspacetime login show\n\n# Logout\nspacetime logout\n```\n\n## Default Servers\n\n| Name | URL | Description |\n|------|-----|-------------|\n| `maincloud` | `https://maincloud.spacetimedb.com` | Production cloud (default) |\n| `local` | `http://127.0.0.1:3000` | Local development server |\n\n## Common Flags\n\n| Flag | Short | Description |\n|------|-------|-------------|\n| `--server` | `-s` | Target server (nickname, hostname, or URL) |\n| `--yes` | `-y` | Non-interactive mode (skip confirmations) |\n| `--anonymous` | | Use anonymous identity |\n| `--module-path` | `-p` | Path to module project |\n| `--no-config` | | Ignore `spacetime.json` project configuration |\n\n## Troubleshooting\n\n### \"Not logged in\"\n```bash\nspacetime login\n# Or use --anonymous for public operations\n```\n\n### \"Server not responding\"\n```bash\nspacetime server ping <server>\n# For local: ensure spacetime start is running\n```\n\n### \"Schema conflict\"\n```bash\n# Clear data and republish\nspacetime publish my-db --delete-data=always --yes\n```\n\n### \"Build failed\"\n```bash\n# Check Rust/C# toolchain\nrustup show\n# For Rust modules, ensure wasm32-unknown-unknown target\nrustup target add wasm32-unknown-unknown\n```\n\n## Module Languages\n\n**Server-side (modules):** Rust, C#, TypeScript, C++\n**Client SDKs:** TypeScript, C#, Rust, Unreal Engine\n**CLI `generate` targets:** TypeScript, C#, Rust, Unreal C++\n","skills/concepts/SKILL.md":"---\nname: concepts\ndescription: Understand SpacetimeDB architecture and core concepts. Use when learning SpacetimeDB or making architectural decisions.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: shared\n  language: all\n  cursor_globs: \"**/*\"\n  cursor_always_apply: true\n---\n\n# SpacetimeDB Core Concepts\n\nSpacetimeDB is a relational database that is also a server. It lets you upload application logic directly into the database as modules, eliminating the traditional web/game server layer entirely. Rust, C#, and C++ modules compile to WebAssembly, while TypeScript modules run on V8.\n\n---\n\n## Critical Rules\n\n1. **Reducers are transactional.** They do not return data to callers. Use subscriptions to read data.\n2. **Reducers must be deterministic.** Do not use filesystem, network, external clocks, or external random sources in reducers. Use the reducer context (`ctx`) for SpacetimeDB-provided timestamp and deterministic random values.\n3. **Read data via tables/subscriptions**, not reducer return values. Clients get data through subscribed queries.\n4. **Auto-increment IDs are not sequential.** Gaps are normal, do not use for ordering. Use timestamps or explicit sequence columns.\n5. **`ctx.sender` is the authenticated principal.** Never trust identity passed as arguments.\n\n---\n\n## Feature Implementation Checklist\n\n1. **Backend:** Define table(s) to store the data\n2. **Backend:** Define reducer(s) to mutate the data\n3. **Client:** Subscribe to the table(s)\n4. **Client:** Call the reducer(s) from UI\n5. **Client:** Render the data from the table(s)\n\n---\n\n## Debugging Checklist\n\n1. Is SpacetimeDB server running? (`spacetime start`)\n2. Is the module published? (`spacetime publish`)\n3. Are client bindings generated? (`spacetime generate`)\n4. Check server logs for errors (`spacetime logs <db-name>`)\n5. Is the reducer actually being called from the client?\n\n---\n\n## Tables\n\n- **Private tables** (default): Only accessible by reducers and the database owner.\n- **Public tables**: Exposed for client read access through subscriptions. Writes still require reducers.\n\nOrganize data by access pattern, not by entity:\n\n```\nPlayer          PlayerState         PlayerStats\nid         <--  player_id           player_id\nname            position_x          total_kills\n                position_y          total_deaths\n                velocity_x          play_time\n```\n\n## Reducers\n\nReducers are transactional functions that modify database state. They run atomically, cannot interact with the outside world, and do not return data to callers. See the language-specific server skills for syntax.\n\n## Event Tables\n\nEvent tables broadcast reducer-specific data to clients. Rows are never stored in the client cache (`count()` returns 0, `iter()` yields nothing); only `onInsert` callbacks fire.\n\n## Subscriptions\n\nSubscriptions replicate database rows to clients in real-time.\n\n1. **Subscribe**: Register SQL queries describing needed data\n2. **Receive initial data**: All matching rows are sent immediately\n3. **Receive updates**: Real-time updates when subscribed rows change\n4. **React to changes**: Use callbacks (`onInsert`, `onDelete`, `onUpdate`)\n\nBest practices:\n- Group subscriptions by lifetime\n- Subscribe before unsubscribing when updating subscriptions\n- Avoid overlapping queries\n- Use indexes for efficient queries\n\n## Modules\n\nModules contain application logic that runs inside the database.\n\n- **Tables**: Define the data schema\n- **Reducers**: Define callable functions that modify state\n- **Event Tables**: Broadcast reducer-specific data to clients\n- **Views**: Read-only functions that expose computed subsets of data to clients\n- **Procedures**: (Unstable) Functions that can have side effects (HTTP requests, `ctx.withTx`)\n\nServer-side modules can be written in: Rust, C#, TypeScript, C++\n\nLifecycle: Write → Compile → Publish (`spacetime publish`) → Hot-swap (republish without disconnecting clients)\n\n## Identity\n\n- **Identity**: A long-lived, globally unique identifier for a user.\n- **ConnectionId**: Identifies a specific client connection.\n- Always use `ctx.sender` / `ctx.Sender` / `ctx.sender()` for authorization.\n\nSpacetimeDB works with many OIDC providers, including SpacetimeAuth (built-in), Auth0, Clerk, Keycloak, Google, and GitHub.\n","skills/cpp-server/SKILL.md":"---\nname: cpp-server\ndescription: SpacetimeDB C++ server module SDK reference. Use when writing tables, reducers, or module logic in C++.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: server\n  language: cpp\n  cursor_globs: \"**/*.cpp,**/*.h,**/*.hpp\"\n  cursor_always_apply: true\n---\n\n# SpacetimeDB C++ SDK Reference\n\n## Imports\n\n```cpp\n#include <spacetimedb.h>\nusing namespace SpacetimeDB;\n```\n\n## Tables\n\nRegister structs with macros, then declare as tables:\n\n```cpp\nstruct Entity {\n    uint64_t id;\n    Identity owner;\n    std::string name;\n    bool active;\n};\nSPACETIMEDB_STRUCT(Entity, id, owner, name, active)\nSPACETIMEDB_TABLE(Entity, entity, Public)\nFIELD_PrimaryKeyAutoInc(entity, id)\nFIELD_Index(entity, name)\n```\n\nOptions:\n- `SPACETIMEDB_TABLE(Type, accessor, Public|Private)`: regular table\n- `SPACETIMEDB_TABLE(Type, accessor, Public|Private, true)`: event table\n\nField constraints:\n- `FIELD_PrimaryKey(accessor, field)`: primary key\n- `FIELD_PrimaryKeyAutoInc(accessor, field)`: primary key with auto-increment (use 0 on insert)\n- `FIELD_Unique(accessor, field)`: unique constraint\n- `FIELD_Index(accessor, field)`: btree index (enables `.filter()`)\n\n## Column Types\n\n| C++ type | Notes |\n|----------|-------|\n| `uint8_t` / `uint16_t` / `uint32_t` / `uint64_t` | unsigned integers |\n| `SpacetimeDB::u128` / `SpacetimeDB::u256` | large unsigned integers |\n| `int8_t` / `int16_t` / `int32_t` / `int64_t` | signed integers |\n| `SpacetimeDB::i128` / `SpacetimeDB::i256` | large signed integers |\n| `float` / `double` | floats |\n| `bool` | boolean |\n| `std::string` | text |\n| `std::vector<T>` | list/array |\n| `std::optional<T>` | nullable column |\n| `Identity` | user identity |\n| `ConnectionId` | connection handle |\n| `Timestamp` | server timestamp (microseconds since epoch) |\n| `TimeDuration` | duration in microseconds |\n| `ScheduleAt` | for scheduled tables |\n\n## Indexes\n\n```cpp\n// Single-column:\nFIELD_Index(entity, name)\n// Access: ctx.db[entity_name].filter(\"Alice\")\n\n// Multi-column:\nFIELD_NamedMultiColumnIndex(score, by_player_and_level, player_id, level)\n```\n\nRange queries (included by `spacetimedb.h`; include `<spacetimedb/range_queries.h>` directly only when not using the umbrella header):\n```cpp\nctx.db[user_age].filter(range_inclusive(uint8_t(18), uint8_t(65)));\nctx.db[user_age].filter(range_from(uint8_t(18)));\n```\n\n## Reducers\n\nAll reducers return `ReducerResult`. Use `Ok()` or `Err(message)`:\n\n```cpp\nSPACETIMEDB_REDUCER(create_entity, ReducerContext ctx, std::string name) {\n    if (name.empty()) {\n        return Err(\"Name cannot be empty\");\n    }\n    ctx.db[entity].insert(Entity{0, ctx.sender(), name, true});\n    return Ok();\n}\n```\n\n## DB Operations\n\n```cpp\nctx.db[entity].insert(Entity{0, owner, \"Sample\", true});     // Insert (0 for autoInc)\nctx.db[entity_id].find(entityId);                             // Find by PK → std::optional\nctx.db[entity_identity].find(ctx.sender());                   // Find by unique column\nctx.db[entity_name].filter(\"Alice\");                          // Filter by index → iterable\nctx.db[entity];                                               // All rows → iterable (range-for)\nctx.db[entity].count();                                       // Count rows\n\n// Update: find, mutate, update\nif (auto e = ctx.db[entity_id].find(entityId)) {\n    e->name = \"New Name\";\n    ctx.db[entity_id].update(*e);\n}\n\n// Delete by primary key\nctx.db[entity_id].delete_by_key(entityId);\n```\n\nNote: Bracket notation `ctx.db[accessor]` is used for all table access. The accessor name comes from `SPACETIMEDB_TABLE` and `FIELD_*` macros.\n\n## Lifecycle Hooks\n\n```cpp\nSPACETIMEDB_INIT(init, ReducerContext ctx) {\n    LOG_INFO(\"Database initializing...\");\n    return Ok();\n}\n\nSPACETIMEDB_CLIENT_CONNECTED(on_connect, ReducerContext ctx) {\n    LOG_INFO(\"Connected: \" + ctx.sender().to_string());\n    return Ok();\n}\n\nSPACETIMEDB_CLIENT_DISCONNECTED(on_disconnect, ReducerContext ctx) {\n    LOG_INFO(\"Disconnected: \" + ctx.sender().to_string());\n    return Ok();\n}\n```\n\n## Authentication & Timestamps\n\n```cpp\n// Auth: ctx.sender() is the caller's Identity\nif (row.owner != ctx.sender()) {\n    return Err(\"unauthorized\");\n}\n\n// Server timestamps\nctx.db[item].insert(Item{0, ctx.sender(), ctx.timestamp});\n\n// Timestamp arithmetic\nTimestamp later = ctx.timestamp + TimeDuration::from_seconds(10);\n```\n\n## Reducer Context\n\n`ReducerContext` is the single source of sender identity, deterministic time, and deterministic randomness inside a reducer. Always go through `ctx` for these. Standard library clocks and random sources are not available in modules.\n\n```cpp\nctx.db[table]          // Table access (bracket notation)\nctx.sender()           // Caller's Identity\nctx.timestamp          // Invocation timestamp\nctx.connection_id      // std::optional<ConnectionId>\nctx.identity()         // Module's own identity\nctx.rng()              // Deterministic RNG\nctx.sender_auth()      // AuthCtx with JWT claims\n```\n\n## Scheduled Tables\n\n```cpp\nstruct Reminder {\n    uint64_t scheduled_id;\n    ScheduleAt scheduled_at;\n    std::string message;\n};\nSPACETIMEDB_STRUCT(Reminder, scheduled_id, scheduled_at, message)\nSPACETIMEDB_TABLE(Reminder, reminder, Public)\nFIELD_PrimaryKeyAutoInc(reminder, scheduled_id)\nSPACETIMEDB_SCHEDULE(reminder, 1, send_reminder)  // 1 = scheduled_at field index (0-based)\n\nSPACETIMEDB_REDUCER(send_reminder, ReducerContext ctx, Reminder arg) {\n    LOG_INFO(\"Reminder: \" + arg.message);\n    return Ok();\n}\n\n// One-time: fires at a specific time\nctx.db[reminder].insert(Reminder{0, ScheduleAt::time(ctx.timestamp + TimeDuration::from_seconds(10)), \"msg\"});\n// Repeating: fires on an interval\nctx.db[reminder].insert(Reminder{0, ScheduleAt::interval(TimeDuration::from_seconds(5)), \"msg\"});\n```\n\n## Custom Types\n\n```cpp\n// Struct (product type):\nstruct Point { float x; float y; };\nSPACETIMEDB_STRUCT(Point, x, y)\n\n// Enum (sum type):\nSPACETIMEDB_UNIT_TYPE(Active)\nSPACETIMEDB_UNIT_TYPE(Inactive)\nSPACETIMEDB_ENUM(PlayerStatus,\n    (Active, Active),\n    (Inactive, Inactive),\n    (Suspended, std::string)\n)\n```\n\n## Logging\n\n```cpp\nLOG_INFO(\"Message: \" + msg);\nLOG_WARN(\"Warning: \" + msg);\nLOG_ERROR(\"Error: \" + msg);\nLOG_DEBUG(\"Debug: \" + msg);\nLOG_PANIC(\"Fatal: \" + msg);   // terminates reducer\n```\n\n## Complete Example\n\n```cpp\n#include <spacetimedb.h>\nusing namespace SpacetimeDB;\n\nstruct Entity {\n    Identity identity;\n    std::string name;\n    bool active;\n};\nSPACETIMEDB_STRUCT(Entity, identity, name, active)\nSPACETIMEDB_TABLE(Entity, entity, Public)\nFIELD_PrimaryKey(entity, identity)\n\nstruct Record {\n    uint64_t id;\n    Identity owner;\n    uint32_t value;\n    Timestamp created_at;\n};\nSPACETIMEDB_STRUCT(Record, id, owner, value, created_at)\nSPACETIMEDB_TABLE(Record, record, Public)\nFIELD_PrimaryKeyAutoInc(record, id)\n\nSPACETIMEDB_CLIENT_CONNECTED(on_connect, ReducerContext ctx) {\n    if (auto existing = ctx.db[entity_identity].find(ctx.sender())) {\n        existing->active = true;\n        ctx.db[entity_identity].update(*existing);\n    }\n    return Ok();\n}\n\nSPACETIMEDB_CLIENT_DISCONNECTED(on_disconnect, ReducerContext ctx) {\n    if (auto existing = ctx.db[entity_identity].find(ctx.sender())) {\n        existing->active = false;\n        ctx.db[entity_identity].update(*existing);\n    }\n    return Ok();\n}\n\nSPACETIMEDB_REDUCER(create_entity, ReducerContext ctx, std::string name) {\n    if (ctx.db[entity_identity].find(ctx.sender())) {\n        return Err(\"already exists\");\n    }\n    ctx.db[entity].insert(Entity{ctx.sender(), name, true});\n    return Ok();\n}\n\nSPACETIMEDB_REDUCER(add_record, ReducerContext ctx, uint32_t value) {\n    if (!ctx.db[entity_identity].find(ctx.sender())) {\n        return Err(\"not found\");\n    }\n    ctx.db[record].insert(Record{0, ctx.sender(), value, ctx.timestamp});\n    return Ok();\n}\n```\n","skills/rust-server/SKILL.md":"---\nname: rust-server\ndescription: SpacetimeDB Rust server module SDK reference. Use when writing tables, reducers, or module logic in Rust.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: server\n  language: rust\n  cursor_globs: \"**/*.rs\"\n  cursor_always_apply: true\n---\n\n# SpacetimeDB Rust SDK Reference\n\n## Imports\n\n```rust\nuse spacetimedb::{\n    procedure, reducer, table, Filter, Identity, ProcedureContext, Query,\n    ReducerContext, SpacetimeType, Table, ConnectionId, ScheduleAt,\n    TimeDuration, Timestamp, Uuid,\n};\n```\n\n**`Table` is required.** Without it, `ctx.db.*.insert()`, `.iter()`, `.find()` etc. won't compile (`no method named 'insert' found`).\n\n## Tables\n\n`#[spacetimedb::table(...)]` on a `pub struct`. `accessor` must be snake_case:\n\n```rust\n#[spacetimedb::table(accessor = entity, public)]\npub struct Entity {\n    #[primary_key]\n    #[auto_inc]\n    pub id: u64,\n    pub owner: Identity,\n    pub name: String,\n    #[index(btree)]\n    pub active: bool,\n}\n```\n\nOptions: `accessor = snake_case` (required), `public`, `scheduled(reducer_fn)`, `index(...)`\n\n`ctx.db` accessors use the `accessor` name (snake_case).\n\n## Column Types\n\n| Rust type | Notes |\n|-----------|-------|\n| `u8` / `u16` / `u32` / `u64` / `u128` | unsigned integers |\n| `i8` / `i16` / `i32` / `i64` / `i128` | signed integers |\n| `spacetimedb::sats::u256` / `spacetimedb::sats::i256` | 256-bit integers |\n| `f32` / `f64` | floats |\n| `bool` | boolean |\n| `String` | text |\n| `Vec<T>` | list/array |\n| `Identity` | user identity |\n| `ConnectionId` | connection handle |\n| `Timestamp` | server timestamp (microseconds since epoch) |\n| `TimeDuration` | duration in microseconds |\n| `Uuid` | UUID |\n| `Option<T>` | nullable column |\n\n## Column Attributes\n\n```rust\n#[primary_key]          // primary key\n#[auto_inc]             // auto-increment (use 0 as placeholder on insert)\n#[unique]               // unique constraint\n#[index(btree)]         // btree index (enables .filter() on this column)\n#[default(true)]        // migration-safe default for a newly appended column\n```\n\nDefaults support compatible addition of a newly appended field. Do not place `#[default(...)]` on primary-key, unique, or auto-increment columns.\n\n## Indexes\n\nPrefer `#[index(btree)]` inline for single-column. Multi-column uses table-level:\n\n```rust\n// Inline (preferred for single-column):\n#[index(btree)]\npub author_id: u64,\n// Access: ctx.db.post().author_id().filter(author_id)\n\n// Multi-column (table-level):\n#[spacetimedb::table(accessor = membership, public,\n    index(accessor = by_group_user, btree(columns = [group_id, user_id]))\n)]\npub struct Membership { pub group_id: u64, pub user_id: Identity, ... }\n// Access: ctx.db.membership().by_group_user().filter((group_id, &user_id))\n```\n\nWhen you frequently look up rows by multiple columns, prefer a multi-column index over filtering by one column and looping over the results.\n\n## Reducers\n\n```rust\n#[spacetimedb::reducer]\npub fn create_entity(ctx: &ReducerContext, name: String) {\n    ctx.db.entity().insert(Entity { id: 0, owner: ctx.sender(), name, active: true });\n}\n\n// Reducers can return Result<(), String> or Result<(), E> where E: Display\n#[spacetimedb::reducer]\npub fn validate_entity(ctx: &ReducerContext, name: String) -> Result<(), String> {\n    if name.is_empty() {\n        return Err(\"Name cannot be empty\".to_string());\n    }\n    ctx.db.entity().try_insert(Entity { id: 0, owner: ctx.sender(), name, active: true })?;\n    Ok(())\n}\n```\n\nNote: `insert()` panics on constraint violations. Use `try_insert()` with `?` when returning `Result`.\n\n## DB Operations\n\n```rust\nctx.db.entity().insert(Entity { id: 0, name: \"Sample\".into() });  // Insert (0 for autoInc)\nctx.db.entity().id().find(entity_id);                              // Find by PK → Option<Entity>\nctx.db.entity().identity().find(ctx.sender());                     // Find by unique column → Option<Entity>\nctx.db.item().author_id().filter(author_id);                       // Filter by index → iterator\nctx.db.entity().iter();                                            // All rows → iterator\nctx.db.entity().count();                                           // Count rows\nctx.db.entity().id().update(Entity { name: new_name, ..existing }); // Update (override + spread)\nctx.db.entity().id().delete(entity_id);                            // Delete by PK\nctx.db.entity().name().delete(\"Alice\".to_string());                // Delete by indexed String column\n```\n\nNote: `iter()` and `filter()` return iterators. Collect to Vec if you need `.sort()`, `.filter()`, `.map()`.\n\nRange queries on btree indexes: `filter(18..=65)`, `filter(18..)`, `filter(..18)`.\n\nString column accessors operate on the column's owned `String` type, not `&str`. Pass a `String` or `&String` to `find` and `delete`; index filters borrow the key, as in `ctx.db.product().category().filter(&\"hardware\".to_string())`.\n\n## Lifecycle Hooks\n\n```rust\n#[spacetimedb::reducer(init)]\npub fn init(ctx: &ReducerContext) { ... }\n\n#[spacetimedb::reducer(client_connected)]\npub fn on_connect(ctx: &ReducerContext) { ... }\n\n#[spacetimedb::reducer(client_disconnected)]\npub fn on_disconnect(ctx: &ReducerContext) { ... }\n```\n\nThe current connection ID is available through `ctx.connection_id()` (not a public field) and may be absent outside connection-scoped calls.\n\n## Views\n\n```rust\n// Anonymous view (same result for all clients):\nuse spacetimedb::{view, AnonymousViewContext};\n\n#[view(accessor = active_users, public)]\nfn active_users(ctx: &AnonymousViewContext) -> Vec<Entity> {\n    ctx.db.entity().active().filter(true).collect()\n}\n\n// Per-user view (result varies by sender):\nuse spacetimedb::{view, ViewContext};\n\n#[view(accessor = my_profile, public)]\nfn my_profile(ctx: &ViewContext) -> Option<Entity> {\n    ctx.db.entity().identity().find(ctx.sender())\n}\n```\n\nProcedural-view table handles support indexed `find` and `filter` access, but not full-table `iter()`. Start a procedural view from an appropriate table index.\n\nDeclare a procedural view primary key in the view attribute:\n\n```rust\n#[view(accessor = catalog_entry, public, primary_key = sku)]\nfn catalog_entry(ctx: &AnonymousViewContext) -> Vec<CatalogEntry> { ... }\n```\n\nProcedural-view primary keys are explicit schema metadata. Add one only when the view itself is required to expose a primary key; a source table's primary key is not inherited by the view.\n\nQuery-builder views use `ViewContext`, `ctx.from`, and return `impl Query<Row>`. Use `filter` for predicates and `right_semijoin` when the result should contain right-side rows that have a matching left-side row:\n\n```rust\nctx.from.article().filter(|article| article.published.eq(true))\nctx.from.subscription().right_semijoin(\n    ctx.from.account(),\n    |subscription, account| subscription.account_id.eq(account.id),\n)\n```\n\nQuery-builder comparisons against a `String` column take an owned `String`, for example `row.label.eq(\"active\".to_string())`.\n\n## Client Visibility Filters\n\n```rust\nuse spacetimedb::Filter;\n\n#[spacetimedb::client_visibility_filter]\nconst PRIVATE_NOTE_FILTER: Filter =\n    Filter::Sql(\"SELECT * FROM owned_row WHERE owner = :sender\");\n```\n\n## Reducer Context API\n\n`ReducerContext` (`ctx`) is the only source of sender identity, time, and randomness; stdlib clocks and RNG are unavailable in modules.\n\n```rust\n// Auth: ctx.sender() is the caller's Identity\nif row.owner != ctx.sender() {\n    panic!(\"unauthorized\");\n    // or: return Err(anyhow::anyhow!(\"unauthorized\"));\n}\n\n// Server timestamp (deterministic per reducer call)\nctx.db.item().insert(Item { id: 0, owner: ctx.sender(), created_at: ctx.timestamp, .. });\n\n// Timestamp arithmetic\nlet expiry = ctx.timestamp + TimeDuration::from_micros(delay_micros);\n\n// Deterministic RNG: ctx.random() for a single value, ctx.rng() for the rand::Rng trait\nuse spacetimedb::rand::Rng;\nlet n: u32 = ctx.random();                    // random u32\nlet roll: u32 = ctx.rng().gen_range(1..=6);   // any rand::Rng method\n\n// Client: Timestamp → milliseconds since epoch\ntimestamp.to_micros_since_unix_epoch() / 1000\n```\n\n## Scheduled Tables\n\n```rust\n#[spacetimedb::table(accessor = tick_timer, scheduled(tick), public)]\npub struct TickTimer {\n    #[primary_key]\n    #[auto_inc]\n    scheduled_id: u64,\n    scheduled_at: spacetimedb::ScheduleAt,\n}\n\n#[spacetimedb::reducer]\npub fn tick(ctx: &ReducerContext, timer: TickTimer) {\n    // timer row is auto-deleted after this reducer runs\n}\n\n// One-time: fires once at a specific time\nlet at = ScheduleAt::Time(ctx.timestamp + std::time::Duration::from_secs(10));\n// Repeating: fires on an interval\nlet at = ScheduleAt::Interval(std::time::Duration::from_secs(5).into());\n\nctx.db.tick_timer().insert(TickTimer { scheduled_id: 0, scheduled_at: at });\n```\n\nConstruct a connection ID from a numeric representation with `ConnectionId::from_u128(value)`.\n\n## Procedures and HTTP\n\nProcedures use `&mut ProcedureContext` and may return typed values:\n\n```rust\nuse spacetimedb::{procedure, ProcedureContext, SpacetimeType};\n\n#[derive(SpacetimeType)]\npub struct ResultValue { pub value: String }\n\n#[procedure]\npub fn inspect(_ctx: &mut ProcedureContext, input: String) -> ResultValue {\n    ResultValue { value: input }\n}\n```\n\nOutbound HTTP is available through `ctx.http`. Convenience methods such as `get` return a response, and other methods use `Request::builder()` with `ctx.http.send(request)`. `response.status()` returns a `StatusCode`; use `is_success()` to test it or `as_u16()` when a numeric status is needed. Responses are not cloneable, so inspect status and headers before consuming the body with `response.into_body().into_string_lossy()`. Header values use the fallible `to_str()` conversion; they do not provide `as_str()`.\n\nOpen short database transactions with `ctx.with_tx(|tx| ...)`. Access tables inside the callback through `tx.db`, not directly on `tx`. It returns the callback's value directly, so do not call `unwrap` or `expect` on the result unless the callback itself returns a `Result`. The callback implements `Fn`, so clone captured owned values when storing them rather than moving them out of the closure. Perform network I/O before opening the transaction.\n\nFor an outbound request without a convenience method:\n\n```rust\nlet request = Request::builder()\n    .method(\"POST\")\n    .uri(url)\n    .body(Body::from_bytes(data))\n    .unwrap();\nlet response = ctx.http.send(request).expect(\"request failed\");\n```\n\nScheduled procedures use the ordinary scheduled-table shape, but the scheduled function is marked `#[procedure]` and receives `&mut ProcedureContext` plus the scheduled row.\n\nInbound HTTP uses handler functions and one router:\n\n```rust\nuse spacetimedb::http::{handler, router, Body, HandlerContext, Request, Response, Router};\n\n#[handler]\nfn health(_ctx: &mut HandlerContext, _request: Request) -> Response {\n    Response::builder().status(200).body(Body::from_bytes(\"ok\")).unwrap()\n}\n\n#[router]\nfn routes() -> Router { Router::new().get(\"/health\", health) }\n```\n\n`HandlerContext` does not expose `db`; open database access with `ctx.with_tx(|tx| ...)`. HTTP response bodies must own their data or borrow `'static` data, so convert dynamic borrowed text to an owned `String` before passing it to `Body::from_bytes`.\n\n## Logging\n\n```rust\nlog::info!(\"Player connected: {:?}\", ctx.sender());\nlog::warn!(\"Low health: {}\", hp);\nlog::error!(\"Failed to find entity\");\n```\n\n## Custom Types\n\n```rust\n#[derive(SpacetimeType)]\npub enum Status { Online, Away, Offline }\n\n#[derive(SpacetimeType)]\npub struct Point { x: f32, y: f32 }\n```\n\n## Complete Example\n\n```rust\n// src/lib.rs\nuse spacetimedb::{Identity, ReducerContext, SpacetimeType, Table, Timestamp};\n\n#[spacetimedb::table(accessor = entity, public)]\npub struct Entity {\n    #[primary_key]\n    pub identity: Identity,\n    pub name: String,\n    pub active: bool,\n}\n\n#[spacetimedb::table(accessor = record, public)]\npub struct Record {\n    #[primary_key]\n    #[auto_inc]\n    pub id: u64,\n    pub owner: Identity,\n    pub value: u32,\n    pub created_at: Timestamp,\n}\n\n#[spacetimedb::reducer(client_connected)]\npub fn on_connect(ctx: &ReducerContext) {\n    if let Some(existing) = ctx.db.entity().identity().find(ctx.sender()) {\n        ctx.db.entity().identity().update(Entity { active: true, ..existing });\n    }\n}\n\n#[spacetimedb::reducer(client_disconnected)]\npub fn on_disconnect(ctx: &ReducerContext) {\n    if let Some(existing) = ctx.db.entity().identity().find(ctx.sender()) {\n        ctx.db.entity().identity().update(Entity { active: false, ..existing });\n    }\n}\n\n#[spacetimedb::reducer]\npub fn create_entity(ctx: &ReducerContext, name: String) {\n    if ctx.db.entity().identity().find(ctx.sender()).is_some() {\n        panic!(\"already exists\");\n    }\n    ctx.db.entity().insert(Entity { identity: ctx.sender(), name, active: true });\n}\n\n#[spacetimedb::reducer]\npub fn add_record(ctx: &ReducerContext, value: u32) {\n    if ctx.db.entity().identity().find(ctx.sender()).is_none() {\n        panic!(\"not found\");\n    }\n    ctx.db.record().insert(Record {\n        id: 0,\n        owner: ctx.sender(),\n        value,\n        created_at: ctx.timestamp,\n    });\n}\n```\n","codex-plugin/plugins/spacetimedb/skills/cli/SKILL.md":"---\nname: cli\ndescription: SpacetimeDB CLI reference for initializing projects, building modules, publishing databases, querying data, and managing servers\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: shared\n  language: all\n  cursor_globs: \"**/*\"\n  cursor_always_apply: false\ntriggers:\n  - spacetime init\n  - spacetime build\n  - spacetime publish\n  - spacetime dev\n  - spacetime sql\n  - spacetime call\n  - spacetime logs\n  - spacetime server\n  - spacetime login\n  - spacetime generate\n  - how do I use the CLI\n  - CLI command\n---\n\n# SpacetimeDB CLI\n\nUse this skill when the user needs help with the `spacetime` CLI tool - initializing projects, building modules, publishing databases, querying data, managing servers, or troubleshooting CLI issues.\n\n## Quick Reference\n\n### Project Initialization & Development\n\n```bash\n# Initialize new project\nspacetime init my-project --lang rust|csharp|typescript|cpp\nspacetime init my-project --template <template-id>\n\n# Build module\nspacetime build                    # release build\nspacetime build --debug            # faster iteration, slower runtime\n\n# Dev mode (auto-rebuild, auto-publish, generates bindings)\nspacetime dev\nspacetime dev --client-lang typescript --module-bindings-path ./client/src/module_bindings\n\n# Generate client bindings\nspacetime generate --lang typescript|csharp|rust --out-dir ./bindings --module-path ./server\nspacetime generate --lang unrealcpp --uproject-dir ./MyGame --module-path ./server --unreal-module-name MyGame\n```\n\n### Publishing & Deployment\n\n```bash\n# Publish to Maincloud (default)\nspacetime publish my-database --yes\n\n# Publish to local server\nspacetime publish my-database --server local --yes\n\n# Clear database and republish\nspacetime publish my-database --delete-data=always --yes\n```\n\n### Database Interaction\n\n```bash\n# SQL queries\nspacetime sql my-database \"SELECT * FROM users\"\nspacetime sql my-database --interactive   # REPL mode\n\n# Call reducers (each argument is a separate positional arg)\nspacetime call my-database my_reducer '\"value\"' '123'\n\n# Subscribe to changes\nspacetime subscribe my-database \"SELECT * FROM users\" --num-updates 10\n\n# View logs\nspacetime logs my-database -f              # follow logs\nspacetime logs my-database -n 100          # up to 100 log lines\n\n# Describe schema\n# (without --json, output is human-readable text)\nspacetime describe my-database --json\nspacetime describe my-database tables --json   # also views, reducers, procedures, routes, env, types\nspacetime describe my-database tables users --json\nspacetime describe my-database reducers my_reducer --json\n```\n\n### Database Management\n\n```bash\n# List databases\nspacetime list\n\n# Delete database\nspacetime delete my-database\n\n# Rename database\nspacetime rename <database-identity> --to new-name\n```\n\n### Server Management\n\n```bash\n# List configured servers\nspacetime server list\n\n# Add server\nspacetime server add local --url http://localhost:3000 --default\nspacetime server add myserver --url https://my-spacetime.example.com\n\n# Set default server\nspacetime server set-default local\n\n# Test connectivity\nspacetime server ping local\n\n# Start local instance\nspacetime start\n\n# Clear local data\nspacetime server clear\n```\n\n### Authentication\n\n```bash\n# Login (opens browser)\nspacetime login\n\n# Login with token\nspacetime login --token <token>\n\n# Show login status\nspacetime login show\n\n# Logout\nspacetime logout\n```\n\n## Default Servers\n\n| Name | URL | Description |\n|------|-----|-------------|\n| `maincloud` | `https://maincloud.spacetimedb.com` | Production cloud (default) |\n| `local` | `http://127.0.0.1:3000` | Local development server |\n\n## Common Flags\n\n| Flag | Short | Description |\n|------|-------|-------------|\n| `--server` | `-s` | Target server (nickname, hostname, or URL) |\n| `--yes` | `-y` | Non-interactive mode (skip confirmations) |\n| `--anonymous` | | Use anonymous identity |\n| `--module-path` | `-p` | Path to module project |\n| `--no-config` | | Ignore `spacetime.json` project configuration |\n\n## Troubleshooting\n\n### \"Not logged in\"\n```bash\nspacetime login\n# Or use --anonymous for public operations\n```\n\n### \"Server not responding\"\n```bash\nspacetime server ping <server>\n# For local: ensure spacetime start is running\n```\n\n### \"Schema conflict\"\n```bash\n# Clear data and republish\nspacetime publish my-db --delete-data=always --yes\n```\n\n### \"Build failed\"\n```bash\n# Check Rust/C# toolchain\nrustup show\n# For Rust modules, ensure wasm32-unknown-unknown target\nrustup target add wasm32-unknown-unknown\n```\n\n## Module Languages\n\n**Server-side (modules):** Rust, C#, TypeScript, C++\n**Client SDKs:** TypeScript, C#, Rust, Unreal Engine\n**CLI `generate` targets:** TypeScript, C#, Rust, Unreal C++\n","skills/typescript-client/SKILL.md":"---\nname: typescript-client\ndescription: SpacetimeDB TypeScript/React client SDK reference. Use when building web clients that connect to SpacetimeDB.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: client\n  language: typescript\n  cursor_globs: \"**/*.tsx,**/*.ts\"\n  cursor_always_apply: true\n---\n\n# SpacetimeDB TypeScript Client\n\nGenerated bindings convert snake_case names to camelCase, including row fields: a server column `trip_id` is `tripId` on client rows.\n\n## React: main.tsx\n\n```typescript\nimport React, { useMemo } from 'react';\nimport ReactDOM from 'react-dom/client';\nimport { SpacetimeDBProvider } from 'spacetimedb/react';\nimport { DbConnection } from './module_bindings';\nimport { MODULE_NAME, SPACETIMEDB_URI } from './config';\nimport App from './App';\n\nconst TOKEN_KEY = `${SPACETIMEDB_URI}/${MODULE_NAME}/auth_token`;\n\nfunction Root() {\n  const connectionBuilder = useMemo(() =>\n    DbConnection.builder()\n      .withUri(SPACETIMEDB_URI)\n      .withDatabaseName(MODULE_NAME)\n      .withToken(localStorage.getItem(TOKEN_KEY) ?? undefined)\n      .withAutomaticReconnect()\n      .onConnect((_conn, _identity, token) => localStorage.setItem(TOKEN_KEY, token)),\n    []\n  );\n  return (\n    <SpacetimeDBProvider connectionBuilder={connectionBuilder}>\n      <App />\n    </SpacetimeDBProvider>\n  );\n}\n\nReactDOM.createRoot(document.getElementById('root')!).render(<Root />);\n```\n\n## React: App.tsx\n\n```typescript\nimport { useTable, useSpacetimeDB } from 'spacetimedb/react';\nimport { DbConnection, tables } from './module_bindings';\n\nexport default function App() {\n  const { isActive, identity: myIdentity, getConnection } = useSpacetimeDB();\n  const conn = getConnection() as DbConnection | null;\n\n  // useTable owns subscriptions and reports readiness after replay.\n  const [entities, entitiesReady] = useTable(tables.entity);\n  const [records, recordsReady] = useTable(tables.record);\n\n  const [onlineUsers] = useTable(\n    tables.entity.where(r => r.active.eq(true)),\n    {\n      onInsert: user => console.log('User connected:', user.name),\n      onDelete: user => console.log('User disconnected:', user.name),\n      onUpdate: (oldUser, newUser) => console.log('Updated:', newUser.name),\n    }\n  );\n\n  const addRecord = (data: string) => {\n    if (!conn || !isActive) return;\n    void conn.reducers.addRecord({ data }).catch(console.error);\n  };\n  const ownsEntity = entities.some(\n    row => row.owner.toHexString() === myIdentity?.toHexString()\n  );\n\n  return (\n    <main>\n      <p>{isActive ? 'Connected' : 'Not connected'}</p>\n      <p>{entitiesReady && recordsReady ? 'Data ready' : 'Waiting for current data'}</p>\n      <p>{onlineUsers.length} users online, {records.length} records</p>\n      <p>{ownsEntity ? 'You own an entity' : 'No owned entity'}</p>\n      <button disabled={!isActive} onClick={() => addRecord('Hello!')}>\n        Add record\n      </button>\n    </main>\n  );\n}\n```\n\n## Vanilla (non-React)\n\n```typescript\nimport { DbConnection, tables } from './module_bindings';\n\nconst HOST = 'wss://maincloud.spacetimedb.com';\nconst DATABASE = 'my_module';\nconst TOKEN_KEY = `${HOST}/${DATABASE}/auth_token`;\n\nconst conn = DbConnection.builder()\n  .withUri(HOST)\n  .withDatabaseName(DATABASE)\n  .withToken(localStorage.getItem(TOKEN_KEY) ?? undefined)\n  .withAutomaticReconnect()\n  .onConnect((_conn, identity, token) => {\n    localStorage.setItem(TOKEN_KEY, token);\n    console.log('Connected as:', identity.toHexString());\n  })\n  .onDisconnect((_ctx, error, nextAttempt, delayMs) => {\n    if (nextAttempt !== undefined) {\n      console.warn(`Reconnect attempt ${nextAttempt} in ${delayMs} ms`, error);\n    } else {\n      console.log('Connection ended', error);\n    }\n  })\n  .onConnectError((_ctx, error, nextAttempt, delayMs) => {\n    console.error('Connection failed:', error);\n    if (nextAttempt !== undefined) {\n      console.log(`Retry ${nextAttempt} in ${delayMs} ms`);\n    }\n  })\n  .build();\n\n// Register once; the SDK replays this subscription after reconnecting.\nconst subscription = conn.subscriptionBuilder()\n  .onApplied(() => console.log('Ready'))\n  .subscribe([tables.user, tables.message]);\n\n// Row callbacks\nconn.db.user.onInsert((ctx, user) => console.log('Joined:', user.name));\nconn.db.user.onDelete((ctx, user) => console.log('Left:', user.name));\nconn.db.user.onUpdate((ctx, oldUser, newUser) => console.log('Updated:', newUser.name));\n```\n\n## Automatic Reconnect and Token Refresh\n\nThe React provider's connection manager enables automatic reconnect; the explicit `.withAutomaticReconnect()` above also shows the setting to use for direct connections. Without it, a direct connection does not recover automatically. For direct connections, initial failures are not retried. After an established connection drops, retries use exponential backoff and jitter from `minDelayMs` (default 1 s) up to `maxDelayMs` (default 30 s), until `disconnect()` or a terminal failure. Tune these with `.withAutomaticReconnect({ minDelayMs, maxDelayMs })`; values below the 500 ms and 1 s floors are raised with a warning, so that retrying clients cannot overwhelm the database. While mounted, the React provider also preserves its separate connection-manager retries: it builds a replacement connection after an initial or terminal failure that the core connection will not retry. It respects an explicit `disconnect()`.\n\nThe same connection, identity, table handles, subscriptions, and row callbacks survive recovery. Each attempt gets a fresh connection ID. `onConnect` runs again before subscription replay, so register subscriptions and row callbacks once, outside that callback. The SDK replays subscriptions in one batch, retains readable but stale cached rows during outages, and emits net row changes after reconciliation. Subscription `onApplied` runs again after replay; keep one-time setup separate.\n\nIn React, let `useTable` manage its own subscriptions. Do not add a second subscription effect for the same queries or recreate subscriptions whenever `isActive` changes. Use the hook's `isReady` result for data readiness: a successful reconnect handshake does not mean replay has completed. Invoke reducers from event handlers, not during rendering. For a manually created subscription, retain its handle and call `unsubscribe()` when it is no longer needed, including during an outage.\n\nFor direct connections, `conn.isReconnecting` reports recovery before the next successful handshake. `onDisconnect` and `onConnectError` receive `(ctx, error, nextReconnectAttempt, nextReconnectDelayMs)`. The last two arguments are `undefined` when no retry is scheduled. Do not build a replacement connection or run your own retry timer while automatic recovery is pending. An explicit `conn.disconnect()` stops recovery, including a pending token refresh result.\n\nFor expiring credentials, also call `.withTokenProvider(() => refreshTokenAsync())`, where your authentication integration supplies `refreshTokenAsync(): Promise<string>`. Supply the initial token with `.withToken(initialToken)`; the provider is used only for reconnect attempts. It must return a non-empty token for the same identity. The SDK calls it when remaining validity is at most 30 seconds or 5% of the original lifetime, whichever is greater, when expiry cannot be read, or after a reused token is rejected. Provider failures retry; rejection of a freshly provided token is terminal. No periodic refresh runs while connected, and disconnecting does not cancel the provider's own asynchronous work.\n\nCalls made while disconnected fail immediately. Pending reducer and procedure promises reject with `UnknownCallResultError` (exported from `spacetimedb`) when the connection is lost before a result arrives. The server may have executed the operation; the SDK never replays it. Do not automatically retry non-idempotent calls on that error.\n\n## Gotchas\n\n- **`useTable` rows are `readonly`.** Copy before sorting/mutating, or it fails to type-check:\n  `const [rows] = useTable(tables.message); const sorted = [...rows].sort(...)`.\n- **bigint in JSX.** ids/counts from `t.u64()`/`t.i64()` columns are `bigint`, which React\n  cannot render. Wrap it: `{Number(row.id)}` or `{String(count)}`.\n","skills/unity/SKILL.md":"---\nname: unity\ndescription: Integrate SpacetimeDB with Unity game projects. Use when building Unity clients with MonoBehaviour lifecycle, FrameTick, and PlayerPrefs token persistence.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: client\n  language: csharp\n  cursor_globs: \"**/*.cs\"\n  cursor_always_apply: false\n  tested_with: \"SpacetimeDB 2.0, Unity 2022.3+\"\n---\n\n# SpacetimeDB Unity Integration\n\nThis skill covers Unity-specific patterns for connecting to SpacetimeDB. For server-side module development, see the `csharp-server` skill.\n\n---\n\n## Installation\n\nAdd via Unity Package Manager using the git URL:\n\n```\nhttps://github.com/clockworklabs/com.clockworklabs.spacetimedbsdk.git\n```\n\n**Window > Package Manager > + > Add package from git URL**\n\n---\n\n## Generate Module Bindings\n\n```bash\nspacetime generate --lang csharp --out-dir Assets/SpacetimeDB/module_bindings --module-path PATH_TO_MODULE\n```\n\nPlace generated files in your Assets folder so Unity compiles them.\n\n---\n\n## SpacetimeManager Singleton\n\nThe core pattern for Unity integration. This MonoBehaviour manages the connection lifecycle.\n\n```csharp\nusing UnityEngine;\nusing SpacetimeDB;\nusing SpacetimeDB.Types;\n\npublic class SpacetimeManager : MonoBehaviour\n{\n    private const string TOKEN_KEY = \"SpacetimeAuthToken\";\n    private const string SERVER_URI = \"http://localhost:3000\";\n    private const string DATABASE_NAME = \"my-game\";\n\n    public static SpacetimeManager Instance { get; private set; }\n    public DbConnection Connection { get; private set; }\n    public Identity LocalIdentity { get; private set; }\n\n    void Awake()\n    {\n        if (Instance != null && Instance != this) { Destroy(gameObject); return; }\n        Instance = this;\n        DontDestroyOnLoad(gameObject);\n    }\n\n    void Start()\n    {\n        string savedToken = PlayerPrefs.GetString(TOKEN_KEY, null);\n\n        Connection = DbConnection.Builder()\n            .WithUri(SERVER_URI)\n            .WithDatabaseName(DATABASE_NAME)\n            .WithToken(savedToken)\n            .OnConnect(OnConnected)\n            .OnConnectError(err => Debug.LogError($\"Connection failed: {err}\"))\n            .OnDisconnect((conn, err) => {\n                if (err != null) Debug.LogError($\"Disconnected: {err}\");\n            })\n            .Build();\n    }\n\n    void Update()\n    {\n        Connection?.FrameTick();\n    }\n\n    void OnDestroy()\n    {\n        Connection?.Disconnect();\n    }\n\n    private void OnConnected(DbConnection conn, Identity identity, string authToken)\n    {\n        LocalIdentity = identity;\n        PlayerPrefs.SetString(TOKEN_KEY, authToken);\n        PlayerPrefs.Save();\n\n        Debug.Log($\"Connected as: {identity}\");\n\n        conn.SubscriptionBuilder()\n            .OnApplied(OnSubscriptionApplied)\n            .SubscribeToAllTables();\n    }\n\n    private void OnSubscriptionApplied(SubscriptionEventContext ctx)\n    {\n        Debug.Log(\"Subscription applied: game state loaded\");\n    }\n}\n```\n\n---\n\n## FrameTick (Critical)\n\n**`FrameTick()` must be called every frame in `Update()`.** The SDK queues all network messages and only processes them when you call `FrameTick()`. Without it, no callbacks fire and the client appears frozen. See the `Update()` method in the SpacetimeManager above.\n\n**Thread safety**: `FrameTick()` processes messages on the calling thread (the main thread in Unity). Do NOT call it from a background thread. Do NOT access `conn.Db` from background threads.\n\n## Automatic Reconnect\n\nAdd `.WithAutomaticReconnect()` to the builder to recover an established connection after an outage. In the singleton above, create subscriptions only on the first `OnConnected`, or move them after `Build()`: `OnConnected` runs again after each successful reconnect. Keep calling `FrameTick()` during outages, or use `SpacetimeDBNetworkManager`, which also ticks reconnecting connections. Do not gate ticking on `IsActive`.\n\nThe SDK retains the identity, table handles, callbacks, and subscriptions, and replays subscriptions in one batch. Cached rows stay readable during an outage; row callbacks report net changes after recovery. `OnApplied` runs again, so separate one-time object setup from marking data ready. Each reconnect attempt has a fresh `ConnectionId`.\n\n`IsReconnecting` reports recovery before the next successful handshake. The `OnDisconnect((conn, error, next) => ...)` and `OnConnectError((error, next) => ...)` overloads expose `NextReconnect?`, with the upcoming `Attempt` and `Delay`, or null for a terminal failure. Initial connection failures do not retry. Retries use exponential backoff and jitter from `MinDelay` (default 1 s) up to `MaxDelay` (default 30 s), tunable with `.WithAutomaticReconnect(new AutomaticReconnectOptions { MinDelay = ..., MaxDelay = ... })`; values below the 500 ms and 1 s floors are raised with a warning, so that retrying clients cannot overwhelm the database. `Disconnect()` stops them.\n\nCalls made while disconnected fail immediately. Pending reducer calls may report `Status.UnknownResult`, meaning the server may have executed them; they are not replayed. Pending procedures and one-off queries fail with `UnknownResultException`. Regenerate bindings when upgrading to include unknown-outcome handling.\n\n---\n\n## Row Callbacks for Game State\n\nRegister callbacks to update Unity GameObjects when table data changes.\n\n```csharp\nvoid RegisterCallbacks()\n{\n    Connection.Db.Player.OnInsert += (EventContext ctx, Player player) => {\n        SpawnPlayerObject(player);\n    };\n\n    Connection.Db.Player.OnDelete += (EventContext ctx, Player player) => {\n        DestroyPlayerObject(player.Id);\n    };\n\n    Connection.Db.Player.OnUpdate += (EventContext ctx, Player oldPlayer, Player newPlayer) => {\n        UpdatePlayerObject(newPlayer);\n    };\n}\n```\n\nRegister these once after building the connection, before the first `FrameTick()`. Do not register them repeatedly in `OnConnected` or `OnSubscriptionApplied` when automatic reconnect is enabled.\n\n---\n\n## Calling Reducers from UI\n\n```csharp\npublic class GameUI : MonoBehaviour\n{\n    public void OnMoveButtonClicked(Vector2 direction)\n    {\n        SpacetimeManager.Instance.Connection.Reducers.MovePlayer(direction.x, direction.y);\n    }\n\n    public void OnSendChat(string message)\n    {\n        SpacetimeManager.Instance.Connection.Reducers.SendMessage(message);\n    }\n}\n```\n\n### Reducer Callbacks\n\n```csharp\nSpacetimeManager.Instance.Connection.Reducers.OnSendMessage += (ReducerEventContext ctx, string text) => {\n    if (ctx.Event.Status is Status.Committed)\n        Debug.Log($\"Message sent: {text}\");\n    else if (ctx.Event.Status is Status.Failed(var reason))\n        Debug.LogError($\"Send failed: {reason}\");\n    else if (ctx.Event.Status is Status.UnknownResult)\n        Debug.LogWarning(\"Connection lost before the result arrived; the message may have been sent.\");\n};\n```\n\n---\n\n## Reading the Client Cache\n\n```csharp\n// Find by primary key\nif (Connection.Db.Player.Id.Find(playerId) is Player player)\n{\n    Debug.Log($\"Player: {player.Name}\");\n}\n\n// Iterate all\nforeach (var p in Connection.Db.Player.Iter())\n{\n    Debug.Log(p.Name);\n}\n\n// Filter by index\nforeach (var p in Connection.Db.Player.Level.Filter(5))\n{\n    Debug.Log($\"Level 5: {p.Name}\");\n}\n\n// Count\nint total = Connection.Db.Player.Count;\n```\n\n---\n\n## Unity-Specific Considerations\n\n### Main Thread Only\nAll SpacetimeDB SDK calls (`FrameTick`, `conn.Db` access, reducer calls) must happen on the main thread. If you need to pass data to a background thread, copy it first in the callback.\n\n### Scene Loading\nUse `DontDestroyOnLoad(gameObject)` on the SpacetimeManager to prevent the connection from being destroyed during scene transitions. Without it, the connection drops every time you load a new scene.\n\n### IL2CPP / AOT\nThe SpacetimeDB SDK uses code generation. If you encounter issues with IL2CPP builds:\n- Ensure generated bindings are up to date\n- Check that `link.xml` preserves SpacetimeDB types if you use assembly stripping\n\n### Token Persistence\nToken save/load via `PlayerPrefs` is demonstrated in the SpacetimeManager singleton above. Persisting the server-issued token and passing it back on reconnect keeps the same identity; without a saved token the server issues a new identity in the `OnConnect` callback. This token does not expire and a lost one can't be recovered, so self-issued identities are for development. For production, authenticate with an OIDC provider such as SpacetimeAuth, which handles token lifecycle.\n\nWith automatic reconnect enabled, the SDK retains the authentication token and passes it to `OnConnect`, including on WebGL. Without automatic reconnect, a WebGL connection using a saved token may return a short-lived WebSocket token instead; in that case, keep the original saved token rather than overwriting it in the callback above.\n\nFor expiring credentials, configure `.WithToken(initialToken)`, `.WithAutomaticReconnect()`, and `.WithTokenProvider(() => RefreshTokenAsync())`. The provider returns `Task<string>` for the same identity. It is used before reconnect attempts when expiry is unreadable, remaining validity is at most 30 seconds or 5% of the original lifetime, or a reused token is rejected. It is not called for the initial connection or periodically while connected. Provider failures retry; rejection of a freshly provided token stops recovery. `Disconnect()` ignores a pending provider result without canceling the provider's own asynchronous work.\n","skills/typescript-server/SKILL.md":"---\nname: typescript-server\ndescription: SpacetimeDB TypeScript server module SDK reference. Use when writing tables, reducers, or module logic in TypeScript.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: server\n  language: typescript\n  cursor_globs: \"**/*.ts\"\n  cursor_always_apply: true\n---\n\n# SpacetimeDB TypeScript SDK Reference\n\n## Module Structure\n\nTables are built with `table()`, bound with `schema()`, and exported as default. Reducers and lifecycle hooks are `export const`:\n\n```typescript\nimport { schema, table, t } from 'spacetimedb/server';\n\nconst scoreRecord = table(\n  { name: 'score_record', public: true },\n  {\n    id: t.u64().primaryKey().autoInc(),\n    owner: t.identity(),\n    value: t.u32(),\n  }\n);\n\nconst spacetimedb = schema({ scoreRecord });  // ONE object, not spread args\nexport default spacetimedb;\n\nexport const addRecord = spacetimedb.reducer(\n  { value: t.u32() },\n  (ctx, { value }) => {\n    ctx.db.scoreRecord.insert({ id: 0n, owner: ctx.sender, value });\n  }\n);\n```\n\nOnly table definitions belong in `schema({...})`. Row and object builders used as reducer arguments or view return types are not schema entries.\n\nNamed runtime exports are reserved for values registered with SpacetimeDB, such as reducers, lifecycle hooks, views, procedures, HTTP exports, and visibility filters. Keep ordinary helper functions and constants unexported.\n\n## Imports\n\nSchema builders and module exports come from `spacetimedb/server`. Runtime value classes such as `ScheduleAt`, `Timestamp`, and `ConnectionId` come from the root `spacetimedb` package; `Range` comes from `spacetimedb/server`:\n\n```typescript\nimport {\n  schema, table, t, SenderError,\n  type InferSchema, type ReducerCtx,\n} from 'spacetimedb/server';\nimport { ConnectionId, ScheduleAt, Timestamp } from 'spacetimedb';\nimport { Range } from 'spacetimedb/server';\n```\n\n## Tables\n\n`table(OPTIONS, COLUMNS)` takes two arguments. The `name` field MUST be snake_case:\n\n```typescript\nconst entity = table(\n  { name: 'entity', public: true },\n  {\n    identity: t.identity().primaryKey(),\n    name: t.string(),\n    active: t.bool(),\n  }\n);\n```\n\nOptions: `name` (snake_case, recommended), `public: true`, `event: true`, `indexes: [...]`\n\n`ctx.db` accessors are the keys passed to `schema({...})`, verbatim: `schema({ scoreRecord })` -> `ctx.db.scoreRecord`. Keep TypeScript identifiers and accessors camelCase. Use explicit `name: 'snake_case'` strings when you need a canonical database name that differs from the TypeScript identifier.\n\n## Column Types\n\nEvery column is a `t` builder value:\n\n| Builder | JS type | Notes |\n|---------|---------|-------|\n| `t.u8()` / `t.u16()` / `t.u32()` | number | |\n| `t.i8()` / `t.i16()` / `t.i32()` | number | |\n| `t.u64()` | bigint | Use `0n` literals |\n| `t.i64()` | bigint | Use `0n` literals |\n| `t.u128()` / `t.i128()` / `t.u256()` / `t.i256()` | bigint | |\n| `t.f64()` / `t.f32()` | number | |\n| `t.bool()` | boolean | |\n| `t.string()` | string | |\n| `t.identity()` | Identity | |\n| `t.connectionId()` | ConnectionId | |\n| `t.timestamp()` | Timestamp | |\n| `t.timeDuration()` | TimeDuration | |\n| `t.scheduleAt()` | ScheduleAt | |\n\nModifiers: `.primaryKey()`, `.autoInc()`, `.unique()`, `.index('btree')`, `.default(value)`.\n\nUse `.default(value)` only for a newly appended migration-safe field. Do not put defaults on primary-key, unique, or auto-increment columns.\n\nOptional columns: `nickname: t.option(t.string())`\n\nSchema builders describe the database's wire types; they are not TypeScript type names. For example, a `t.u16()` value is a TypeScript `number`, not a value cast to a type named `u16`.\n\n## Indexes\n\nUse inline `.index('btree')` when a single-column index does not need a named accessor. Use an `indexes` entry when the accessor is named explicitly or the index spans multiple columns. Every `indexes` entry requires `columns`; do not also add `.index('btree')` to the same column.\n\n```typescript\n// Inline (preferred for single-column):\nauthorId: t.u64().index('btree'),\n// Access: ctx.db.post.authorId.filter(authorId);\n\n// Multi-column (named):\nindexes: [{ accessor: 'by_group_user', algorithm: 'btree', columns: ['groupId', 'userId'] }]\n// Access: ctx.db.membership.by_group_user.filter([groupId, userId]);\n```\n\nPrefer a multi-column index over filtering by one column and looping. Filter takes an array in index column order; a prefix scan passes the leading value bare: `filter(groupId)`.\n\nThe published module's **entry file must export the schema as default**. If you split tables\n(`schema.ts`) from reducers/lifecycle (`index.ts`), re-export it from the entry:\n\n```typescript\n// index.ts\nexport { default } from './schema';   // re-export the schema for the module entry\n```\n\n## Reducers\n\nReducers are created with `spacetimedb.reducer(...)`; the export name becomes the reducer name:\n\n```typescript\nexport const createEntity = spacetimedb.reducer(\n  { name: t.string(), age: t.i32() },\n  (ctx, { name, age }) => {\n    ctx.db.entity.insert({ identity: ctx.sender, name, age, active: true });\n  }\n);\n\n// No arguments, just the callback:\nexport const doReset = spacetimedb.reducer((ctx) => { ... });\n```\n\nReducer args accept any column type, including arrays of custom types: `{ splits: t.array(Split) }`. Do not pass JSON strings for structured data.\n\n## DB Operations\n\n```typescript\nctx.db.scoreRecord.insert({ id: 0n, owner: ctx.sender, value: 1 });  // Insert (0n for autoInc)\nctx.db.scoreRecord.id.find(recordId);                     // Find by PK → row | null\nctx.db.entity.identity.find(ctx.sender);                   // Find by unique column\n[...ctx.db.post.authorId.filter(authorId)];                // Filter → spread to Array\n[...ctx.db.entity.iter()];                                 // All rows → Array\nctx.db.scoreRecord.id.update({ ...existing, value: 2 });  // Update (spread + override)\nctx.db.scoreRecord.id.delete(recordId);                   // Delete by PK\n```\n\nInsert through the table accessor (`ctx.db.scoreRecord.insert(...)`). Primary-key, unique, and index accessors support lookup or mutation of existing rows, but do not have `insert(...)`.\n\n`insert(...)` returns the inserted row, including database-assigned auto-increment fields.\n\nThe accessor for a primary key or index is the declared column name. For example, a primary key named `eventId` is accessed as `ctx.db.event.eventId`, not `ctx.db.event.id`.\n\nThe schema value registers module exports but does not expose database rows. Pass a context into any helper that needs `ctx.db`.\n\nNote: `iter()` and `filter()` return iterators. Spread to Array for `.sort()`, `.filter()`, `.map()`.\n\n## Lifecycle Hooks\n\nMUST be `export const`. Bare calls are silently ignored:\n\n```typescript\nexport const init = spacetimedb.init((ctx) => { ... });\nexport const onConnect = spacetimedb.clientConnected((ctx) => { ... });\nexport const onDisconnect = spacetimedb.clientDisconnected((ctx) => { ... });\n```\n\n`ctx.connectionId` is `ConnectionId | null`, including in lifecycle contexts. Guard it before passing it to a helper or using it as a table key.\n\n## Reducer Context API\n\n`ctx` is the only source of sender identity, time, and randomness; stdlib clocks and RNG are unavailable in modules. Let exported callbacks infer their context type. In helpers, use `ReducerCtx<InferSchema<typeof spacetimedb>>`; do not annotate a context as `any`, because that erases table row types and can make `bigint` expressions infer as `number`.\n\n```typescript\ntype Ctx = ReducerCtx<InferSchema<typeof spacetimedb>>;\n\nfunction findRecord(ctx: Ctx, id: bigint) {\n  return ctx.db.scoreRecord.id.find(id);\n}\n```\n\n```typescript\n// Auth: ctx.sender is the caller's Identity\nif (!row.owner.equals(ctx.sender)) throw new SenderError('unauthorized');\n\n// ctx.connectionId: the per-connection id, NULLABLE (ConnectionId | null) — null-check before use.\n// One Identity can hold several connections (multiple tabs/devices).\nif (ctx.connectionId) { /* ... */ }\n\n// Server timestamp (deterministic per reducer call)\nctx.db.item.insert({ id: 0n, createdAt: ctx.timestamp });\n\n// Deterministic RNG\nconst f: number = ctx.random();                          // [0.0, 1.0)\nconst roll: number = ctx.random.integerInRange(1, 6);    // safe JS number bounds/result, inclusive\nconst storedRoll: bigint = BigInt(roll);                 // convert the result for an i64/u64 column\nconst bytes: Uint8Array = ctx.random.fill(new Uint8Array(16));\n\n// Client: Timestamp → Date\nnew Date(Number(row.createdAt.microsSinceUnixEpoch / 1000n));\n```\n\nDo not construct `Identity` values from strings (e.g. `'hex' as Identity`): serialization fails and kills the module. Identities come from `ctx.sender` or `t.identity()` columns.\n\nConstruct a `ConnectionId` from its numeric representation with `new ConnectionId(value)` after importing `ConnectionId` from `spacetimedb`.\n\nConstruct exact timestamps with `new Timestamp(micros)` after importing `Timestamp` from `spacetimedb`. Inclusive index ranges use `Range` from `spacetimedb/server`:\n\n```typescript\nimport { Timestamp } from 'spacetimedb';\nimport { Range } from 'spacetimedb/server';\n\nctx.db.shipment.deliverBy.filter(new Range(\n  { tag: 'included', value: new Timestamp(1_000n) },\n  { tag: 'included', value: new Timestamp(2_000n) },\n));\n```\n\n## Scheduled Tables\n\nThe reducer or procedure referenced by a table's `scheduled` option must be exported.\n\n```typescript\nimport { ScheduleAt } from 'spacetimedb';   // ScheduleAt comes from the root package\n\nconst tickTimer = table({\n  name: 'tick_timer',\n}, {\n  scheduledId: t.u64().primaryKey().autoInc(),\n  scheduledAt: t.scheduleAt(),\n});\n\nexport const tick = spacetimedb.reducer(\n  { onSchedule: tickTimer },\n  { timer: tickTimer.rowType },\n  (ctx, { timer }) => { /* timer row auto-deleted after this runs */ }\n);\n\n// `onSchedule` also works for scheduled procedures whose return type is `t.unit()`.\n// Legacy table-side scheduling, `scheduled: (): any => tick`, still works but is not\n// recommended for new code because it forces a forward reference.\n\n// One-time: ScheduleAt.time(ctx.timestamp.microsSinceUnixEpoch + delayMicros)\n// Repeating: ScheduleAt.interval(60_000_000n)\n// Read time back from a scheduleAt value (tagged union):\n//   const micros = at.tag === 'time' ? at.value : at.value.microsSinceUnixEpoch;  // bigint\n```\n\n## Custom Types\n\n```typescript\n// Product type (struct):\nconst Position = t.object('Position', { x: t.i32(), y: t.i32() });\nconst entity = table({ name: 'entity' }, {\n  id: t.u64().primaryKey().autoInc(),\n  pos: Position,\n});\n\n// Sum type (tagged union):\nconst Shape = t.enum('Shape', {\n  circle: t.i32(),\n  rectangle: t.object('Rect', { w: t.i32(), h: t.i32() }),\n});\n// Values: { tag: 'circle', value: 10 }\n```\n\n## Views\n\nA client subscribing to a view receives only the rows it returns. Use a per-user view\n(keyed on `ctx.sender`) for per-viewer access control: deleting a row it depends on\n(e.g. a membership row) automatically drops the rows it was exposing from that client.\n\n`t.row(...)` and `t.object(...)` return schema builders, not TypeScript runtime row types. Let a view callback infer its result, or annotate a separately declared structural type such as `Array<{ sku: bigint; label: string }>`. A named output type must not reuse the generated PascalCase name of its view accessor (for example, reserve `DiscountedProduct` for a `discounted_product` view).\n\nBoth `spacetimedb.view(...)` and `spacetimedb.anonymousView(...)` take three arguments: view options, the declared return schema, and the callback.\n\n```typescript\n// Anonymous view (same for all clients):\nexport const activeUsers = spacetimedb.anonymousView(\n  { name: 'active_users', public: true },\n  t.array(entity.rowType),\n  (ctx) => [...ctx.db.entity.iter()].filter(e => e.active)\n);\n\n// Per-user view (varies by ctx.sender):\nexport const myProfile = spacetimedb.view(\n  { name: 'my_profile', public: true },\n  t.option(entity.rowType),\n  (ctx) => ctx.db.entity.identity.find(ctx.sender) ?? undefined\n);\n```\n\nFor a procedural view primary key, define the output with `t.row` and mark its field `.primaryKey()`:\n\n```typescript\nconst CatalogKey = t.row('CatalogKey', {\n  sku: t.u64().primaryKey(),\n  label: t.string(),\n});\n```\n\nQuery-builder views use `ctx.from` and return the query directly. Because a query returns a row set, declare its return schema as `t.array(tableName.rowType)`. Use `where` for predicates and `rightSemijoin` when the result should contain right-side rows that have a matching left-side row:\n\n```typescript\nctx => ctx.from.article.where(article => article.published.eq(true))\nctx => ctx.from.subscription.rightSemijoin(\n  ctx.from.account,\n  (subscription, account) => subscription.accountId.eq(account.id)\n)\n```\n\nThe method name identifies which side is returned: `A.leftSemijoin(B, ...)` returns rows from `A`, while `A.rightSemijoin(B, ...)` returns rows from `B`. To return one table's rows when another table has a match, put the returned table on the corresponding side. Semijoins do not project combined columns from both tables.\n\nProcedural views read through `ctx.db` and return materialized values such as arrays. Query-builder values from `ctx.from` are returned directly; they are not iterators and cannot be spread, looped over, or mixed with array methods. Use a procedural view when the result is a custom row assembled from multiple tables.\n\n## Client Visibility Filters\n\n```typescript\nexport const privateNoteFilter = spacetimedb.clientVisibilityFilter.sql(\n  'SELECT * FROM owned_row WHERE owner = :sender'\n);\n```\n\n## Procedures and HTTP\n\n`spacetimedb` is the local schema value returned by `schema({...})`; it is not a named export to import from `spacetimedb/server`.\n\nProcedures declare argument and return types:\n\n```typescript\nconst Result = t.object('Result', { value: t.string() });\n\nexport const inspect = spacetimedb.procedure(\n  { input: t.string() },\n  Result,\n  (_ctx, { input }) => ({ value: input })\n);\n```\n\nProcedure callbacks are synchronous. Do not mark them `async` or use `await`; return the declared value directly. A procedure with return type `t.unit()` returns `{}`.\n\nTypeScript outbound HTTP uses `ctx.http.fetch(url, options)`, including for non-GET requests; it does not provide convenience methods such as `get()` or `post()`. Responses expose the numeric `status`, `headers.get(name)`, and `text()` APIs.\n\n`t.array(t.u8())` values are `number[]`. Convert one to `new Uint8Array(value)` before using it as a binary request body.\n\nProcedures and handlers open short database transactions with `ctx.withTx(tx => ...)`. Perform network I/O before opening the transaction; only database work belongs inside its callback.\n\nScheduled procedures use the same `onSchedule` binding as scheduled reducers. The procedure must be exported, return `t.unit()`, and accept the scheduled row as its argument.\n\nInbound HTTP uses `httpHandler`, `httpRouter`, `Router`, and `SyncResponse`:\n\n`httpHandler` and `httpRouter` are methods on the local `spacetimedb` schema value, not named imports.\n\n```typescript\nimport { Router, SyncResponse } from 'spacetimedb/server';\n\nexport const health = spacetimedb.httpHandler((_ctx, _request) =>\n  new SyncResponse('ok', {\n    status: 200,\n    headers: { 'content-type': 'text/plain' },\n  })\n);\nexport const routes = spacetimedb.httpRouter(new Router().get('/health', health));\n```\n\nHandlers are synchronous: return `SyncResponse` directly rather than marking the callback `async`. Pass the exported `httpHandler(...)` value to the router, not its raw callback. The router selects the path, while a handler reads request data with APIs such as `request.text()`; `Request` has no `path` property. A handler context does not expose `ctx.db`; use `ctx.withTx(tx => ...)` when a handler needs transactional database access.\n","skills/unreal/SKILL.md":"---\nname: unreal\ndescription: SpacetimeDB Unreal Engine client SDK reference. Use when building Unreal Engine clients that connect to SpacetimeDB.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: client\n  language: cpp\n  cursor_globs: \"**/*.cpp,**/*.h\"\n  cursor_always_apply: true\n---\n\n# SpacetimeDB Unreal Engine Integration\n\nThis skill covers Unreal Engine-specific patterns for connecting to SpacetimeDB. For server-side module development, see the `rust-server` or `csharp-server` skills.\n\n---\n\n## Installation\n\nAdd the SpacetimeDB Unreal SDK as a plugin:\n\n1. Create a `Plugins` folder in your Unreal project root if it does not exist.\n2. Copy the `SpacetimeDbSdk` folder into `Plugins/`.\n3. Right-click your `.uproject` file and select **Generate Visual Studio project files**.\n4. Add `\"SpacetimeDbSdk\"` to your module's `Build.cs`:\n\n```csharp\nPublicDependencyModuleNames.AddRange(new string[] { \"SpacetimeDbSdk\" });\n```\n\n---\n\n## Generate Module Bindings\n\n```bash\nspacetime generate --lang unrealcpp \\\n  --uproject-dir <path_to_uproject_directory> \\\n  --module-path <path_to_spacetimedb_module> \\\n  --unreal-module-name <your_unreal_module_name>\n```\n\nThis generates C++ bindings in `ModuleBindings/` inside your project. Include the generated header:\n\n```cpp\n#include \"ModuleBindings/SpacetimeDBClient.g.h\"\n```\n\nRegenerate whenever you change module tables, reducers, or types.\n\n---\n\n## GameManager Actor Pattern\n\nThe recommended pattern is a singleton Actor that owns the connection. Enable ticking so `FrameTick` is called every frame.\n\n### Header (GameManager.h)\n\n```cpp\n#pragma once\n#include \"CoreMinimal.h\"\n#include \"GameFramework/Actor.h\"\n#include \"ModuleBindings/SpacetimeDBClient.g.h\"\n#include \"GameManager.generated.h\"\n\nclass UDbConnection;\n\nUCLASS()\nclass AGameManager : public AActor\n{\n    GENERATED_BODY()\npublic:\n    AGameManager();\n    static AGameManager* Instance;\n\n    UPROPERTY(EditAnywhere, Category=\"SpacetimeDB\")\n    FString ServerUri = TEXT(\"127.0.0.1:3000\");\n\n    UPROPERTY(EditAnywhere, Category=\"SpacetimeDB\")\n    FString DatabaseName = TEXT(\"my-module\");\n\n    UPROPERTY(BlueprintReadOnly, Category=\"SpacetimeDB\")\n    UDbConnection* Conn = nullptr;\n\n    UPROPERTY(BlueprintReadOnly, Category=\"SpacetimeDB\")\n    FSpacetimeDBIdentity LocalIdentity;\n\nprotected:\n    virtual void BeginPlay() override;\n    virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;\npublic:\n    virtual void Tick(float DeltaTime) override;\n\nprivate:\n    UFUNCTION() void HandleConnect(UDbConnection* InConn, FSpacetimeDBIdentity Identity, const FString& Token);\n    UFUNCTION() void HandleConnectError(const FString& Error);\n    UFUNCTION() void HandleDisconnect(UDbConnection* InConn, const FString& Error);\n    UFUNCTION() void HandleSubscriptionApplied(FSubscriptionEventContext& Context);\n};\n```\n\n### Source (GameManager.cpp)\n\n```cpp\n#include \"GameManager.h\"\n#include \"Connection/Credentials.h\"\n\nAGameManager* AGameManager::Instance = nullptr;\n\nAGameManager::AGameManager()\n{\n    PrimaryActorTick.bCanEverTick = true;\n    PrimaryActorTick.bStartWithTickEnabled = true;\n}\n\nvoid AGameManager::BeginPlay()\n{\n    Super::BeginPlay();\n    Instance = this;\n\n    FOnConnectDelegate ConnectDelegate;\n    BIND_DELEGATE_SAFE(ConnectDelegate, this, AGameManager, HandleConnect);\n    FOnDisconnectDelegate DisconnectDelegate;\n    BIND_DELEGATE_SAFE(DisconnectDelegate, this, AGameManager, HandleDisconnect);\n    FOnConnectErrorDelegate ConnectErrorDelegate;\n    BIND_DELEGATE_SAFE(ConnectErrorDelegate, this, AGameManager, HandleConnectError);\n\n    UCredentials::Init(TEXT(\".spacetime_token\"));\n    FString Token = UCredentials::LoadToken();\n\n    UDbConnectionBuilder* Builder = UDbConnection::Builder()\n        ->WithUri(ServerUri)\n        ->WithDatabaseName(DatabaseName)\n        ->OnConnect(ConnectDelegate)\n        ->OnDisconnect(DisconnectDelegate)\n        ->OnConnectError(ConnectErrorDelegate);\n\n    if (!Token.IsEmpty())\n    {\n        Builder->WithToken(Token);\n    }\n\n    Conn = Builder->Build();\n}\n\nvoid AGameManager::EndPlay(const EEndPlayReason::Type EndPlayReason)\n{\n    if (Conn) { Conn->Disconnect(); Conn = nullptr; }\n    if (Instance == this) { Instance = nullptr; }\n    Super::EndPlay(EndPlayReason);\n}\n\nvoid AGameManager::Tick(float DeltaTime)\n{\n    if (Conn && Conn->IsActive())\n    {\n        Conn->FrameTick();\n    }\n}\n\nvoid AGameManager::HandleConnect(UDbConnection* InConn, FSpacetimeDBIdentity Identity, const FString& Token)\n{\n    LocalIdentity = Identity;\n    UCredentials::SaveToken(Token);\n\n    FOnSubscriptionApplied AppliedDelegate;\n    BIND_DELEGATE_SAFE(AppliedDelegate, this, AGameManager, HandleSubscriptionApplied);\n    Conn->SubscriptionBuilder()\n        ->OnApplied(AppliedDelegate)\n        ->SubscribeToAllTables();\n}\n\nvoid AGameManager::HandleConnectError(const FString& Error)\n{\n    UE_LOG(LogTemp, Error, TEXT(\"Connection error: %s\"), *Error);\n}\n\nvoid AGameManager::HandleDisconnect(UDbConnection* InConn, const FString& Error)\n{\n    UE_LOG(LogTemp, Warning, TEXT(\"Disconnected: %s\"), *Error);\n}\n\nvoid AGameManager::HandleSubscriptionApplied(FSubscriptionEventContext& Context)\n{\n    UE_LOG(LogTemp, Log, TEXT(\"Subscription applied - game state loaded\"));\n}\n```\n\n---\n\n## FrameTick -- Critical\n\n**You must either call `Conn->FrameTick()` every frame in your Actor's `Tick()`, or call `Conn->SetAutoTicking(true)` once at startup.** The SDK queues all network messages and only processes them on tick. Without one of these, no callbacks fire and the client appears frozen.\n\n---\n\n## Connection Builder\n\nBuild a connection with the builder pattern. All builder methods return pointers for chaining with `->`.\n\n```cpp\nUDbConnection* Conn = UDbConnection::Builder()\n    ->WithUri(TEXT(\"127.0.0.1:3000\"))\n    ->WithDatabaseName(TEXT(\"my-module\"))\n    ->WithToken(SavedToken)                              // optional\n    ->WithCompression(ESpacetimeDBCompression::Gzip)     // optional\n    ->OnConnect(ConnectDelegate)\n    ->OnConnectError(ErrorDelegate)\n    ->OnDisconnect(DisconnectDelegate)\n    ->Build();\n```\n\n### OnConnect callback signature\n\n```cpp\nUFUNCTION()\nvoid OnConnected(UDbConnection* Connection, FSpacetimeDBIdentity Identity, const FString& Token);\n```\n\nSave the `Token` for future reconnection. The `Identity` is the user's persistent identifier.\n\n---\n\n## Subscribing to Tables\n\nAfter connecting, subscribe to receive table data:\n\n```cpp\n// Subscribe to all public tables\nConn->SubscriptionBuilder()\n    ->OnApplied(AppliedDelegate)\n    ->SubscribeToAllTables();\n\n// Subscribe to specific queries\nTArray<FString> Queries = { TEXT(\"SELECT * FROM player\"), TEXT(\"SELECT * FROM entity\") };\nConn->SubscriptionBuilder()\n    ->OnApplied(AppliedDelegate)\n    ->OnError(ErrorDelegate)\n    ->Subscribe(Queries);\n```\n\n### Subscription Handle\n\n`Subscribe` and `SubscribeToAllTables` return a `USubscriptionHandle*`:\n\n```cpp\nUSubscriptionHandle* Handle = Conn->SubscriptionBuilder()->...->Subscribe(Queries);\nHandle->IsActive();      // true while subscription is live\nHandle->Unsubscribe();   // cancel the subscription\nHandle->UnsubscribeThen(OnEndDelegate); // cancel with callback\nHandle->GetQuerySqls();  // get the SQL queries\n```\n\n---\n\n## Reading the Client Cache\n\nAccess tables through `Conn->Db`:\n\n```cpp\n// Find by unique/primary key (returns by value; default-constructed if not found)\nFUserType User = Conn->Db->User->Identity->Find(SomeIdentity);\n\n// Filter by BTree index\nTArray<FPlayerType> LevelFive = Conn->Db->Player->Level->Filter(5);\n\n// Iterate all rows\nTArray<FEntityType> AllEntities = Conn->Db->Entity->Iter();\n\n// Count\nint32 Total = Conn->Db->Player->Count();\n```\n\n---\n\n## Row Callbacks\n\nRegister callbacks on table objects. Callbacks use Unreal dynamic multicast delegates.\n\n```cpp\n// OnInsert\nConn->Db->User->OnInsert.AddDynamic(this, &AMyActor::OnUserInsert);\n\n// OnDelete\nConn->Db->User->OnDelete.AddDynamic(this, &AMyActor::OnUserDelete);\n\n// OnUpdate (only fires for rows with a primary key)\nConn->Db->User->OnUpdate.AddDynamic(this, &AMyActor::OnUserUpdate);\n```\n\n### Callback signatures (must be UFUNCTION)\n\n```cpp\nUFUNCTION()\nvoid OnUserInsert(const FEventContext& Context, const FUserType& NewRow);\n\nUFUNCTION()\nvoid OnUserDelete(const FEventContext& Context, const FUserType& DeletedRow);\n\nUFUNCTION()\nvoid OnUserUpdate(const FEventContext& Context, const FUserType& OldRow, const FUserType& NewRow);\n```\n\nRegister callbacks before connecting or in `HandleSubscriptionApplied`.\n\n---\n\n## Calling Reducers\n\nInvoke reducers through `Conn->Reducers`:\n\n```cpp\nConn->Reducers->SendMessage(TEXT(\"Hello!\"));\nConn->Reducers->SetName(TEXT(\"Alice\"));\nConn->Reducers->MovePlayer(1.0f, 0.0f);\n```\n\n### Reducer Result Callbacks\n\nObserve when a reducer you called completes:\n\n```cpp\nConn->Reducers->OnSendMessage.AddDynamic(this, &AMyActor::OnSendMessageResult);\n```\n\n```cpp\nUFUNCTION()\nvoid OnSendMessageResult(const FReducerEventContext& Context, const FString& Text)\n{\n    UE_LOG(LogTemp, Log, TEXT(\"SendMessage result for: %s\"), *Text);\n}\n```\n\nThese delegates fire only for reducer calls made by this connection, not for other clients' calls.\n\n---\n\n## Delegate Binding with BIND_DELEGATE_SAFE\n\nUse the `BIND_DELEGATE_SAFE` macro to safely bind delegates to member functions:\n\n```cpp\nFOnConnectDelegate ConnectDelegate;\nBIND_DELEGATE_SAFE(ConnectDelegate, this, AMyActor, HandleConnect);\n```\n\nThis is the recommended pattern for all SpacetimeDB delegate bindings in C++.\n\n---\n\n## Identity and ConnectionId\n\n```cpp\n// FSpacetimeDBIdentity -- 256-bit unique user identifier, persists across connections\nFSpacetimeDBIdentity Identity;\nIdentity.ToHex();\n\n// FSpacetimeDBConnectionId -- 128-bit per-session connection identifier\nFSpacetimeDBConnectionId ConnId = Conn->GetConnectionId();\n\n// From any context\nFSpacetimeDBIdentity Id;\nbool Found = Context.TryGetIdentity(Id);\nFSpacetimeDBConnectionId CId = Context.GetConnectionId();\n```\n\n---\n\n## Token Persistence\n\nUse the built-in `UCredentials` helper to save and load tokens. Passing the saved server-issued token back on reconnect keeps the same identity. This token does not expire and a lost one can't be recovered, so self-issued identities are for development. For production, authenticate with an OIDC provider such as SpacetimeAuth, which handles token lifecycle.\n\n```cpp\nUCredentials::Init(TEXT(\".spacetime_token\"));\nFString Token = UCredentials::LoadToken();\n// ... after connect:\nUCredentials::SaveToken(Token);\n```\n\n---\n\n## Context Types\n\nAll callbacks receive a context struct that provides access to `Db` and `Reducers`:\n\n| Type | Used In |\n|------|---------|\n| `FEventContext` | Table row callbacks (OnInsert, OnDelete, OnUpdate) |\n| `FReducerEventContext` | Reducer result callbacks |\n| `FSubscriptionEventContext` | Subscription lifecycle callbacks (OnApplied, OnError) |\n| `FErrorContext` | Error callbacks |\n\nAll inherit from `FContextBase` which provides:\n\n```cpp\nContext.Db          // URemoteTables* -- client cache\nContext.Reducers    // URemoteReducers* -- invoke reducers\nContext.SubscriptionBuilder()  // start a new subscription\n```\n\n---\n\n## Blueprint Integration\n\nAll core classes are Blueprint-accessible via `UFUNCTION(BlueprintCallable)` and `UPROPERTY(BlueprintReadOnly/BlueprintAssignable)`:\n\n- `UDbConnection::Builder()` and all builder methods are `BlueprintCallable`.\n- Table callbacks (`OnInsert`, `OnDelete`, `OnUpdate`) are `BlueprintAssignable` delegates.\n- Reducer invoke methods and result delegates are Blueprint-accessible.\n- `Conn->Db` and `Conn->Reducers` are `BlueprintReadOnly` properties.\n- Generated row types are `BlueprintType` USTRUCTs with `BlueprintReadWrite` properties.\n\nThis means you can build the entire connection and callback flow in Blueprints without writing C++.\n\n---\n\n## Unreal-Specific Considerations\n\n### Auto Ticking Alternative\n\n`UDbConnection` inherits from `FTickableGameObject`, but auto ticking is **off by default**. You have two options:\n\n```cpp\n// Option 1: Call FrameTick() manually in your Actor's Tick() (shown in GameManager above)\nvoid Tick(float DeltaTime) { Conn->FrameTick(); }\n\n// Option 2: Enable auto ticking. The SDK then processes messages every frame automatically\nConn->SetAutoTicking(true);\n```\n\nPick one. Without either, no callbacks fire.\n\n### Compression\n\n```cpp\nBuilder->WithCompression(ESpacetimeDBCompression::Gzip);  // default\nBuilder->WithCompression(ESpacetimeDBCompression::None);   // no compression\n```\n\n### Generated Types\n\nCodegen produces USTRUCTs prefixed with `F` (e.g., `FUserType`, `FEntityType`) and table classes prefixed with `U` (e.g., `UUserTable`). Row types use `GENERATED_BODY()` and `UPROPERTY()` for full reflection support.\n","codex-plugin/plugins/spacetimedb/skills/concepts/SKILL.md":"# concepts\n\nPath: `codex-plugin/plugins/spacetimedb/skills/concepts/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/concepts/SKILL.md)","codex-plugin/plugins/spacetimedb/skills/cpp-server/SKILL.md":"# cpp-server\n\nPath: `codex-plugin/plugins/spacetimedb/skills/cpp-server/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/cpp-server/SKILL.md)","codex-plugin/plugins/spacetimedb/skills/csharp-client/SKILL.md":"# csharp-client\n\nPath: `codex-plugin/plugins/spacetimedb/skills/csharp-client/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/csharp-client/SKILL.md)","codex-plugin/plugins/spacetimedb/skills/csharp-server/SKILL.md":"# csharp-server\n\nPath: `codex-plugin/plugins/spacetimedb/skills/csharp-server/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/csharp-server/SKILL.md)","codex-plugin/plugins/spacetimedb/skills/mcp/SKILL.md":"# mcp\n\nPath: `codex-plugin/plugins/spacetimedb/skills/mcp/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/mcp/SKILL.md)","codex-plugin/plugins/spacetimedb/skills/rust-server/SKILL.md":"# rust-server\n\nPath: `codex-plugin/plugins/spacetimedb/skills/rust-server/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/rust-server/SKILL.md)","codex-plugin/plugins/spacetimedb/skills/typescript-client/SKILL.md":"# typescript-client\n\nPath: `codex-plugin/plugins/spacetimedb/skills/typescript-client/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/typescript-client/SKILL.md)","codex-plugin/plugins/spacetimedb/skills/typescript-server/SKILL.md":"# typescript-server\n\nPath: `codex-plugin/plugins/spacetimedb/skills/typescript-server/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/typescript-server/SKILL.md)","codex-plugin/plugins/spacetimedb/skills/unity/SKILL.md":"# unity\n\nPath: `codex-plugin/plugins/spacetimedb/skills/unity/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/unity/SKILL.md)","codex-plugin/plugins/spacetimedb/skills/unreal/SKILL.md":"# unreal\n\nPath: `codex-plugin/plugins/spacetimedb/skills/unreal/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/unreal/SKILL.md)","AGENTS.md":"# AI Agent Protocol & Instructions\n\nPath: `AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/AGENTS.md)","CLAUDE.md":"# Claude Agent Guidelines & System Prompt\n\nPath: `CLAUDE.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/CLAUDE.md)",".claude-plugin/marketplace.json":"# Claude Plugin Marketplace Catalog\n\nPath: `.claude-plugin/marketplace.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/.claude-plugin/marketplace.json)",".agents/plugins/marketplace.json":"# Claude Plugin Marketplace Catalog\n\nPath: `.agents/plugins/marketplace.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/.agents/plugins/marketplace.json)","tools/llm-oneshot/README.md":"# llm-oneshot Documentation\n\nPath: `tools/llm-oneshot/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/README.md)","tools/llm-oneshot/package-lock.json":"# Llm-oneshot Skill\n\nPath: `tools/llm-oneshot/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/package-lock.json)","tools/llm-oneshot/package.json":"# Llm-oneshot Skill\n\nPath: `tools/llm-oneshot/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/package.json)","tools/llm-sequential-upgrade/CLAUDE.md":"# Llm-sequential-upgrade Skill\n\nPath: `tools/llm-sequential-upgrade/CLAUDE.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/CLAUDE.md)","tools/llm-sequential-upgrade/DEVELOP.md":"# Llm-sequential-upgrade Skill\n\nPath: `tools/llm-sequential-upgrade/DEVELOP.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/DEVELOP.md)","tools/llm-sequential-upgrade/GRADING.md":"# Llm-sequential-upgrade Skill\n\nPath: `tools/llm-sequential-upgrade/GRADING.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/GRADING.md)","tools/llm-sequential-upgrade/GRADING_WORKFLOW.md":"# Llm-sequential-upgrade Skill\n\nPath: `tools/llm-sequential-upgrade/GRADING_WORKFLOW.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/GRADING_WORKFLOW.md)","tools/llm-sequential-upgrade/README.md":"# llm-sequential-upgrade Documentation\n\nPath: `tools/llm-sequential-upgrade/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/README.md)","tools/llm-sequential-upgrade/RUNBOOK.md":"# Llm-sequential-upgrade Skill\n\nPath: `tools/llm-sequential-upgrade/RUNBOOK.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/RUNBOOK.md)","tools/llm-sequential-upgrade/docker-compose.otel.yaml":"# Llm-sequential-upgrade Skill\n\nPath: `tools/llm-sequential-upgrade/docker-compose.otel.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/docker-compose.otel.yaml)","tools/llm-sequential-upgrade/otel-collector-config.yaml":"# Llm-sequential-upgrade Skill\n\nPath: `tools/llm-sequential-upgrade/otel-collector-config.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/otel-collector-config.yaml)","tools/release/README.md":"# release Documentation\n\nPath: `tools/release/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/release/README.md)","tools/templates/README.md":"# templates Documentation\n\nPath: `tools/templates/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/templates/README.md)","tools/templates/package.json":"# Templates Skill\n\nPath: `tools/templates/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/templates/package.json)","tools/xtask-llm-benchmark/README.md":"# xtask-llm-benchmark Documentation\n\nPath: `tools/xtask-llm-benchmark/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/xtask-llm-benchmark/README.md)","skills/cli/README.md":"# Cli Skill\n\nPath: `skills/cli/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/cli/README.md)","skills/concepts/README.md":"# Concepts Skill\n\nPath: `skills/concepts/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/concepts/README.md)","skills/cpp-server/README.md":"# Cpp-server Skill\n\nPath: `skills/cpp-server/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/cpp-server/README.md)","skills/csharp-client/README.md":"# Csharp-client Skill\n\nPath: `skills/csharp-client/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/csharp-client/README.md)","skills/csharp-server/README.md":"# Csharp-server Skill\n\nPath: `skills/csharp-server/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/csharp-server/README.md)","skills/mcp/README.md":"# Mcp Skill\n\nPath: `skills/mcp/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/mcp/README.md)","skills/rust-server/README.md":"# Rust-server Skill\n\nPath: `skills/rust-server/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/rust-server/README.md)","skills/typescript-client/README.md":"# Typescript-client Skill\n\nPath: `skills/typescript-client/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/typescript-client/README.md)","skills/typescript-server/README.md":"# Typescript-server Skill\n\nPath: `skills/typescript-server/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/typescript-server/README.md)","skills/unity/README.md":"# Unity Skill\n\nPath: `skills/unity/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/unity/README.md)","skills/unreal/README.md":"# Unreal Skill\n\nPath: `skills/unreal/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/unreal/README.md)","codex-plugin/.agents/plugins/marketplace.json":"# Claude Plugin Marketplace Catalog\n\nPath: `codex-plugin/.agents/plugins/marketplace.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/.agents/plugins/marketplace.json)","codex-plugin/plugins/spacetimedb/.mcp.json":"# Spacetimedb Skill\n\nPath: `codex-plugin/plugins/spacetimedb/.mcp.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/.mcp.json)","tools/llm-sequential-upgrade/backends/mongodb.md":"# Backends Skill\n\nPath: `tools/llm-sequential-upgrade/backends/mongodb.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/backends/mongodb.md)","tools/llm-sequential-upgrade/backends/postgres.md":"# Backends Skill\n\nPath: `tools/llm-sequential-upgrade/backends/postgres.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/backends/postgres.md)","tools/llm-sequential-upgrade/backends/spacetime-templates.md":"# Backends Skill\n\nPath: `tools/llm-sequential-upgrade/backends/spacetime-templates.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/backends/spacetime-templates.md)","tools/llm-sequential-upgrade/backends/spacetime.md":"# Backends Skill\n\nPath: `tools/llm-sequential-upgrade/backends/spacetime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/backends/spacetime.md)","tools/llm-sequential-upgrade/perf-benchmark/README.md":"# perf-benchmark Documentation\n\nPath: `tools/llm-sequential-upgrade/perf-benchmark/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/perf-benchmark/README.md)","tools/llm-sequential-upgrade/perf-benchmark/package-lock.json":"# Perf-benchmark Skill\n\nPath: `tools/llm-sequential-upgrade/perf-benchmark/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/perf-benchmark/package-lock.json)","tools/llm-sequential-upgrade/perf-benchmark/package.json":"# Perf-benchmark Skill\n\nPath: `tools/llm-sequential-upgrade/perf-benchmark/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/perf-benchmark/package.json)","tools/llm-sequential-upgrade/perf-benchmark/tsconfig.json":"# Perf-benchmark Skill\n\nPath: `tools/llm-sequential-upgrade/perf-benchmark/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/perf-benchmark/tsconfig.json)","tools/llm-sequential-upgrade/templates/BUG_REPORT.template.md":"# Templates Skill\n\nPath: `tools/llm-sequential-upgrade/templates/BUG_REPORT.template.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/templates/BUG_REPORT.template.md)","tools/llm-sequential-upgrade/templates/ITERATION_LOG.template.md":"# Templates Skill\n\nPath: `tools/llm-sequential-upgrade/templates/ITERATION_LOG.template.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/templates/ITERATION_LOG.template.md)","tools/llm-sequential-upgrade/templates/README.md":"# templates Documentation\n\nPath: `tools/llm-sequential-upgrade/templates/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/templates/README.md)","codex-plugin/plugins/spacetimedb/.codex-plugin/plugin.json":"# codex-plugin Plugin Manifest\n\nPath: `codex-plugin/plugins/spacetimedb/.codex-plugin/plugin.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/.codex-plugin/plugin.json)","demo/Blackholio/client-unity/Packages/manifest.json":"# Packages Skill\n\nPath: `demo/Blackholio/client-unity/Packages/manifest.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/demo/Blackholio/client-unity/Packages/manifest.json)","demo/Blackholio/client-unity/Packages/packages-lock.json":"# Packages Skill\n\nPath: `demo/Blackholio/client-unity/Packages/packages-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/demo/Blackholio/client-unity/Packages/packages-lock.json)","tools/llm-oneshot/.cursor/rules/benchmark.mdc":"# Cursor Rule: benchmark\n\nPath: `tools/llm-oneshot/.cursor/rules/benchmark.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/benchmark.mdc)","tools/llm-oneshot/.cursor/rules/deployment.mdc":"# Cursor Rule: deployment\n\nPath: `tools/llm-oneshot/.cursor/rules/deployment.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/deployment.mdc)","tools/llm-oneshot/.cursor/rules/frontend-csharp.mdc":"# Cursor Rule: frontend-csharp\n\nPath: `tools/llm-oneshot/.cursor/rules/frontend-csharp.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/frontend-csharp.mdc)","tools/llm-oneshot/.cursor/rules/frontend-rust.mdc":"# Cursor Rule: frontend-rust\n\nPath: `tools/llm-oneshot/.cursor/rules/frontend-rust.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/frontend-rust.mdc)","tools/llm-oneshot/.cursor/rules/frontend-typescript.mdc":"# Cursor Rule: frontend-typescript\n\nPath: `tools/llm-oneshot/.cursor/rules/frontend-typescript.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/frontend-typescript.mdc)","tools/llm-oneshot/.cursor/rules/grading.mdc":"# Cursor Rule: grading\n\nPath: `tools/llm-oneshot/.cursor/rules/grading.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/grading.mdc)","tools/llm-oneshot/.cursor/rules/patterns-react.mdc":"# Cursor Rule: patterns-react\n\nPath: `tools/llm-oneshot/.cursor/rules/patterns-react.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/patterns-react.mdc)","tools/llm-oneshot/.cursor/rules/patterns-rust.mdc":"# Cursor Rule: patterns-rust\n\nPath: `tools/llm-oneshot/.cursor/rules/patterns-rust.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/patterns-rust.mdc)","tools/llm-oneshot/.cursor/rules/patterns-typescript.mdc":"# Cursor Rule: patterns-typescript\n\nPath: `tools/llm-oneshot/.cursor/rules/patterns-typescript.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/patterns-typescript.mdc)","tools/llm-oneshot/.cursor/rules/postgres.mdc":"# Cursor Rule: postgres\n\nPath: `tools/llm-oneshot/.cursor/rules/postgres.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/postgres.mdc)","tools/llm-oneshot/.cursor/rules/spacetimedb-styling.mdc":"# Cursor Rule: spacetimedb-styling\n\nPath: `tools/llm-oneshot/.cursor/rules/spacetimedb-styling.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/spacetimedb-styling.mdc)","tools/llm-sequential-upgrade/perf-benchmark/optimized-reference/METHODOLOGY.md":"# Optimized-reference Skill\n\nPath: `tools/llm-sequential-upgrade/perf-benchmark/optimized-reference/METHODOLOGY.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/perf-benchmark/optimized-reference/METHODOLOGY.md)","tools/llm-oneshot/apps/chat-app/prompts/README.md":"# prompts Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/README.md)","tools/llm-oneshot/apps/chat-app/prompts/base_mongodb.md":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/base_mongodb.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/base_mongodb.md)","tools/llm-oneshot/apps/chat-app/prompts/base_postgres.md":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/base_postgres.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/base_postgres.md)","tools/llm-oneshot/apps/chat-app/prompts/base_spacetime.md":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/base_spacetime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/base_spacetime.md)","tools/llm-oneshot/apps/chat-app/prompts/grading_checklist.md":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/grading_checklist.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/grading_checklist.md)","tools/llm-oneshot/apps/chat-app/prompts/grading_rubric.md":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/grading_rubric.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/grading_rubric.md)","tools/llm-oneshot/apps/chat-app/prompts/output_instructions.md":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/output_instructions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/output_instructions.md)","tools/llm-oneshot/apps/paint-app/prompts/README.md":"# prompts Documentation\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/README.md)","tools/llm-oneshot/apps/paint-app/prompts/base_postgres.md":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/base_postgres.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/base_postgres.md)","tools/llm-oneshot/apps/paint-app/prompts/base_spacetime.md":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/base_spacetime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/base_spacetime.md)","tools/llm-oneshot/apps/paint-app/prompts/grading_checklist.md":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/grading_checklist.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/grading_checklist.md)","tools/llm-oneshot/apps/paint-app/prompts/grading_rubric.md":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/grading_rubric.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/grading_rubric.md)","tools/llm-oneshot/apps/paint-app/prompts/output_instructions.md":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/output_instructions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/output_instructions.md)","demo/Blackholio/client-unity/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json":"# Com.unity.testtools.codecoverage Skill\n\nPath: `demo/Blackholio/client-unity/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/demo/Blackholio/client-unity/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json)","tools/llm-oneshot/apps/chat-app/prompts/composed/01_basic.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/01_basic.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/01_basic.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/02_scheduled.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/02_scheduled.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/02_scheduled.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/03_realtime.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/03_realtime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/03_realtime.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/04_reactions.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/04_reactions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/04_reactions.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/05_edit_history.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/05_edit_history.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/05_edit_history.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/06_permissions.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/06_permissions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/06_permissions.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/07_presence.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/07_presence.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/07_presence.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/08_threading.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/08_threading.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/08_threading.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/09_private_rooms.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/09_private_rooms.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/09_private_rooms.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/10_activity.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/10_activity.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/10_activity.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/11_drafts.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/11_drafts.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/11_drafts.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/12_anon_migration.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/12_anon_migration.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/12_anon_migration.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/13_pinned.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/13_pinned.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/13_pinned.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/14_profiles.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/14_profiles.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/14_profiles.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/15_mentions.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/15_mentions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/15_mentions.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/16_bookmarks.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/16_bookmarks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/16_bookmarks.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/17_forwarding.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/17_forwarding.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/17_forwarding.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/18_slowmode.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/18_slowmode.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/18_slowmode.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/19_polls.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/19_polls.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/19_polls.md)","tools/llm-oneshot/apps/chat-app/prompts/features/01_basic.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/01_basic.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/01_basic.md)","tools/llm-oneshot/apps/chat-app/prompts/features/02_scheduled.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/02_scheduled.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/02_scheduled.md)","tools/llm-oneshot/apps/chat-app/prompts/features/03_ephemeral.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/03_ephemeral.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/03_ephemeral.md)","tools/llm-oneshot/apps/chat-app/prompts/features/04_reactions.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/04_reactions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/04_reactions.md)","tools/llm-oneshot/apps/chat-app/prompts/features/05_edit_history.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/05_edit_history.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/05_edit_history.md)","tools/llm-oneshot/apps/chat-app/prompts/features/06_permissions.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/06_permissions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/06_permissions.md)","tools/llm-oneshot/apps/chat-app/prompts/features/07_presence.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/07_presence.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/07_presence.md)","tools/llm-oneshot/apps/chat-app/prompts/features/08_threading.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/08_threading.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/08_threading.md)","tools/llm-oneshot/apps/chat-app/prompts/features/09_private_rooms.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/09_private_rooms.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/09_private_rooms.md)","tools/llm-oneshot/apps/chat-app/prompts/features/10_activity.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/10_activity.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/10_activity.md)","tools/llm-oneshot/apps/chat-app/prompts/features/11_drafts.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/11_drafts.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/11_drafts.md)","tools/llm-oneshot/apps/chat-app/prompts/features/12_anon_migration.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/12_anon_migration.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/12_anon_migration.md)","tools/llm-oneshot/apps/chat-app/prompts/features/13_pinned.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/13_pinned.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/13_pinned.md)","tools/llm-oneshot/apps/chat-app/prompts/features/14_profiles.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/14_profiles.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/14_profiles.md)","tools/llm-oneshot/apps/chat-app/prompts/features/15_mentions.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/15_mentions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/15_mentions.md)","tools/llm-oneshot/apps/chat-app/prompts/features/16_bookmarks.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/16_bookmarks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/16_bookmarks.md)","tools/llm-oneshot/apps/chat-app/prompts/features/17_forwarding.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/17_forwarding.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/17_forwarding.md)","tools/llm-oneshot/apps/chat-app/prompts/features/18_slowmode.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/18_slowmode.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/18_slowmode.md)","tools/llm-oneshot/apps/chat-app/prompts/features/19_polls.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/19_polls.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/19_polls.md)","tools/llm-oneshot/apps/chat-app/prompts/language/csharp-spacetime.md":"# Language Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/language/csharp-spacetime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/language/csharp-spacetime.md)","tools/llm-oneshot/apps/chat-app/prompts/language/rust-spacetime.md":"# Language Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/language/rust-spacetime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/language/rust-spacetime.md)","tools/llm-oneshot/apps/chat-app/prompts/language/typescript-mongodb.md":"# Language Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/language/typescript-mongodb.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/language/typescript-mongodb.md)","tools/llm-oneshot/apps/chat-app/prompts/language/typescript-postgres.md":"# Language Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/language/typescript-postgres.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/language/typescript-postgres.md)","tools/llm-oneshot/apps/chat-app/prompts/language/typescript-spacetime.md":"# Language Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/language/typescript-spacetime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/language/typescript-spacetime.md)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/BENCHMARK_COMPARISON_REPORT.md":"# Opus-4-5 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/BENCHMARK_COMPARISON_REPORT.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/BENCHMARK_COMPARISON_REPORT.md)","tools/llm-oneshot/apps/paint-app/prompts/composed/01_basic.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/01_basic.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/01_basic.md)","tools/llm-oneshot/apps/paint-app/prompts/composed/02_shapes.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/02_shapes.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/02_shapes.md)","tools/llm-oneshot/apps/paint-app/prompts/composed/03_selection.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/03_selection.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/03_selection.md)","tools/llm-oneshot/apps/paint-app/prompts/composed/04_layers.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/04_layers.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/04_layers.md)","tools/llm-oneshot/apps/paint-app/prompts/composed/05_presence.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/05_presence.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/05_presence.md)","tools/llm-oneshot/apps/paint-app/prompts/composed/06_comments.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/06_comments.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/06_comments.md)","tools/llm-oneshot/apps/paint-app/prompts/composed/07_versions.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/07_versions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/07_versions.md)","tools/llm-oneshot/apps/paint-app/prompts/composed/08_permissions.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/08_permissions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/08_permissions.md)","tools/llm-oneshot/apps/paint-app/prompts/composed/09_follow.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/09_follow.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/09_follow.md)","tools/llm-oneshot/apps/paint-app/prompts/composed/10_activity.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/10_activity.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/10_activity.md)","tools/llm-oneshot/apps/paint-app/prompts/composed/11_sharing.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/11_sharing.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/11_sharing.md)","tools/llm-oneshot/apps/paint-app/prompts/composed/12_full.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/12_full.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/12_full.md)","tools/llm-oneshot/apps/paint-app/prompts/features/01_basic.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/01_basic.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/01_basic.md)","tools/llm-oneshot/apps/paint-app/prompts/features/02_cursor_indicators.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/02_cursor_indicators.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/02_cursor_indicators.md)","tools/llm-oneshot/apps/paint-app/prompts/features/03_shapes.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/03_shapes.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/03_shapes.md)","tools/llm-oneshot/apps/paint-app/prompts/features/04_selection.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/04_selection.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/04_selection.md)","tools/llm-oneshot/apps/paint-app/prompts/features/05_layers_locking.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/05_layers_locking.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/05_layers_locking.md)","tools/llm-oneshot/apps/paint-app/prompts/features/06_presence.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/06_presence.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/06_presence.md)","tools/llm-oneshot/apps/paint-app/prompts/features/07_comments.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/07_comments.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/07_comments.md)","tools/llm-oneshot/apps/paint-app/prompts/features/08_version_history.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/08_version_history.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/08_version_history.md)","tools/llm-oneshot/apps/paint-app/prompts/features/09_realtime_permissions.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/09_realtime_permissions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/09_realtime_permissions.md)","tools/llm-oneshot/apps/paint-app/prompts/features/10_follow_mode.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/10_follow_mode.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/10_follow_mode.md)","tools/llm-oneshot/apps/paint-app/prompts/features/11_activity_feed.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/11_activity_feed.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/11_activity_feed.md)","tools/llm-oneshot/apps/paint-app/prompts/features/12_private_canvases.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/12_private_canvases.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/12_private_canvases.md)","tools/llm-oneshot/apps/paint-app/prompts/features/13_canvas_chat.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/13_canvas_chat.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/13_canvas_chat.md)","tools/llm-oneshot/apps/paint-app/prompts/features/14_auto_cleanup.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/14_auto_cleanup.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/14_auto_cleanup.md)","tools/llm-oneshot/apps/paint-app/prompts/features/15_text_sticky.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/15_text_sticky.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/15_text_sticky.md)","tools/llm-oneshot/apps/paint-app/prompts/features/16_keyboard_shortcuts.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/16_keyboard_shortcuts.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/16_keyboard_shortcuts.md)","tools/llm-oneshot/apps/paint-app/prompts/language/csharp-spacetime.md":"# Language Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/language/csharp-spacetime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/language/csharp-spacetime.md)","tools/llm-oneshot/apps/paint-app/prompts/language/rust-spacetime.md":"# Language Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/language/rust-spacetime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/language/rust-spacetime.md)","tools/llm-oneshot/apps/paint-app/prompts/language/typescript-postgres.md":"# Language Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/language/typescript-postgres.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/language/typescript-postgres.md)","tools/llm-oneshot/apps/paint-app/prompts/language/typescript-spacetime.md":"# Language Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/language/typescript-spacetime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/language/typescript-spacetime.md)","tools/xtask-llm-benchmark/src/templates/csharp/server/global.json":"# Server Skill\n\nPath: `tools/xtask-llm-benchmark/src/templates/csharp/server/global.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/xtask-llm-benchmark/src/templates/csharp/server/global.json)","tools/xtask-llm-benchmark/src/templates/typescript/server/package.json":"# Server Skill\n\nPath: `tools/xtask-llm-benchmark/src/templates/typescript/server/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/xtask-llm-benchmark/src/templates/typescript/server/package.json)","tools/xtask-llm-benchmark/src/templates/typescript/server/tsconfig.json":"# Server Skill\n\nPath: `tools/xtask-llm-benchmark/src/templates/typescript/server/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/xtask-llm-benchmark/src/templates/typescript/server/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/GRADING_RESULTS.md":"# Chat-app-20260108-120000 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/GRADING_RESULTS.md)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/GRADING_RESULTS.md":"# Chat-app-20260107-120000 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/GRADING_RESULTS.md)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/README.md":"# chat-app-20260107-120000 Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/README.md)","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/GRADING_RESULTS.md":"# Chat-app-20260108-140800 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/GRADING_RESULTS.md)","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/GRADING_RESULTS.md":"# Chat-app-20260107-092240 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/GRADING_RESULTS.md)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/GRADING_RESULTS.md":"# Chat-app-20260128-112222 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/GRADING_RESULTS.md)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/README.md":"# chat-app-20260128-112222 Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/README.md)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/GRADING_RESULTS.md":"# Chat-app-20260107-120000 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/GRADING_RESULTS.md)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/README.md":"# chat-app-20260107-120000 Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/README.md)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/GRADING_RESULTS.md":"# Chat-app-20260104-120000 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/GRADING_RESULTS.md)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/README.md":"# chat-app-20260104-120000 Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/README.md)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/GRADING_RESULTS.md":"# Chat-app-20260104-160000 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/GRADING_RESULTS.md)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/README.md":"# chat-app-20260104-160000 Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/README.md)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/GRADING_RESULTS.md":"# Chat-app-20260104-180000 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/GRADING_RESULTS.md)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/README.md":"# chat-app-20260104-180000 Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/README.md)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/GRADING_RESULTS.md":"# Chat-app-20260102-162918 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/GRADING_RESULTS.md)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/README.md":"# chat-app-20260102-162918 Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/README.md)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/GRADING_RESULTS.md":"# Chat-app-20260102-170500 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/GRADING_RESULTS.md)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/README.md":"# chat-app-20260102-170500 Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/README.md)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/GRADING_RESULTS.md":"# Chat-app-20260102-171317 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/GRADING_RESULTS.md)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/README.md":"# chat-app-20260102-171317 Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/README.md)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/GRADING_RESULTS.md":"# Chat-app-20260105-180000 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/GRADING_RESULTS.md)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/README.md":"# chat-app-20260105-180000 Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/README.md)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/package-lock.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/package.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/package.json)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/tsconfig.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/package-lock.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/package.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/package.json)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/tsconfig.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/package-lock.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/package.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/package.json)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/tsconfig.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/tsconfig.node.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/tsconfig.node.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/tsconfig.node.json)","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/package-lock.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/package.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/package.json)","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/tsconfig.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/package-lock.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/package.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/package.json)","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/tsconfig.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/package-lock.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/package.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/package.json)","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/tsconfig.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/tsconfig.node.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/tsconfig.node.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/tsconfig.node.json)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/package-lock.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/package.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/package.json)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/tsconfig.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/tsconfig.node.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/tsconfig.node.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/tsconfig.node.json)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/package-lock.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/package.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/package.json)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/tsconfig.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/package-lock.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/package.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/package.json)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/tsconfig.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/tsconfig.node.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/tsconfig.node.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/tsconfig.node.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/package-lock.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/package.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/package.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/tsconfig.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/tsconfig.node.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/tsconfig.node.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/tsconfig.node.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/package-lock.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/package.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/package.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/tsconfig.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/package-lock.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/package.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/package.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/tsconfig.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/server/package.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/server/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/server/package.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/server/tsconfig.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/server/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/server/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/client/package.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/client/package.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/client/tsconfig.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/client/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/server/package.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/server/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/server/package.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/server/tsconfig.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/server/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/server/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/package-lock.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/package.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/package.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/tsconfig.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/package-lock.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/package.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/package.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/tsconfig.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/package-lock.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/package.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/package.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/tsconfig.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/package-lock.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/package.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/package.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/tsconfig.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/tsconfig.json)","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/package-lock.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/package-lock.json)","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/package.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/package.json)","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/tsconfig.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/tsconfig.json)","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/package-lock.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/package-lock.json)","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/package.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/package.json)","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/tsconfig.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/package-lock.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/package.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/package.json)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/tsconfig.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/package-lock.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/package.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/package.json)","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/tsconfig.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/package-lock.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/package.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/package.json)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/tsconfig.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/package-lock.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/package.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/package.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/tsconfig.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/package-lock.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/package.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/package.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/tsconfig.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/package-lock.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/package.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/package.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/tsconfig.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/package-lock.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/package.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/package.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/tsconfig.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/tsconfig.json)","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/package-lock.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/package-lock.json)","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/package.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/package.json)","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/tsconfig.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/tsconfig.json)","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/package-lock.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/package-lock.json)","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/package.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/package.json)","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/tsconfig.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/tsconfig.json)"},"files":{"skills/csharp-server/SKILL.md":"---\nname: csharp-server\ndescription: SpacetimeDB C# server module SDK reference. Use when writing tables, reducers, or module logic in C#.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: server\n  language: csharp\n  cursor_globs: \"**/*.cs\"\n  cursor_always_apply: true\n---\n\n# SpacetimeDB C# SDK Reference\n\n## Module Structure\n\nReducers are static methods in a `static partial class`; tables are `public partial struct`s. This reference keeps everything in one `public static partial class Module`, which needs only `using SpacetimeDB;`:\n\nMethods exported through SpacetimeDB attributes, including reducers, procedures, views, HTTP handlers, and routers, must be `public static`; generated bindings invoke them from another class.\n\n```csharp\nusing SpacetimeDB;\n\npublic static partial class Module\n{\n    [SpacetimeDB.Table(Accessor = \"ScoreRecord\", Public = true)]\n    public partial struct ScoreRecord\n    {\n        [PrimaryKey]\n        [AutoInc]\n        public ulong Id;\n        public Identity Owner;\n        public uint Value;\n    }\n\n    [SpacetimeDB.Reducer]\n    public static void AddRecord(ReducerContext ctx, uint value)\n    {\n        ctx.Db.ScoreRecord.Insert(new ScoreRecord { Id = 0, Owner = ctx.Sender, Value = value });\n    }\n}\n```\n\n## Tables\n\n`[SpacetimeDB.Table(...)]` on a `public partial struct`. `Accessor` should be PascalCase:\n\n```csharp\n[SpacetimeDB.Table(Accessor = \"Entity\", Public = true)]\npublic partial struct Entity\n{\n    [PrimaryKey]\n    [AutoInc]\n    public ulong Id;\n    [SpacetimeDB.Index.BTree]\n    public Identity Owner;\n    public string Name;\n    [SpacetimeDB.Index.BTree]\n    public bool Active;\n}\n```\n\nOptions: `Accessor = \"PascalCase\"` (recommended), `Public = true`, `Scheduled = nameof(ReducerFn)`, `ScheduledAt = nameof(field)`, `Event = true`\n\n`ctx.Db` accessors use the `Accessor` name: `ctx.Db.Entity`, `ctx.Db.ScoreRecord`.\n\n## Column Types\n\n| C# type | Notes |\n|---------|-------|\n| `byte` / `ushort` / `uint` / `ulong` | unsigned integers |\n| `U128` / `U256` | large unsigned integers (SpacetimeDB types) |\n| `sbyte` / `short` / `int` / `long` | signed integers |\n| `I128` / `I256` | large signed integers (SpacetimeDB types) |\n| `float` / `double` | floats |\n| `bool` | boolean |\n| `string` | text |\n| `List<T>` | list/array |\n| `Identity` | user identity |\n| `ConnectionId` | connection handle |\n| `Timestamp` | server timestamp (microseconds since epoch) |\n| `TimeDuration` | duration in microseconds |\n| `Uuid` | UUID |\n\nOptional columns: nullable types (`string? Nickname`, `uint? HighScore`)\n\n## Column Attributes\n\nThe complete set of column attributes:\n\n```csharp\n[PrimaryKey]          // primary key\n[AutoInc]             // auto-increment (use 0 as placeholder on insert)\n[Unique]              // unique constraint; indexes the column, enables .Find()\n[SpacetimeDB.Index.BTree]  // btree index (enables .Filter() on this column)\n[Default(true)]       // migration-safe default for a newly appended field\n```\n\nDefaults support compatible addition of a newly appended field. Do not apply `[Default(...)]` to primary-key, unique, or auto-increment fields.\n\n## Indexes\n\nWrite the index attribute fully qualified: `[SpacetimeDB.Index.BTree]`. Prefer inline for single-column; multi-column uses struct-level:\n\n```csharp\n// Inline (preferred for single-column):\n[SpacetimeDB.Index.BTree]\npublic ulong AuthorId;\n// Access: ctx.Db.Post.AuthorId.Filter(authorId)\n\n// Multi-column (struct-level):\n[SpacetimeDB.Table(Accessor = \"Membership\")]\n[SpacetimeDB.Index.BTree(Accessor = \"ByGroupUser\", Columns = new[] { nameof(GroupId), nameof(UserId) })]\npublic partial struct Membership { public ulong GroupId; public Identity UserId; ... }\n```\n\nPrefer a multi-column index over filtering by one column and looping.\n\n## Reducers\n\n```csharp\n[SpacetimeDB.Reducer]\npublic static void CreateEntity(ReducerContext ctx, string name, int age)\n{\n    ctx.Db.Entity.Insert(new Entity { Owner = ctx.Sender, Name = name, Age = age, Active = true });\n}\n\n// No arguments:\n[SpacetimeDB.Reducer]\npublic static void DoReset(ReducerContext ctx) { ... }\n```\n\n## DB Operations\n\n```csharp\nvar row = ctx.Db.Entity.Insert(new Entity { Name = \"Sample\" });   // Insert; returns the row with AutoInc fields assigned\nctx.Db.Entity.Id.Find(entityId);                                  // Find by PK → Entity? (nullable)\nctx.Db.Entity.Identity.Find(ctx.Sender);                          // Find by unique column → Entity?\nif (ctx.Db.Entity.Id.Find(entityId) is { } entity) { ... }        // unwrap Entity? before member access\nctx.Db.Item.AuthorId.Filter(authorId);                            // Filter by index → IEnumerable<Item>\nctx.Db.Entity.Iter();                                             // All rows → IEnumerable<Entity>\nctx.Db.Entity.Count;                                              // Count rows\nctx.Db.Entity.Id.Update(existing with { Name = newName });        // Update by PK\nctx.Db.Entity.Id.Delete(entityId);                                // Delete by PK\n```\n\nNote: Filter/Iter return enumerables. Use `.ToList()` if you need to sort or mutate.\n\nThe pattern is `ctx.Db.{Accessor}.{ColumnName}.{Method}(value)` for all indexed column operations.\n\n## Lifecycle Hooks\n\n```csharp\n[SpacetimeDB.Reducer(ReducerKind.Init)]\npublic static void OnInit(ReducerContext ctx) { ... }\n\n[SpacetimeDB.Reducer(ReducerKind.ClientConnected)]\npublic static void OnConnect(ReducerContext ctx) { ... }\n\n[SpacetimeDB.Reducer(ReducerKind.ClientDisconnected)]\npublic static void OnDisconnect(ReducerContext ctx) { ... }\n```\n\n`ctx.ConnectionId` is `ConnectionId?`, including in connection lifecycle reducers. Check or unwrap it before storing it in a non-nullable column or passing it to an index accessor.\n\n## Views\n\n```csharp\n// Anonymous view (same result for all clients):\n[SpacetimeDB.View(Accessor = \"ActiveUsers\", Public = true)]\npublic static List<Entity> ActiveUsers(AnonymousViewContext ctx)\n{\n    return ctx.Db.Entity.Active.Filter(true).ToList();\n}\n\n// Per-user view:\n[SpacetimeDB.View(Accessor = \"MyEntities\", Public = true)]\npublic static List<Entity> MyEntities(ViewContext ctx)\n{\n    return ctx.Db.Entity.Owner.Filter(ctx.Sender).ToList();\n}\n```\n\nView contexts expose read-only table handles. These support `Count` plus `Find`/`Filter` on declared indexes, but not full-table `Iter()`. Start procedural view traversal from an indexed lookup or filter.\n\nQuery-builder views use `ViewContext`, `ctx.From`, and return `IQuery<T>` directly. Use `Where` for predicates and `RightSemijoin` when the result should contain right-side rows that have a matching left-side row:\n\n```csharp\nctx.From.Article().Where(article => article.Published.Eq(true));\nctx.From.Subscription().RightSemijoin(\n    ctx.From.Account(),\n    (subscription, account) => subscription.AccountId.Eq(account.Id)\n);\n```\n\nDeclare a procedural view primary key in its attribute: `[SpacetimeDB.View(Accessor = \"CatalogEntry\", Public = true, PrimaryKey = nameof(CatalogRow.Sku))]`.\n\nProcedural-view primary keys are explicit schema metadata. Add one only when the view itself is required to expose a primary key; a source table's primary key is not inherited by the view.\n\nInclusive btree ranges use tuples, for example `ctx.Db.Shipment.DeliverBy.Filter((new Timestamp(1_000), new Timestamp(2_000)))`.\n\n## Client Visibility Filters\n\n```csharp\n[ClientVisibilityFilter]\npublic static readonly Filter PrivateNoteFilter = new Filter.Sql(\n    \"SELECT * FROM OwnedRow WHERE Owner = :sender\"\n);\n```\n\n## Reducer Context API\n\n`ReducerContext` (`ctx`) is the only source of sender identity, time, and randomness; stdlib clocks and RNG are unavailable in modules.\n\n```csharp\n// Auth: ctx.Sender is the caller's Identity\nif (row.Owner != ctx.Sender)\n    throw new Exception(\"unauthorized\");\n\n// Server timestamp (deterministic per reducer call)\nctx.Db.Item.Insert(new Item { CreatedAt = ctx.Timestamp, .. });\n\n// Timestamp arithmetic\nvar expiry = ctx.Timestamp + new TimeDuration(delayMicros);\n\n// Deterministic RNG\nint roll = ctx.Rng.Next(1, 7);          // [1, 7): inclusive 1, exclusive 7\ndouble f = ctx.Rng.NextDouble();        // [0.0, 1.0)\n\n// Timestamp → milliseconds since epoch\ntimestamp.MicrosecondsSinceUnixEpoch / 1000\n```\n\n## Scheduled Tables\n\nDeclare the scheduled table and its reducer in the same `Module` class so `nameof(...)` resolves:\n\n```csharp\n[SpacetimeDB.Table(\n    Accessor = \"TickTimer\",\n    Scheduled = nameof(Tick),\n    ScheduledAt = nameof(ScheduledAt),\n    Public = true\n)]\npublic partial struct TickTimer\n{\n    [PrimaryKey]\n    [AutoInc]\n    public ulong ScheduledId;\n    public ScheduleAt ScheduledAt;\n}\n\n[SpacetimeDB.Reducer]\npublic static void Tick(ReducerContext ctx, TickTimer timer)\n{\n    // timer row is auto-deleted after this reducer runs\n}\n\n// One-time: fires once at a specific time\nvar at = new ScheduleAt.Time(ctx.Timestamp + new TimeDuration(10_000_000));\n// Repeating: fires on an interval\nvar at = new ScheduleAt.Interval(TimeSpan.FromSeconds(5));\n\nctx.Db.TickTimer.Insert(new TickTimer { ScheduledId = 0, ScheduledAt = at });\n```\n\nScheduled reducer callbacks use the ordinary `[SpacetimeDB.Reducer]` attribute. There is no `ReducerKind.Scheduled`; the table's `Scheduled` option associates the callback.\n\nTo construct a `ConnectionId` from a 128-bit numeric representation, encode it as exactly 16 little-endian bytes and call `ConnectionId.From(bytes)`. The result is nullable and must be checked before use.\n\n## Procedures and HTTP\n\nProcedures are unstable APIs, so modules using them should include `#pragma warning disable STDB_UNSTABLE`. They receive `ProcedureContext` and may return `[SpacetimeDB.Type]` values:\n\n```csharp\n[SpacetimeDB.Type]\npublic partial struct ResultValue { public string Value; }\n\n[SpacetimeDB.Procedure]\npublic static ResultValue Inspect(ProcedureContext ctx, string input) =>\n    new() { Value = input };\n```\n\nOutbound HTTP is available through `ctx.Http`; handle its success/error result before using the response. Open short database transactions with `ctx.WithTx`. Perform network I/O before opening the transaction, and keep only database work inside its callback.\n\n```csharp\nvar result = ctx.Http.Get(uri);\nvar text = result.Match(\n    response => response.Body.ToStringUtf8Lossy(),\n    error => throw new Exception(error.Message)\n);\n\nctx.WithTx(tx =>\n{\n    tx.Db.ScoreRecord.Insert(new ScoreRecord { Id = 0, Owner = ctx.Sender, Value = 1 });\n    return 0;\n});\n```\n\n`WithTx` is generic: its callback must return a value (use `return 0;` when no result is needed). The callback's generated `tx.Db` exposes module table accessors; `ProcedureContext` and `HandlerContext` do not expose tables directly.\n\nFor non-GET requests, construct and send an `HttpRequest` directly:\n\n```csharp\nvar result = ctx.Http.Send(new HttpRequest\n{\n    Uri = uri,\n    Method = SpacetimeDB.HttpMethod.Post,\n    Headers = new() { new HttpHeader(\"content-type\", \"text/plain\") },\n    Body = HttpBody.FromString(payload),\n});\n```\n\n`HttpResponse.StatusCode` is `ushort`. HTTP headers are `HttpHeader` values, not tuples, and each header's `Value` is `byte[]`; decode text values with `System.Text.Encoding.UTF8.GetString(header.Value)`. Treat bodies as bytes: use `HttpBody.FromString(...)` to create text, `new HttpBody(bytes)` to supply raw bytes, `ToBytes()` to read raw bytes, and `ToStringUtf8Lossy()` to read text. There is no `HttpBody.FromBytes`, and `ToString()` does not return body contents. Qualify `SpacetimeDB.HttpMethod` when .NET's implicit `System.Net.Http` imports could make the name ambiguous.\n\nScheduled procedures use the ordinary scheduled-table shape. Its `Scheduled` name refers to a `[SpacetimeDB.Procedure]` method taking `ProcedureContext` plus the scheduled row, and database access inside that procedure goes through `ctx.WithTx`.\n\nInbound HTTP uses handler attributes and one router. Handler database access also goes through `ctx.WithTx`:\n\n```csharp\n[SpacetimeDB.HttpHandler]\npublic static HttpResponse Health(HandlerContext ctx, HttpRequest request) => new(\n    200, HttpVersion.Http11, new(), HttpBody.FromString(\"ok\")\n);\n\n[SpacetimeDB.HttpRouter]\npublic static Router Routes() => SpacetimeDB.Router.New().Get(\"/health\", Handlers.Health);\n```\n\n`Handlers` is generated from methods marked `[SpacetimeDB.HttpHandler]`; do not declare it yourself. Reference an attributed method in a router as `Handlers.MethodName`.\n\n## Custom Types\n\n```csharp\n[SpacetimeDB.Type]\npublic enum Status { Online, Away, Offline }\n\n[SpacetimeDB.Type]\npublic partial struct Point { public float X; public float Y; }\n```\n\nTagged enums (discriminated unions): a `partial record` with empty body and no constructor parameters. Payloads are `[Type] partial struct`s:\n\n```csharp\n[SpacetimeDB.Type]\npublic partial struct Circle { public int Radius; }\n\n[SpacetimeDB.Type]\npublic partial struct Rectangle { public int Width; public int Height; }\n\n[SpacetimeDB.Type]\npublic partial record Shape : SpacetimeDB.TaggedEnum<(Circle Circle, Rectangle Rectangle)> { }\n\n// Construct variants via the generated nested constructors:\nvar a = new Shape.Circle(new Circle { Radius = 10 });\nvar b = new Shape.Rectangle(new Rectangle { Width = 4, Height = 6 });\n```\n","skills/mcp/SKILL.md":"---\nname: mcp\ndescription: Operate a running SpacetimeDB database through MCP tools rather than the CLI - list databases, read schemas, run SQL, and call reducers. Use when the client exposes spacetimedb MCP tools and the task is to inspect or change data in a live database.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: shared\n  language: all\n  cursor_globs: \"**/*\"\n  cursor_always_apply: false\ntriggers:\n  - inspect the database\n  - query the database\n  - list my databases\n  - read the schema\n  - call a reducer\n  - use the MCP server\n  - spacetimedb MCP\n---\n\n# SpacetimeDB over MCP\n\nA SpacetimeDB host speaks MCP, so an MCP-aware client can operate a live database with tool calls\ninstead of shell commands. If the client exposes `spacetimedb` tools, use them for anything that\nreads or changes a running database.\n\nCheck the tool list before deciding they are missing. The tools are passive: they appear as\n`spacetimedb.list_databases`, `spacetimedb.get_schema`, `spacetimedb.sql`, `spacetimedb.call`, and\n`spacetimedb.ping`, and nothing announces them.\n\n## Which to reach for\n\n| Task | Use |\n| --- | --- |\n| List databases, read a schema, run SQL, call a reducer | **MCP tools** |\n| init, build, publish, generate, start, logs | **`spacetime` CLI** (see the `cli` skill) |\n\nThe MCP tools only operate a database that already exists. They cannot scaffold a project, compile a\nmodule, publish, or generate bindings, so the two are complementary rather than alternatives. Prefer\nthe tools when they are present: they are typed, they return JSON, and the client can gate the\ndestructive ones. When no MCP client is attached, the equivalent CLI commands are correct.\n\n## The tools\n\n| Tool | Arguments | Returns |\n| --- | --- | --- |\n| `list_databases` | none | the databases **you own**, with identity and names |\n| `get_schema` | `database` | tables and reducers as JSON |\n| `sql` | `database`, `sql`, optional `confirmed` | rows as JSON |\n| `call` | `database`, `reducer`, optional `args` (JSON array) | the reducer outcome |\n| `ping` | optional `message` | a health check |\n\n`list_databases` lists only your own databases, so it is empty for an anonymous identity. Start there\nwhen you do not know the database name.\n\n## Two shapes, so read `tools/list` first\n\nA server is either host-wide or scoped to one database. Do not assume which:\n\n**Host-wide** (`spacetime mcp` with no database, or `POST /v1/mcp`). Every data tool takes a required\n`database` argument, a name or an identity, and `list_databases` is offered:\n\n```json\n{ \"name\": \"sql\", \"arguments\": { \"database\": \"mydb\", \"sql\": \"SELECT * FROM message\" } }\n```\n\n**Scoped** (`spacetime mcp <database>`, or `POST /v1/database/<db>/mcp`). The connection fixes the\ndatabase, so there is no `database` argument and no `list_databases`:\n\n```json\n{ \"name\": \"sql\", \"arguments\": { \"sql\": \"SELECT * FROM message\" } }\n```\n\nWhen `spacetime mcp` runs inside a project with a `spacetime.json` that has a single unambiguous\n`server`, it uses that server unless `--server` or `--no-config` is passed. It does not infer a\ndatabase from the config; omitting the database argument still means host-wide mode.\n\n## Rules that do not change\n\nThe tools run with your identity, exactly as the HTTP API does. The model is the same as everywhere\nelse, so the `concepts` skill still governs:\n\n1. **Reducers are the write path.** Use `call` to change data. It runs in a transaction that either\n   fully commits or fully rolls back.\n2. **SQL writes require ownership.** `sql` reads public tables; writing through it needs you to own\n   the database. Prefer `call`.\n3. **Private tables are not client-readable.** `get_schema` still shows a private table's\n   declaration, so a `no such table` error from `sql` usually means the table is private rather than\n   missing. Access depends on your identity, so do not assume a private table is readable.\n4. **Tool errors come back in band.** A failed reducer or a bad query returns a result with\n   `isError: true` and the message as text, not a transport failure. Read the text before retrying.\n\n## Inspecting a database\n\n```\nlist_databases {}\nget_schema     { \"database\": \"mydb\" }\nsql            { \"database\": \"mydb\", \"sql\": \"SELECT * FROM message\" }\ncall           { \"database\": \"mydb\", \"reducer\": \"send_message\", \"args\": [\"hello\"] }\n```\n\nPass `\"confirmed\": true` to `sql` to wait for a durably confirmed read.\n\n## Troubleshooting\n\n| Message | Meaning |\n| --- | --- |\n| `database argument must be a string` | The server is host-wide and you omitted `database` |\n| `unknown tool: list_databases` | The server is scoped to one database already |\n| `` `x` not found `` | No such database on this server, or a name where an identity was meant |\n| `no such table: x` | The table is private, or you are querying the wrong database |\n| No `spacetimedb` tools at all | No MCP server is connected. Use the CLI instead (`cli` skill) |\n\n`spacetime mcp` is UNSTABLE and subject to breaking changes. If a client cannot start it, fall back\nto the CLI commands in the `cli` skill.\n\nReference: https://spacetimedb.com/docs\n","skills/csharp-client/SKILL.md":"---\nname: csharp-client\ndescription: SpacetimeDB C#/.NET client SDK reference. Use when building C# clients that connect to SpacetimeDB (console, desktop, or any .NET app).\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: client\n  language: csharp\n  cursor_globs: \"**/*.cs\"\n  cursor_always_apply: true\n---\n\n# SpacetimeDB C# Client\n\nInstall: `dotnet add package SpacetimeDB.ClientSDK`\n\nGenerated bindings convert snake_case names to PascalCase, including row fields: a server column `trip_id` is `TripId` on client rows.\n\n## Connection\n\n```csharp\nusing SpacetimeDB;\nusing SpacetimeDB.Types;\n\nvar conn = DbConnection.Builder()\n    .WithUri(\"http://localhost:3000\")\n    .WithDatabaseName(\"my-database\")\n    .WithToken(savedToken)\n    .WithCompression(Compression.Brotli) // optional; this is the default\n    .OnConnect((conn, identity, token) =>\n    {\n        Console.WriteLine($\"Connected as: {identity}\");\n        // Save token for reconnection\n        File.WriteAllText(\"auth_token.txt\", token);\n\n        conn.SubscriptionBuilder()\n            .OnApplied(OnSubscriptionApplied)\n            .SubscribeToAllTables();\n    })\n    .OnConnectError(err => Console.Error.WriteLine($\"Connection failed: {err}\"))\n    .OnDisconnect((conn, err) =>\n    {\n        if (err != null) Console.Error.WriteLine($\"Disconnected: {err}\");\n    })\n    .Build();\n```\n\nCompression options are `Compression.Brotli`, `Compression.Gzip`, and `Compression.None`. The SDK uses Brotli when `WithCompression` is omitted.\n\n## Automatic Reconnect and Token Refresh\n\nAutomatic reconnect is opt-in: add `.WithAutomaticReconnect()` to the builder. Initial connection failures do not retry. After an established connection is lost, the SDK retries with exponential backoff and jitter from `MinDelay` (default 1 s) up to `MaxDelay` (default 30 s); tune them with `.WithAutomaticReconnect(new AutomaticReconnectOptions { MinDelay = ..., MaxDelay = ... })`. Values below the 500 ms and 1 s floors are raised with a warning, so that retrying clients cannot overwhelm the database. `Disconnect()` permanently stops recovery.\n\nKeep calling `FrameTick()` while `IsActive` is false. `IsReconnecting` is true while recovering before the next handshake. Use `.OnDisconnect((conn, error, next) => ...)` and `.OnConnectError((error, next) => ...)` to inspect `NextReconnect?`: a non-null value provides `Attempt` and `Delay`; null means no retry is scheduled. Existing callback overloads still work.\n\n`OnConnect` runs on every successful reconnect, so create the subscription in the example above only on the first connection, or move it after `Build()`. Register row callbacks once as well. The same connection, identity, table handles, and subscriptions survive; each attempt gets a fresh `ConnectionId`. Cached rows stay readable but stale during outages. The SDK replays subscriptions in one batch and emits only net row changes. Subscription `OnApplied` runs again after replay; use it to mark data ready, not for repeated one-time setup.\n\nFor expiring credentials, combine `.WithToken(initialToken)` with `.WithTokenProvider(() => RefreshTokenAsync())`, where your provider returns `Task<string>` for the same identity. The provider is not called for the initial connection. Before retries, it is called when remaining validity is at most 30 seconds or 5% of the token lifetime, whichever is greater, when expiry cannot be read, or after a reused token is rejected. Provider failures retry; rejection of a freshly provided token is terminal. No periodic refresh runs while connected. Disconnecting ignores a pending provider result but does not cancel the provider's own work.\n\nCalls made while disconnected fail immediately. Pending reducer calls receive `Status.UnknownResult`; pending procedures and one-off queries fail with `UnknownResultException`. These calls may already have executed and are never replayed. Regenerate bindings so unhandled unknown reducer outcomes reach `OnUnhandledReducerError`.\n\n## Event Loop (Critical)\n\n**`FrameTick()` must be called in your main loop.** The SDK queues all network messages and only processes them when you call `FrameTick()`. Without it, no callbacks fire.\n\n```csharp\nwhile (running)\n{\n    conn.FrameTick();\n    // Your application logic...\n    Thread.Sleep(16); // ~60fps\n}\n```\n\n**Thread safety**: `FrameTick()` processes messages on the calling thread. Do NOT call it from a background thread. Do NOT access `conn.Db` from background threads.\n\n## Subscriptions\n\n```csharp\n// Subscribe to all tables\nconn.SubscriptionBuilder()\n    .OnApplied(ctx => Console.WriteLine(\"Subscription ready\"))\n    .SubscribeToAllTables();\n\n// Subscribe with typed query builder (recommended)\nconn.SubscriptionBuilder()\n    .OnApplied(OnSubscriptionApplied)\n    .AddQuery(q => q.From.Player().Where(p => p.Level.Gte(5u)))\n    .AddQuery(q => q.From.GameState())\n    .Subscribe();\n\n// Or with raw SQL strings\nconn.SubscriptionBuilder()\n    .OnApplied(OnSubscriptionApplied)\n    .Subscribe(new[] {\n        \"SELECT * FROM player WHERE level >= 5\",\n        \"SELECT * FROM game_state\"\n    });\n```\n\n## Row Callbacks\n\n```csharp\nconn.Db.Player.OnInsert += (EventContext ctx, Player player) =>\n{\n    Console.WriteLine($\"Player joined: {player.Name}\");\n};\n\nconn.Db.Player.OnDelete += (EventContext ctx, Player player) =>\n{\n    Console.WriteLine($\"Player left: {player.Name}\");\n};\n\nconn.Db.Player.OnUpdate += (EventContext ctx, Player oldPlayer, Player newPlayer) =>\n{\n    Console.WriteLine($\"Player updated: {newPlayer.Name}\");\n};\n```\n\n## Reading the Client Cache\n\n```csharp\n// Find by primary key\nif (conn.Db.Player.Id.Find(playerId) is Player player)\n{\n    Console.WriteLine($\"Player: {player.Name}\");\n}\n\n// Find by unique column\nvar me = conn.Db.Player.Identity.Find(myIdentity);\n\n// Filter by indexed column\nforeach (var p in conn.Db.Player.Level.Filter(5))\n{\n    Console.WriteLine($\"Level 5: {p.Name}\");\n}\n\n// Iterate all rows\nforeach (var p in conn.Db.Player.Iter())\n{\n    Console.WriteLine(p.Name);\n}\n\n// Count\nint total = conn.Db.Player.Count;\n```\n\n## Calling Reducers\n\n```csharp\nconn.Reducers.CreatePlayer(\"Alice\");\nconn.Reducers.MovePlayer(10.0f, 20.0f);\nconn.Reducers.SendMessage(\"Hello!\");\n```\n\nReducer calls return `void`; observe failures via the reducer callbacks below (`Status.Failed`).\n\n## Reducer Callbacks\n\n```csharp\nconn.Reducers.OnSendMessage += (ReducerEventContext ctx, string text) =>\n{\n    if (ctx.Event.Status is Status.Committed)\n        Console.WriteLine($\"Message sent: {text}\");\n    else if (ctx.Event.Status is Status.Failed(var reason))\n        Console.Error.WriteLine($\"Send failed: {reason}\");\n    else if (ctx.Event.Status is Status.UnknownResult)\n        Console.Error.WriteLine(\"Connection lost before the result arrived; the message may have been sent.\");\n};\n```\n\n## Identity\n\n```csharp\n// Identities from OnConnect callback\nIdentity myIdentity;\n\n// Compare identities\nif (player.Owner == myIdentity) { /* it's me */ }\n\n// Display\nConsole.WriteLine($\"Identity: {identity}\");\n```\n","skills/cli/SKILL.md":"---\nname: cli\ndescription: SpacetimeDB CLI reference for initializing projects, building modules, publishing databases, querying data, and managing servers\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: shared\n  language: all\n  cursor_globs: \"**/*\"\n  cursor_always_apply: false\ntriggers:\n  - spacetime init\n  - spacetime build\n  - spacetime publish\n  - spacetime dev\n  - spacetime sql\n  - spacetime call\n  - spacetime logs\n  - spacetime server\n  - spacetime login\n  - spacetime generate\n  - how do I use the CLI\n  - CLI command\n---\n\n# SpacetimeDB CLI\n\nUse this skill when the user needs help with the `spacetime` CLI tool - initializing projects, building modules, publishing databases, querying data, managing servers, or troubleshooting CLI issues.\n\n## Quick Reference\n\n### Project Initialization & Development\n\n```bash\n# Initialize new project\nspacetime init my-project --lang rust|csharp|typescript|cpp\nspacetime init my-project --template <template-id>\n\n# Build module\nspacetime build                    # release build\nspacetime build --debug            # faster iteration, slower runtime\n\n# Dev mode (auto-rebuild, auto-publish, generates bindings)\nspacetime dev\nspacetime dev --client-lang typescript --module-bindings-path ./client/src/module_bindings\n\n# Generate client bindings\nspacetime generate --lang typescript|csharp|rust --out-dir ./bindings --module-path ./server\nspacetime generate --lang unrealcpp --uproject-dir ./MyGame --module-path ./server --unreal-module-name MyGame\n```\n\n### Publishing & Deployment\n\n```bash\n# Publish to Maincloud (default)\nspacetime publish my-database --yes\n\n# Publish to local server\nspacetime publish my-database --server local --yes\n\n# Clear database and republish\nspacetime publish my-database --delete-data=always --yes\n```\n\n### Database Interaction\n\n```bash\n# SQL queries\nspacetime sql my-database \"SELECT * FROM users\"\nspacetime sql my-database --interactive   # REPL mode\n\n# Call reducers (each argument is a separate positional arg)\nspacetime call my-database my_reducer '\"value\"' '123'\n\n# Subscribe to changes\nspacetime subscribe my-database \"SELECT * FROM users\" --num-updates 10\n\n# View logs\nspacetime logs my-database -f              # follow logs\nspacetime logs my-database -n 100          # up to 100 log lines\n\n# Describe schema\n# (without --json, output is human-readable text)\nspacetime describe my-database --json\nspacetime describe my-database tables --json   # also views, reducers, procedures, routes, env, types\nspacetime describe my-database tables users --json\nspacetime describe my-database reducers my_reducer --json\n```\n\n### Database Management\n\n```bash\n# List databases\nspacetime list\n\n# Delete database\nspacetime delete my-database\n\n# Rename database\nspacetime rename <database-identity> --to new-name\n```\n\n### Server Management\n\n```bash\n# List configured servers\nspacetime server list\n\n# Add server\nspacetime server add local --url http://localhost:3000 --default\nspacetime server add myserver --url https://my-spacetime.example.com\n\n# Set default server\nspacetime server set-default local\n\n# Test connectivity\nspacetime server ping local\n\n# Start local instance\nspacetime start\n\n# Clear local data\nspacetime server clear\n```\n\n### Authentication\n\n```bash\n# Login (opens browser)\nspacetime login\n\n# Login with token\nspacetime login --token <token>\n\n# Show login status\nspacetime login show\n\n# Logout\nspacetime logout\n```\n\n## Default Servers\n\n| Name | URL | Description |\n|------|-----|-------------|\n| `maincloud` | `https://maincloud.spacetimedb.com` | Production cloud (default) |\n| `local` | `http://127.0.0.1:3000` | Local development server |\n\n## Common Flags\n\n| Flag | Short | Description |\n|------|-------|-------------|\n| `--server` | `-s` | Target server (nickname, hostname, or URL) |\n| `--yes` | `-y` | Non-interactive mode (skip confirmations) |\n| `--anonymous` | | Use anonymous identity |\n| `--module-path` | `-p` | Path to module project |\n| `--no-config` | | Ignore `spacetime.json` project configuration |\n\n## Troubleshooting\n\n### \"Not logged in\"\n```bash\nspacetime login\n# Or use --anonymous for public operations\n```\n\n### \"Server not responding\"\n```bash\nspacetime server ping <server>\n# For local: ensure spacetime start is running\n```\n\n### \"Schema conflict\"\n```bash\n# Clear data and republish\nspacetime publish my-db --delete-data=always --yes\n```\n\n### \"Build failed\"\n```bash\n# Check Rust/C# toolchain\nrustup show\n# For Rust modules, ensure wasm32-unknown-unknown target\nrustup target add wasm32-unknown-unknown\n```\n\n## Module Languages\n\n**Server-side (modules):** Rust, C#, TypeScript, C++\n**Client SDKs:** TypeScript, C#, Rust, Unreal Engine\n**CLI `generate` targets:** TypeScript, C#, Rust, Unreal C++\n","skills/concepts/SKILL.md":"---\nname: concepts\ndescription: Understand SpacetimeDB architecture and core concepts. Use when learning SpacetimeDB or making architectural decisions.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: shared\n  language: all\n  cursor_globs: \"**/*\"\n  cursor_always_apply: true\n---\n\n# SpacetimeDB Core Concepts\n\nSpacetimeDB is a relational database that is also a server. It lets you upload application logic directly into the database as modules, eliminating the traditional web/game server layer entirely. Rust, C#, and C++ modules compile to WebAssembly, while TypeScript modules run on V8.\n\n---\n\n## Critical Rules\n\n1. **Reducers are transactional.** They do not return data to callers. Use subscriptions to read data.\n2. **Reducers must be deterministic.** Do not use filesystem, network, external clocks, or external random sources in reducers. Use the reducer context (`ctx`) for SpacetimeDB-provided timestamp and deterministic random values.\n3. **Read data via tables/subscriptions**, not reducer return values. Clients get data through subscribed queries.\n4. **Auto-increment IDs are not sequential.** Gaps are normal, do not use for ordering. Use timestamps or explicit sequence columns.\n5. **`ctx.sender` is the authenticated principal.** Never trust identity passed as arguments.\n\n---\n\n## Feature Implementation Checklist\n\n1. **Backend:** Define table(s) to store the data\n2. **Backend:** Define reducer(s) to mutate the data\n3. **Client:** Subscribe to the table(s)\n4. **Client:** Call the reducer(s) from UI\n5. **Client:** Render the data from the table(s)\n\n---\n\n## Debugging Checklist\n\n1. Is SpacetimeDB server running? (`spacetime start`)\n2. Is the module published? (`spacetime publish`)\n3. Are client bindings generated? (`spacetime generate`)\n4. Check server logs for errors (`spacetime logs <db-name>`)\n5. Is the reducer actually being called from the client?\n\n---\n\n## Tables\n\n- **Private tables** (default): Only accessible by reducers and the database owner.\n- **Public tables**: Exposed for client read access through subscriptions. Writes still require reducers.\n\nOrganize data by access pattern, not by entity:\n\n```\nPlayer          PlayerState         PlayerStats\nid         <--  player_id           player_id\nname            position_x          total_kills\n                position_y          total_deaths\n                velocity_x          play_time\n```\n\n## Reducers\n\nReducers are transactional functions that modify database state. They run atomically, cannot interact with the outside world, and do not return data to callers. See the language-specific server skills for syntax.\n\n## Event Tables\n\nEvent tables broadcast reducer-specific data to clients. Rows are never stored in the client cache (`count()` returns 0, `iter()` yields nothing); only `onInsert` callbacks fire.\n\n## Subscriptions\n\nSubscriptions replicate database rows to clients in real-time.\n\n1. **Subscribe**: Register SQL queries describing needed data\n2. **Receive initial data**: All matching rows are sent immediately\n3. **Receive updates**: Real-time updates when subscribed rows change\n4. **React to changes**: Use callbacks (`onInsert`, `onDelete`, `onUpdate`)\n\nBest practices:\n- Group subscriptions by lifetime\n- Subscribe before unsubscribing when updating subscriptions\n- Avoid overlapping queries\n- Use indexes for efficient queries\n\n## Modules\n\nModules contain application logic that runs inside the database.\n\n- **Tables**: Define the data schema\n- **Reducers**: Define callable functions that modify state\n- **Event Tables**: Broadcast reducer-specific data to clients\n- **Views**: Read-only functions that expose computed subsets of data to clients\n- **Procedures**: (Unstable) Functions that can have side effects (HTTP requests, `ctx.withTx`)\n\nServer-side modules can be written in: Rust, C#, TypeScript, C++\n\nLifecycle: Write → Compile → Publish (`spacetime publish`) → Hot-swap (republish without disconnecting clients)\n\n## Identity\n\n- **Identity**: A long-lived, globally unique identifier for a user.\n- **ConnectionId**: Identifies a specific client connection.\n- Always use `ctx.sender` / `ctx.Sender` / `ctx.sender()` for authorization.\n\nSpacetimeDB works with many OIDC providers, including SpacetimeAuth (built-in), Auth0, Clerk, Keycloak, Google, and GitHub.\n","skills/cpp-server/SKILL.md":"---\nname: cpp-server\ndescription: SpacetimeDB C++ server module SDK reference. Use when writing tables, reducers, or module logic in C++.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: server\n  language: cpp\n  cursor_globs: \"**/*.cpp,**/*.h,**/*.hpp\"\n  cursor_always_apply: true\n---\n\n# SpacetimeDB C++ SDK Reference\n\n## Imports\n\n```cpp\n#include <spacetimedb.h>\nusing namespace SpacetimeDB;\n```\n\n## Tables\n\nRegister structs with macros, then declare as tables:\n\n```cpp\nstruct Entity {\n    uint64_t id;\n    Identity owner;\n    std::string name;\n    bool active;\n};\nSPACETIMEDB_STRUCT(Entity, id, owner, name, active)\nSPACETIMEDB_TABLE(Entity, entity, Public)\nFIELD_PrimaryKeyAutoInc(entity, id)\nFIELD_Index(entity, name)\n```\n\nOptions:\n- `SPACETIMEDB_TABLE(Type, accessor, Public|Private)`: regular table\n- `SPACETIMEDB_TABLE(Type, accessor, Public|Private, true)`: event table\n\nField constraints:\n- `FIELD_PrimaryKey(accessor, field)`: primary key\n- `FIELD_PrimaryKeyAutoInc(accessor, field)`: primary key with auto-increment (use 0 on insert)\n- `FIELD_Unique(accessor, field)`: unique constraint\n- `FIELD_Index(accessor, field)`: btree index (enables `.filter()`)\n\n## Column Types\n\n| C++ type | Notes |\n|----------|-------|\n| `uint8_t` / `uint16_t` / `uint32_t` / `uint64_t` | unsigned integers |\n| `SpacetimeDB::u128` / `SpacetimeDB::u256` | large unsigned integers |\n| `int8_t` / `int16_t` / `int32_t` / `int64_t` | signed integers |\n| `SpacetimeDB::i128` / `SpacetimeDB::i256` | large signed integers |\n| `float` / `double` | floats |\n| `bool` | boolean |\n| `std::string` | text |\n| `std::vector<T>` | list/array |\n| `std::optional<T>` | nullable column |\n| `Identity` | user identity |\n| `ConnectionId` | connection handle |\n| `Timestamp` | server timestamp (microseconds since epoch) |\n| `TimeDuration` | duration in microseconds |\n| `ScheduleAt` | for scheduled tables |\n\n## Indexes\n\n```cpp\n// Single-column:\nFIELD_Index(entity, name)\n// Access: ctx.db[entity_name].filter(\"Alice\")\n\n// Multi-column:\nFIELD_NamedMultiColumnIndex(score, by_player_and_level, player_id, level)\n```\n\nRange queries (included by `spacetimedb.h`; include `<spacetimedb/range_queries.h>` directly only when not using the umbrella header):\n```cpp\nctx.db[user_age].filter(range_inclusive(uint8_t(18), uint8_t(65)));\nctx.db[user_age].filter(range_from(uint8_t(18)));\n```\n\n## Reducers\n\nAll reducers return `ReducerResult`. Use `Ok()` or `Err(message)`:\n\n```cpp\nSPACETIMEDB_REDUCER(create_entity, ReducerContext ctx, std::string name) {\n    if (name.empty()) {\n        return Err(\"Name cannot be empty\");\n    }\n    ctx.db[entity].insert(Entity{0, ctx.sender(), name, true});\n    return Ok();\n}\n```\n\n## DB Operations\n\n```cpp\nctx.db[entity].insert(Entity{0, owner, \"Sample\", true});     // Insert (0 for autoInc)\nctx.db[entity_id].find(entityId);                             // Find by PK → std::optional\nctx.db[entity_identity].find(ctx.sender());                   // Find by unique column\nctx.db[entity_name].filter(\"Alice\");                          // Filter by index → iterable\nctx.db[entity];                                               // All rows → iterable (range-for)\nctx.db[entity].count();                                       // Count rows\n\n// Update: find, mutate, update\nif (auto e = ctx.db[entity_id].find(entityId)) {\n    e->name = \"New Name\";\n    ctx.db[entity_id].update(*e);\n}\n\n// Delete by primary key\nctx.db[entity_id].delete_by_key(entityId);\n```\n\nNote: Bracket notation `ctx.db[accessor]` is used for all table access. The accessor name comes from `SPACETIMEDB_TABLE` and `FIELD_*` macros.\n\n## Lifecycle Hooks\n\n```cpp\nSPACETIMEDB_INIT(init, ReducerContext ctx) {\n    LOG_INFO(\"Database initializing...\");\n    return Ok();\n}\n\nSPACETIMEDB_CLIENT_CONNECTED(on_connect, ReducerContext ctx) {\n    LOG_INFO(\"Connected: \" + ctx.sender().to_string());\n    return Ok();\n}\n\nSPACETIMEDB_CLIENT_DISCONNECTED(on_disconnect, ReducerContext ctx) {\n    LOG_INFO(\"Disconnected: \" + ctx.sender().to_string());\n    return Ok();\n}\n```\n\n## Authentication & Timestamps\n\n```cpp\n// Auth: ctx.sender() is the caller's Identity\nif (row.owner != ctx.sender()) {\n    return Err(\"unauthorized\");\n}\n\n// Server timestamps\nctx.db[item].insert(Item{0, ctx.sender(), ctx.timestamp});\n\n// Timestamp arithmetic\nTimestamp later = ctx.timestamp + TimeDuration::from_seconds(10);\n```\n\n## Reducer Context\n\n`ReducerContext` is the single source of sender identity, deterministic time, and deterministic randomness inside a reducer. Always go through `ctx` for these. Standard library clocks and random sources are not available in modules.\n\n```cpp\nctx.db[table]          // Table access (bracket notation)\nctx.sender()           // Caller's Identity\nctx.timestamp          // Invocation timestamp\nctx.connection_id      // std::optional<ConnectionId>\nctx.identity()         // Module's own identity\nctx.rng()              // Deterministic RNG\nctx.sender_auth()      // AuthCtx with JWT claims\n```\n\n## Scheduled Tables\n\n```cpp\nstruct Reminder {\n    uint64_t scheduled_id;\n    ScheduleAt scheduled_at;\n    std::string message;\n};\nSPACETIMEDB_STRUCT(Reminder, scheduled_id, scheduled_at, message)\nSPACETIMEDB_TABLE(Reminder, reminder, Public)\nFIELD_PrimaryKeyAutoInc(reminder, scheduled_id)\nSPACETIMEDB_SCHEDULE(reminder, 1, send_reminder)  // 1 = scheduled_at field index (0-based)\n\nSPACETIMEDB_REDUCER(send_reminder, ReducerContext ctx, Reminder arg) {\n    LOG_INFO(\"Reminder: \" + arg.message);\n    return Ok();\n}\n\n// One-time: fires at a specific time\nctx.db[reminder].insert(Reminder{0, ScheduleAt::time(ctx.timestamp + TimeDuration::from_seconds(10)), \"msg\"});\n// Repeating: fires on an interval\nctx.db[reminder].insert(Reminder{0, ScheduleAt::interval(TimeDuration::from_seconds(5)), \"msg\"});\n```\n\n## Custom Types\n\n```cpp\n// Struct (product type):\nstruct Point { float x; float y; };\nSPACETIMEDB_STRUCT(Point, x, y)\n\n// Enum (sum type):\nSPACETIMEDB_UNIT_TYPE(Active)\nSPACETIMEDB_UNIT_TYPE(Inactive)\nSPACETIMEDB_ENUM(PlayerStatus,\n    (Active, Active),\n    (Inactive, Inactive),\n    (Suspended, std::string)\n)\n```\n\n## Logging\n\n```cpp\nLOG_INFO(\"Message: \" + msg);\nLOG_WARN(\"Warning: \" + msg);\nLOG_ERROR(\"Error: \" + msg);\nLOG_DEBUG(\"Debug: \" + msg);\nLOG_PANIC(\"Fatal: \" + msg);   // terminates reducer\n```\n\n## Complete Example\n\n```cpp\n#include <spacetimedb.h>\nusing namespace SpacetimeDB;\n\nstruct Entity {\n    Identity identity;\n    std::string name;\n    bool active;\n};\nSPACETIMEDB_STRUCT(Entity, identity, name, active)\nSPACETIMEDB_TABLE(Entity, entity, Public)\nFIELD_PrimaryKey(entity, identity)\n\nstruct Record {\n    uint64_t id;\n    Identity owner;\n    uint32_t value;\n    Timestamp created_at;\n};\nSPACETIMEDB_STRUCT(Record, id, owner, value, created_at)\nSPACETIMEDB_TABLE(Record, record, Public)\nFIELD_PrimaryKeyAutoInc(record, id)\n\nSPACETIMEDB_CLIENT_CONNECTED(on_connect, ReducerContext ctx) {\n    if (auto existing = ctx.db[entity_identity].find(ctx.sender())) {\n        existing->active = true;\n        ctx.db[entity_identity].update(*existing);\n    }\n    return Ok();\n}\n\nSPACETIMEDB_CLIENT_DISCONNECTED(on_disconnect, ReducerContext ctx) {\n    if (auto existing = ctx.db[entity_identity].find(ctx.sender())) {\n        existing->active = false;\n        ctx.db[entity_identity].update(*existing);\n    }\n    return Ok();\n}\n\nSPACETIMEDB_REDUCER(create_entity, ReducerContext ctx, std::string name) {\n    if (ctx.db[entity_identity].find(ctx.sender())) {\n        return Err(\"already exists\");\n    }\n    ctx.db[entity].insert(Entity{ctx.sender(), name, true});\n    return Ok();\n}\n\nSPACETIMEDB_REDUCER(add_record, ReducerContext ctx, uint32_t value) {\n    if (!ctx.db[entity_identity].find(ctx.sender())) {\n        return Err(\"not found\");\n    }\n    ctx.db[record].insert(Record{0, ctx.sender(), value, ctx.timestamp});\n    return Ok();\n}\n```\n","skills/rust-server/SKILL.md":"---\nname: rust-server\ndescription: SpacetimeDB Rust server module SDK reference. Use when writing tables, reducers, or module logic in Rust.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: server\n  language: rust\n  cursor_globs: \"**/*.rs\"\n  cursor_always_apply: true\n---\n\n# SpacetimeDB Rust SDK Reference\n\n## Imports\n\n```rust\nuse spacetimedb::{\n    procedure, reducer, table, Filter, Identity, ProcedureContext, Query,\n    ReducerContext, SpacetimeType, Table, ConnectionId, ScheduleAt,\n    TimeDuration, Timestamp, Uuid,\n};\n```\n\n**`Table` is required.** Without it, `ctx.db.*.insert()`, `.iter()`, `.find()` etc. won't compile (`no method named 'insert' found`).\n\n## Tables\n\n`#[spacetimedb::table(...)]` on a `pub struct`. `accessor` must be snake_case:\n\n```rust\n#[spacetimedb::table(accessor = entity, public)]\npub struct Entity {\n    #[primary_key]\n    #[auto_inc]\n    pub id: u64,\n    pub owner: Identity,\n    pub name: String,\n    #[index(btree)]\n    pub active: bool,\n}\n```\n\nOptions: `accessor = snake_case` (required), `public`, `scheduled(reducer_fn)`, `index(...)`\n\n`ctx.db` accessors use the `accessor` name (snake_case).\n\n## Column Types\n\n| Rust type | Notes |\n|-----------|-------|\n| `u8` / `u16` / `u32` / `u64` / `u128` | unsigned integers |\n| `i8` / `i16` / `i32` / `i64` / `i128` | signed integers |\n| `spacetimedb::sats::u256` / `spacetimedb::sats::i256` | 256-bit integers |\n| `f32` / `f64` | floats |\n| `bool` | boolean |\n| `String` | text |\n| `Vec<T>` | list/array |\n| `Identity` | user identity |\n| `ConnectionId` | connection handle |\n| `Timestamp` | server timestamp (microseconds since epoch) |\n| `TimeDuration` | duration in microseconds |\n| `Uuid` | UUID |\n| `Option<T>` | nullable column |\n\n## Column Attributes\n\n```rust\n#[primary_key]          // primary key\n#[auto_inc]             // auto-increment (use 0 as placeholder on insert)\n#[unique]               // unique constraint\n#[index(btree)]         // btree index (enables .filter() on this column)\n#[default(true)]        // migration-safe default for a newly appended column\n```\n\nDefaults support compatible addition of a newly appended field. Do not place `#[default(...)]` on primary-key, unique, or auto-increment columns.\n\n## Indexes\n\nPrefer `#[index(btree)]` inline for single-column. Multi-column uses table-level:\n\n```rust\n// Inline (preferred for single-column):\n#[index(btree)]\npub author_id: u64,\n// Access: ctx.db.post().author_id().filter(author_id)\n\n// Multi-column (table-level):\n#[spacetimedb::table(accessor = membership, public,\n    index(accessor = by_group_user, btree(columns = [group_id, user_id]))\n)]\npub struct Membership { pub group_id: u64, pub user_id: Identity, ... }\n// Access: ctx.db.membership().by_group_user().filter((group_id, &user_id))\n```\n\nWhen you frequently look up rows by multiple columns, prefer a multi-column index over filtering by one column and looping over the results.\n\n## Reducers\n\n```rust\n#[spacetimedb::reducer]\npub fn create_entity(ctx: &ReducerContext, name: String) {\n    ctx.db.entity().insert(Entity { id: 0, owner: ctx.sender(), name, active: true });\n}\n\n// Reducers can return Result<(), String> or Result<(), E> where E: Display\n#[spacetimedb::reducer]\npub fn validate_entity(ctx: &ReducerContext, name: String) -> Result<(), String> {\n    if name.is_empty() {\n        return Err(\"Name cannot be empty\".to_string());\n    }\n    ctx.db.entity().try_insert(Entity { id: 0, owner: ctx.sender(), name, active: true })?;\n    Ok(())\n}\n```\n\nNote: `insert()` panics on constraint violations. Use `try_insert()` with `?` when returning `Result`.\n\n## DB Operations\n\n```rust\nctx.db.entity().insert(Entity { id: 0, name: \"Sample\".into() });  // Insert (0 for autoInc)\nctx.db.entity().id().find(entity_id);                              // Find by PK → Option<Entity>\nctx.db.entity().identity().find(ctx.sender());                     // Find by unique column → Option<Entity>\nctx.db.item().author_id().filter(author_id);                       // Filter by index → iterator\nctx.db.entity().iter();                                            // All rows → iterator\nctx.db.entity().count();                                           // Count rows\nctx.db.entity().id().update(Entity { name: new_name, ..existing }); // Update (override + spread)\nctx.db.entity().id().delete(entity_id);                            // Delete by PK\nctx.db.entity().name().delete(\"Alice\".to_string());                // Delete by indexed String column\n```\n\nNote: `iter()` and `filter()` return iterators. Collect to Vec if you need `.sort()`, `.filter()`, `.map()`.\n\nRange queries on btree indexes: `filter(18..=65)`, `filter(18..)`, `filter(..18)`.\n\nString column accessors operate on the column's owned `String` type, not `&str`. Pass a `String` or `&String` to `find` and `delete`; index filters borrow the key, as in `ctx.db.product().category().filter(&\"hardware\".to_string())`.\n\n## Lifecycle Hooks\n\n```rust\n#[spacetimedb::reducer(init)]\npub fn init(ctx: &ReducerContext) { ... }\n\n#[spacetimedb::reducer(client_connected)]\npub fn on_connect(ctx: &ReducerContext) { ... }\n\n#[spacetimedb::reducer(client_disconnected)]\npub fn on_disconnect(ctx: &ReducerContext) { ... }\n```\n\nThe current connection ID is available through `ctx.connection_id()` (not a public field) and may be absent outside connection-scoped calls.\n\n## Views\n\n```rust\n// Anonymous view (same result for all clients):\nuse spacetimedb::{view, AnonymousViewContext};\n\n#[view(accessor = active_users, public)]\nfn active_users(ctx: &AnonymousViewContext) -> Vec<Entity> {\n    ctx.db.entity().active().filter(true).collect()\n}\n\n// Per-user view (result varies by sender):\nuse spacetimedb::{view, ViewContext};\n\n#[view(accessor = my_profile, public)]\nfn my_profile(ctx: &ViewContext) -> Option<Entity> {\n    ctx.db.entity().identity().find(ctx.sender())\n}\n```\n\nProcedural-view table handles support indexed `find` and `filter` access, but not full-table `iter()`. Start a procedural view from an appropriate table index.\n\nDeclare a procedural view primary key in the view attribute:\n\n```rust\n#[view(accessor = catalog_entry, public, primary_key = sku)]\nfn catalog_entry(ctx: &AnonymousViewContext) -> Vec<CatalogEntry> { ... }\n```\n\nProcedural-view primary keys are explicit schema metadata. Add one only when the view itself is required to expose a primary key; a source table's primary key is not inherited by the view.\n\nQuery-builder views use `ViewContext`, `ctx.from`, and return `impl Query<Row>`. Use `filter` for predicates and `right_semijoin` when the result should contain right-side rows that have a matching left-side row:\n\n```rust\nctx.from.article().filter(|article| article.published.eq(true))\nctx.from.subscription().right_semijoin(\n    ctx.from.account(),\n    |subscription, account| subscription.account_id.eq(account.id),\n)\n```\n\nQuery-builder comparisons against a `String` column take an owned `String`, for example `row.label.eq(\"active\".to_string())`.\n\n## Client Visibility Filters\n\n```rust\nuse spacetimedb::Filter;\n\n#[spacetimedb::client_visibility_filter]\nconst PRIVATE_NOTE_FILTER: Filter =\n    Filter::Sql(\"SELECT * FROM owned_row WHERE owner = :sender\");\n```\n\n## Reducer Context API\n\n`ReducerContext` (`ctx`) is the only source of sender identity, time, and randomness; stdlib clocks and RNG are unavailable in modules.\n\n```rust\n// Auth: ctx.sender() is the caller's Identity\nif row.owner != ctx.sender() {\n    panic!(\"unauthorized\");\n    // or: return Err(anyhow::anyhow!(\"unauthorized\"));\n}\n\n// Server timestamp (deterministic per reducer call)\nctx.db.item().insert(Item { id: 0, owner: ctx.sender(), created_at: ctx.timestamp, .. });\n\n// Timestamp arithmetic\nlet expiry = ctx.timestamp + TimeDuration::from_micros(delay_micros);\n\n// Deterministic RNG: ctx.random() for a single value, ctx.rng() for the rand::Rng trait\nuse spacetimedb::rand::Rng;\nlet n: u32 = ctx.random();                    // random u32\nlet roll: u32 = ctx.rng().gen_range(1..=6);   // any rand::Rng method\n\n// Client: Timestamp → milliseconds since epoch\ntimestamp.to_micros_since_unix_epoch() / 1000\n```\n\n## Scheduled Tables\n\n```rust\n#[spacetimedb::table(accessor = tick_timer, scheduled(tick), public)]\npub struct TickTimer {\n    #[primary_key]\n    #[auto_inc]\n    scheduled_id: u64,\n    scheduled_at: spacetimedb::ScheduleAt,\n}\n\n#[spacetimedb::reducer]\npub fn tick(ctx: &ReducerContext, timer: TickTimer) {\n    // timer row is auto-deleted after this reducer runs\n}\n\n// One-time: fires once at a specific time\nlet at = ScheduleAt::Time(ctx.timestamp + std::time::Duration::from_secs(10));\n// Repeating: fires on an interval\nlet at = ScheduleAt::Interval(std::time::Duration::from_secs(5).into());\n\nctx.db.tick_timer().insert(TickTimer { scheduled_id: 0, scheduled_at: at });\n```\n\nConstruct a connection ID from a numeric representation with `ConnectionId::from_u128(value)`.\n\n## Procedures and HTTP\n\nProcedures use `&mut ProcedureContext` and may return typed values:\n\n```rust\nuse spacetimedb::{procedure, ProcedureContext, SpacetimeType};\n\n#[derive(SpacetimeType)]\npub struct ResultValue { pub value: String }\n\n#[procedure]\npub fn inspect(_ctx: &mut ProcedureContext, input: String) -> ResultValue {\n    ResultValue { value: input }\n}\n```\n\nOutbound HTTP is available through `ctx.http`. Convenience methods such as `get` return a response, and other methods use `Request::builder()` with `ctx.http.send(request)`. `response.status()` returns a `StatusCode`; use `is_success()` to test it or `as_u16()` when a numeric status is needed. Responses are not cloneable, so inspect status and headers before consuming the body with `response.into_body().into_string_lossy()`. Header values use the fallible `to_str()` conversion; they do not provide `as_str()`.\n\nOpen short database transactions with `ctx.with_tx(|tx| ...)`. Access tables inside the callback through `tx.db`, not directly on `tx`. It returns the callback's value directly, so do not call `unwrap` or `expect` on the result unless the callback itself returns a `Result`. The callback implements `Fn`, so clone captured owned values when storing them rather than moving them out of the closure. Perform network I/O before opening the transaction.\n\nFor an outbound request without a convenience method:\n\n```rust\nlet request = Request::builder()\n    .method(\"POST\")\n    .uri(url)\n    .body(Body::from_bytes(data))\n    .unwrap();\nlet response = ctx.http.send(request).expect(\"request failed\");\n```\n\nScheduled procedures use the ordinary scheduled-table shape, but the scheduled function is marked `#[procedure]` and receives `&mut ProcedureContext` plus the scheduled row.\n\nInbound HTTP uses handler functions and one router:\n\n```rust\nuse spacetimedb::http::{handler, router, Body, HandlerContext, Request, Response, Router};\n\n#[handler]\nfn health(_ctx: &mut HandlerContext, _request: Request) -> Response {\n    Response::builder().status(200).body(Body::from_bytes(\"ok\")).unwrap()\n}\n\n#[router]\nfn routes() -> Router { Router::new().get(\"/health\", health) }\n```\n\n`HandlerContext` does not expose `db`; open database access with `ctx.with_tx(|tx| ...)`. HTTP response bodies must own their data or borrow `'static` data, so convert dynamic borrowed text to an owned `String` before passing it to `Body::from_bytes`.\n\n## Logging\n\n```rust\nlog::info!(\"Player connected: {:?}\", ctx.sender());\nlog::warn!(\"Low health: {}\", hp);\nlog::error!(\"Failed to find entity\");\n```\n\n## Custom Types\n\n```rust\n#[derive(SpacetimeType)]\npub enum Status { Online, Away, Offline }\n\n#[derive(SpacetimeType)]\npub struct Point { x: f32, y: f32 }\n```\n\n## Complete Example\n\n```rust\n// src/lib.rs\nuse spacetimedb::{Identity, ReducerContext, SpacetimeType, Table, Timestamp};\n\n#[spacetimedb::table(accessor = entity, public)]\npub struct Entity {\n    #[primary_key]\n    pub identity: Identity,\n    pub name: String,\n    pub active: bool,\n}\n\n#[spacetimedb::table(accessor = record, public)]\npub struct Record {\n    #[primary_key]\n    #[auto_inc]\n    pub id: u64,\n    pub owner: Identity,\n    pub value: u32,\n    pub created_at: Timestamp,\n}\n\n#[spacetimedb::reducer(client_connected)]\npub fn on_connect(ctx: &ReducerContext) {\n    if let Some(existing) = ctx.db.entity().identity().find(ctx.sender()) {\n        ctx.db.entity().identity().update(Entity { active: true, ..existing });\n    }\n}\n\n#[spacetimedb::reducer(client_disconnected)]\npub fn on_disconnect(ctx: &ReducerContext) {\n    if let Some(existing) = ctx.db.entity().identity().find(ctx.sender()) {\n        ctx.db.entity().identity().update(Entity { active: false, ..existing });\n    }\n}\n\n#[spacetimedb::reducer]\npub fn create_entity(ctx: &ReducerContext, name: String) {\n    if ctx.db.entity().identity().find(ctx.sender()).is_some() {\n        panic!(\"already exists\");\n    }\n    ctx.db.entity().insert(Entity { identity: ctx.sender(), name, active: true });\n}\n\n#[spacetimedb::reducer]\npub fn add_record(ctx: &ReducerContext, value: u32) {\n    if ctx.db.entity().identity().find(ctx.sender()).is_none() {\n        panic!(\"not found\");\n    }\n    ctx.db.record().insert(Record {\n        id: 0,\n        owner: ctx.sender(),\n        value,\n        created_at: ctx.timestamp,\n    });\n}\n```\n","codex-plugin/plugins/spacetimedb/skills/cli/SKILL.md":"---\nname: cli\ndescription: SpacetimeDB CLI reference for initializing projects, building modules, publishing databases, querying data, and managing servers\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: shared\n  language: all\n  cursor_globs: \"**/*\"\n  cursor_always_apply: false\ntriggers:\n  - spacetime init\n  - spacetime build\n  - spacetime publish\n  - spacetime dev\n  - spacetime sql\n  - spacetime call\n  - spacetime logs\n  - spacetime server\n  - spacetime login\n  - spacetime generate\n  - how do I use the CLI\n  - CLI command\n---\n\n# SpacetimeDB CLI\n\nUse this skill when the user needs help with the `spacetime` CLI tool - initializing projects, building modules, publishing databases, querying data, managing servers, or troubleshooting CLI issues.\n\n## Quick Reference\n\n### Project Initialization & Development\n\n```bash\n# Initialize new project\nspacetime init my-project --lang rust|csharp|typescript|cpp\nspacetime init my-project --template <template-id>\n\n# Build module\nspacetime build                    # release build\nspacetime build --debug            # faster iteration, slower runtime\n\n# Dev mode (auto-rebuild, auto-publish, generates bindings)\nspacetime dev\nspacetime dev --client-lang typescript --module-bindings-path ./client/src/module_bindings\n\n# Generate client bindings\nspacetime generate --lang typescript|csharp|rust --out-dir ./bindings --module-path ./server\nspacetime generate --lang unrealcpp --uproject-dir ./MyGame --module-path ./server --unreal-module-name MyGame\n```\n\n### Publishing & Deployment\n\n```bash\n# Publish to Maincloud (default)\nspacetime publish my-database --yes\n\n# Publish to local server\nspacetime publish my-database --server local --yes\n\n# Clear database and republish\nspacetime publish my-database --delete-data=always --yes\n```\n\n### Database Interaction\n\n```bash\n# SQL queries\nspacetime sql my-database \"SELECT * FROM users\"\nspacetime sql my-database --interactive   # REPL mode\n\n# Call reducers (each argument is a separate positional arg)\nspacetime call my-database my_reducer '\"value\"' '123'\n\n# Subscribe to changes\nspacetime subscribe my-database \"SELECT * FROM users\" --num-updates 10\n\n# View logs\nspacetime logs my-database -f              # follow logs\nspacetime logs my-database -n 100          # up to 100 log lines\n\n# Describe schema\n# (without --json, output is human-readable text)\nspacetime describe my-database --json\nspacetime describe my-database tables --json   # also views, reducers, procedures, routes, env, types\nspacetime describe my-database tables users --json\nspacetime describe my-database reducers my_reducer --json\n```\n\n### Database Management\n\n```bash\n# List databases\nspacetime list\n\n# Delete database\nspacetime delete my-database\n\n# Rename database\nspacetime rename <database-identity> --to new-name\n```\n\n### Server Management\n\n```bash\n# List configured servers\nspacetime server list\n\n# Add server\nspacetime server add local --url http://localhost:3000 --default\nspacetime server add myserver --url https://my-spacetime.example.com\n\n# Set default server\nspacetime server set-default local\n\n# Test connectivity\nspacetime server ping local\n\n# Start local instance\nspacetime start\n\n# Clear local data\nspacetime server clear\n```\n\n### Authentication\n\n```bash\n# Login (opens browser)\nspacetime login\n\n# Login with token\nspacetime login --token <token>\n\n# Show login status\nspacetime login show\n\n# Logout\nspacetime logout\n```\n\n## Default Servers\n\n| Name | URL | Description |\n|------|-----|-------------|\n| `maincloud` | `https://maincloud.spacetimedb.com` | Production cloud (default) |\n| `local` | `http://127.0.0.1:3000` | Local development server |\n\n## Common Flags\n\n| Flag | Short | Description |\n|------|-------|-------------|\n| `--server` | `-s` | Target server (nickname, hostname, or URL) |\n| `--yes` | `-y` | Non-interactive mode (skip confirmations) |\n| `--anonymous` | | Use anonymous identity |\n| `--module-path` | `-p` | Path to module project |\n| `--no-config` | | Ignore `spacetime.json` project configuration |\n\n## Troubleshooting\n\n### \"Not logged in\"\n```bash\nspacetime login\n# Or use --anonymous for public operations\n```\n\n### \"Server not responding\"\n```bash\nspacetime server ping <server>\n# For local: ensure spacetime start is running\n```\n\n### \"Schema conflict\"\n```bash\n# Clear data and republish\nspacetime publish my-db --delete-data=always --yes\n```\n\n### \"Build failed\"\n```bash\n# Check Rust/C# toolchain\nrustup show\n# For Rust modules, ensure wasm32-unknown-unknown target\nrustup target add wasm32-unknown-unknown\n```\n\n## Module Languages\n\n**Server-side (modules):** Rust, C#, TypeScript, C++\n**Client SDKs:** TypeScript, C#, Rust, Unreal Engine\n**CLI `generate` targets:** TypeScript, C#, Rust, Unreal C++\n","skills/typescript-client/SKILL.md":"---\nname: typescript-client\ndescription: SpacetimeDB TypeScript/React client SDK reference. Use when building web clients that connect to SpacetimeDB.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: client\n  language: typescript\n  cursor_globs: \"**/*.tsx,**/*.ts\"\n  cursor_always_apply: true\n---\n\n# SpacetimeDB TypeScript Client\n\nGenerated bindings convert snake_case names to camelCase, including row fields: a server column `trip_id` is `tripId` on client rows.\n\n## React: main.tsx\n\n```typescript\nimport React, { useMemo } from 'react';\nimport ReactDOM from 'react-dom/client';\nimport { SpacetimeDBProvider } from 'spacetimedb/react';\nimport { DbConnection } from './module_bindings';\nimport { MODULE_NAME, SPACETIMEDB_URI } from './config';\nimport App from './App';\n\nconst TOKEN_KEY = `${SPACETIMEDB_URI}/${MODULE_NAME}/auth_token`;\n\nfunction Root() {\n  const connectionBuilder = useMemo(() =>\n    DbConnection.builder()\n      .withUri(SPACETIMEDB_URI)\n      .withDatabaseName(MODULE_NAME)\n      .withToken(localStorage.getItem(TOKEN_KEY) ?? undefined)\n      .withAutomaticReconnect()\n      .onConnect((_conn, _identity, token) => localStorage.setItem(TOKEN_KEY, token)),\n    []\n  );\n  return (\n    <SpacetimeDBProvider connectionBuilder={connectionBuilder}>\n      <App />\n    </SpacetimeDBProvider>\n  );\n}\n\nReactDOM.createRoot(document.getElementById('root')!).render(<Root />);\n```\n\n## React: App.tsx\n\n```typescript\nimport { useTable, useSpacetimeDB } from 'spacetimedb/react';\nimport { DbConnection, tables } from './module_bindings';\n\nexport default function App() {\n  const { isActive, identity: myIdentity, getConnection } = useSpacetimeDB();\n  const conn = getConnection() as DbConnection | null;\n\n  // useTable owns subscriptions and reports readiness after replay.\n  const [entities, entitiesReady] = useTable(tables.entity);\n  const [records, recordsReady] = useTable(tables.record);\n\n  const [onlineUsers] = useTable(\n    tables.entity.where(r => r.active.eq(true)),\n    {\n      onInsert: user => console.log('User connected:', user.name),\n      onDelete: user => console.log('User disconnected:', user.name),\n      onUpdate: (oldUser, newUser) => console.log('Updated:', newUser.name),\n    }\n  );\n\n  const addRecord = (data: string) => {\n    if (!conn || !isActive) return;\n    void conn.reducers.addRecord({ data }).catch(console.error);\n  };\n  const ownsEntity = entities.some(\n    row => row.owner.toHexString() === myIdentity?.toHexString()\n  );\n\n  return (\n    <main>\n      <p>{isActive ? 'Connected' : 'Not connected'}</p>\n      <p>{entitiesReady && recordsReady ? 'Data ready' : 'Waiting for current data'}</p>\n      <p>{onlineUsers.length} users online, {records.length} records</p>\n      <p>{ownsEntity ? 'You own an entity' : 'No owned entity'}</p>\n      <button disabled={!isActive} onClick={() => addRecord('Hello!')}>\n        Add record\n      </button>\n    </main>\n  );\n}\n```\n\n## Vanilla (non-React)\n\n```typescript\nimport { DbConnection, tables } from './module_bindings';\n\nconst HOST = 'wss://maincloud.spacetimedb.com';\nconst DATABASE = 'my_module';\nconst TOKEN_KEY = `${HOST}/${DATABASE}/auth_token`;\n\nconst conn = DbConnection.builder()\n  .withUri(HOST)\n  .withDatabaseName(DATABASE)\n  .withToken(localStorage.getItem(TOKEN_KEY) ?? undefined)\n  .withAutomaticReconnect()\n  .onConnect((_conn, identity, token) => {\n    localStorage.setItem(TOKEN_KEY, token);\n    console.log('Connected as:', identity.toHexString());\n  })\n  .onDisconnect((_ctx, error, nextAttempt, delayMs) => {\n    if (nextAttempt !== undefined) {\n      console.warn(`Reconnect attempt ${nextAttempt} in ${delayMs} ms`, error);\n    } else {\n      console.log('Connection ended', error);\n    }\n  })\n  .onConnectError((_ctx, error, nextAttempt, delayMs) => {\n    console.error('Connection failed:', error);\n    if (nextAttempt !== undefined) {\n      console.log(`Retry ${nextAttempt} in ${delayMs} ms`);\n    }\n  })\n  .build();\n\n// Register once; the SDK replays this subscription after reconnecting.\nconst subscription = conn.subscriptionBuilder()\n  .onApplied(() => console.log('Ready'))\n  .subscribe([tables.user, tables.message]);\n\n// Row callbacks\nconn.db.user.onInsert((ctx, user) => console.log('Joined:', user.name));\nconn.db.user.onDelete((ctx, user) => console.log('Left:', user.name));\nconn.db.user.onUpdate((ctx, oldUser, newUser) => console.log('Updated:', newUser.name));\n```\n\n## Automatic Reconnect and Token Refresh\n\nThe React provider's connection manager enables automatic reconnect; the explicit `.withAutomaticReconnect()` above also shows the setting to use for direct connections. Without it, a direct connection does not recover automatically. For direct connections, initial failures are not retried. After an established connection drops, retries use exponential backoff and jitter from `minDelayMs` (default 1 s) up to `maxDelayMs` (default 30 s), until `disconnect()` or a terminal failure. Tune these with `.withAutomaticReconnect({ minDelayMs, maxDelayMs })`; values below the 500 ms and 1 s floors are raised with a warning, so that retrying clients cannot overwhelm the database. While mounted, the React provider also preserves its separate connection-manager retries: it builds a replacement connection after an initial or terminal failure that the core connection will not retry. It respects an explicit `disconnect()`.\n\nThe same connection, identity, table handles, subscriptions, and row callbacks survive recovery. Each attempt gets a fresh connection ID. `onConnect` runs again before subscription replay, so register subscriptions and row callbacks once, outside that callback. The SDK replays subscriptions in one batch, retains readable but stale cached rows during outages, and emits net row changes after reconciliation. Subscription `onApplied` runs again after replay; keep one-time setup separate.\n\nIn React, let `useTable` manage its own subscriptions. Do not add a second subscription effect for the same queries or recreate subscriptions whenever `isActive` changes. Use the hook's `isReady` result for data readiness: a successful reconnect handshake does not mean replay has completed. Invoke reducers from event handlers, not during rendering. For a manually created subscription, retain its handle and call `unsubscribe()` when it is no longer needed, including during an outage.\n\nFor direct connections, `conn.isReconnecting` reports recovery before the next successful handshake. `onDisconnect` and `onConnectError` receive `(ctx, error, nextReconnectAttempt, nextReconnectDelayMs)`. The last two arguments are `undefined` when no retry is scheduled. Do not build a replacement connection or run your own retry timer while automatic recovery is pending. An explicit `conn.disconnect()` stops recovery, including a pending token refresh result.\n\nFor expiring credentials, also call `.withTokenProvider(() => refreshTokenAsync())`, where your authentication integration supplies `refreshTokenAsync(): Promise<string>`. Supply the initial token with `.withToken(initialToken)`; the provider is used only for reconnect attempts. It must return a non-empty token for the same identity. The SDK calls it when remaining validity is at most 30 seconds or 5% of the original lifetime, whichever is greater, when expiry cannot be read, or after a reused token is rejected. Provider failures retry; rejection of a freshly provided token is terminal. No periodic refresh runs while connected, and disconnecting does not cancel the provider's own asynchronous work.\n\nCalls made while disconnected fail immediately. Pending reducer and procedure promises reject with `UnknownCallResultError` (exported from `spacetimedb`) when the connection is lost before a result arrives. The server may have executed the operation; the SDK never replays it. Do not automatically retry non-idempotent calls on that error.\n\n## Gotchas\n\n- **`useTable` rows are `readonly`.** Copy before sorting/mutating, or it fails to type-check:\n  `const [rows] = useTable(tables.message); const sorted = [...rows].sort(...)`.\n- **bigint in JSX.** ids/counts from `t.u64()`/`t.i64()` columns are `bigint`, which React\n  cannot render. Wrap it: `{Number(row.id)}` or `{String(count)}`.\n","skills/unity/SKILL.md":"---\nname: unity\ndescription: Integrate SpacetimeDB with Unity game projects. Use when building Unity clients with MonoBehaviour lifecycle, FrameTick, and PlayerPrefs token persistence.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: client\n  language: csharp\n  cursor_globs: \"**/*.cs\"\n  cursor_always_apply: false\n  tested_with: \"SpacetimeDB 2.0, Unity 2022.3+\"\n---\n\n# SpacetimeDB Unity Integration\n\nThis skill covers Unity-specific patterns for connecting to SpacetimeDB. For server-side module development, see the `csharp-server` skill.\n\n---\n\n## Installation\n\nAdd via Unity Package Manager using the git URL:\n\n```\nhttps://github.com/clockworklabs/com.clockworklabs.spacetimedbsdk.git\n```\n\n**Window > Package Manager > + > Add package from git URL**\n\n---\n\n## Generate Module Bindings\n\n```bash\nspacetime generate --lang csharp --out-dir Assets/SpacetimeDB/module_bindings --module-path PATH_TO_MODULE\n```\n\nPlace generated files in your Assets folder so Unity compiles them.\n\n---\n\n## SpacetimeManager Singleton\n\nThe core pattern for Unity integration. This MonoBehaviour manages the connection lifecycle.\n\n```csharp\nusing UnityEngine;\nusing SpacetimeDB;\nusing SpacetimeDB.Types;\n\npublic class SpacetimeManager : MonoBehaviour\n{\n    private const string TOKEN_KEY = \"SpacetimeAuthToken\";\n    private const string SERVER_URI = \"http://localhost:3000\";\n    private const string DATABASE_NAME = \"my-game\";\n\n    public static SpacetimeManager Instance { get; private set; }\n    public DbConnection Connection { get; private set; }\n    public Identity LocalIdentity { get; private set; }\n\n    void Awake()\n    {\n        if (Instance != null && Instance != this) { Destroy(gameObject); return; }\n        Instance = this;\n        DontDestroyOnLoad(gameObject);\n    }\n\n    void Start()\n    {\n        string savedToken = PlayerPrefs.GetString(TOKEN_KEY, null);\n\n        Connection = DbConnection.Builder()\n            .WithUri(SERVER_URI)\n            .WithDatabaseName(DATABASE_NAME)\n            .WithToken(savedToken)\n            .OnConnect(OnConnected)\n            .OnConnectError(err => Debug.LogError($\"Connection failed: {err}\"))\n            .OnDisconnect((conn, err) => {\n                if (err != null) Debug.LogError($\"Disconnected: {err}\");\n            })\n            .Build();\n    }\n\n    void Update()\n    {\n        Connection?.FrameTick();\n    }\n\n    void OnDestroy()\n    {\n        Connection?.Disconnect();\n    }\n\n    private void OnConnected(DbConnection conn, Identity identity, string authToken)\n    {\n        LocalIdentity = identity;\n        PlayerPrefs.SetString(TOKEN_KEY, authToken);\n        PlayerPrefs.Save();\n\n        Debug.Log($\"Connected as: {identity}\");\n\n        conn.SubscriptionBuilder()\n            .OnApplied(OnSubscriptionApplied)\n            .SubscribeToAllTables();\n    }\n\n    private void OnSubscriptionApplied(SubscriptionEventContext ctx)\n    {\n        Debug.Log(\"Subscription applied: game state loaded\");\n    }\n}\n```\n\n---\n\n## FrameTick (Critical)\n\n**`FrameTick()` must be called every frame in `Update()`.** The SDK queues all network messages and only processes them when you call `FrameTick()`. Without it, no callbacks fire and the client appears frozen. See the `Update()` method in the SpacetimeManager above.\n\n**Thread safety**: `FrameTick()` processes messages on the calling thread (the main thread in Unity). Do NOT call it from a background thread. Do NOT access `conn.Db` from background threads.\n\n## Automatic Reconnect\n\nAdd `.WithAutomaticReconnect()` to the builder to recover an established connection after an outage. In the singleton above, create subscriptions only on the first `OnConnected`, or move them after `Build()`: `OnConnected` runs again after each successful reconnect. Keep calling `FrameTick()` during outages, or use `SpacetimeDBNetworkManager`, which also ticks reconnecting connections. Do not gate ticking on `IsActive`.\n\nThe SDK retains the identity, table handles, callbacks, and subscriptions, and replays subscriptions in one batch. Cached rows stay readable during an outage; row callbacks report net changes after recovery. `OnApplied` runs again, so separate one-time object setup from marking data ready. Each reconnect attempt has a fresh `ConnectionId`.\n\n`IsReconnecting` reports recovery before the next successful handshake. The `OnDisconnect((conn, error, next) => ...)` and `OnConnectError((error, next) => ...)` overloads expose `NextReconnect?`, with the upcoming `Attempt` and `Delay`, or null for a terminal failure. Initial connection failures do not retry. Retries use exponential backoff and jitter from `MinDelay` (default 1 s) up to `MaxDelay` (default 30 s), tunable with `.WithAutomaticReconnect(new AutomaticReconnectOptions { MinDelay = ..., MaxDelay = ... })`; values below the 500 ms and 1 s floors are raised with a warning, so that retrying clients cannot overwhelm the database. `Disconnect()` stops them.\n\nCalls made while disconnected fail immediately. Pending reducer calls may report `Status.UnknownResult`, meaning the server may have executed them; they are not replayed. Pending procedures and one-off queries fail with `UnknownResultException`. Regenerate bindings when upgrading to include unknown-outcome handling.\n\n---\n\n## Row Callbacks for Game State\n\nRegister callbacks to update Unity GameObjects when table data changes.\n\n```csharp\nvoid RegisterCallbacks()\n{\n    Connection.Db.Player.OnInsert += (EventContext ctx, Player player) => {\n        SpawnPlayerObject(player);\n    };\n\n    Connection.Db.Player.OnDelete += (EventContext ctx, Player player) => {\n        DestroyPlayerObject(player.Id);\n    };\n\n    Connection.Db.Player.OnUpdate += (EventContext ctx, Player oldPlayer, Player newPlayer) => {\n        UpdatePlayerObject(newPlayer);\n    };\n}\n```\n\nRegister these once after building the connection, before the first `FrameTick()`. Do not register them repeatedly in `OnConnected` or `OnSubscriptionApplied` when automatic reconnect is enabled.\n\n---\n\n## Calling Reducers from UI\n\n```csharp\npublic class GameUI : MonoBehaviour\n{\n    public void OnMoveButtonClicked(Vector2 direction)\n    {\n        SpacetimeManager.Instance.Connection.Reducers.MovePlayer(direction.x, direction.y);\n    }\n\n    public void OnSendChat(string message)\n    {\n        SpacetimeManager.Instance.Connection.Reducers.SendMessage(message);\n    }\n}\n```\n\n### Reducer Callbacks\n\n```csharp\nSpacetimeManager.Instance.Connection.Reducers.OnSendMessage += (ReducerEventContext ctx, string text) => {\n    if (ctx.Event.Status is Status.Committed)\n        Debug.Log($\"Message sent: {text}\");\n    else if (ctx.Event.Status is Status.Failed(var reason))\n        Debug.LogError($\"Send failed: {reason}\");\n    else if (ctx.Event.Status is Status.UnknownResult)\n        Debug.LogWarning(\"Connection lost before the result arrived; the message may have been sent.\");\n};\n```\n\n---\n\n## Reading the Client Cache\n\n```csharp\n// Find by primary key\nif (Connection.Db.Player.Id.Find(playerId) is Player player)\n{\n    Debug.Log($\"Player: {player.Name}\");\n}\n\n// Iterate all\nforeach (var p in Connection.Db.Player.Iter())\n{\n    Debug.Log(p.Name);\n}\n\n// Filter by index\nforeach (var p in Connection.Db.Player.Level.Filter(5))\n{\n    Debug.Log($\"Level 5: {p.Name}\");\n}\n\n// Count\nint total = Connection.Db.Player.Count;\n```\n\n---\n\n## Unity-Specific Considerations\n\n### Main Thread Only\nAll SpacetimeDB SDK calls (`FrameTick`, `conn.Db` access, reducer calls) must happen on the main thread. If you need to pass data to a background thread, copy it first in the callback.\n\n### Scene Loading\nUse `DontDestroyOnLoad(gameObject)` on the SpacetimeManager to prevent the connection from being destroyed during scene transitions. Without it, the connection drops every time you load a new scene.\n\n### IL2CPP / AOT\nThe SpacetimeDB SDK uses code generation. If you encounter issues with IL2CPP builds:\n- Ensure generated bindings are up to date\n- Check that `link.xml` preserves SpacetimeDB types if you use assembly stripping\n\n### Token Persistence\nToken save/load via `PlayerPrefs` is demonstrated in the SpacetimeManager singleton above. Persisting the server-issued token and passing it back on reconnect keeps the same identity; without a saved token the server issues a new identity in the `OnConnect` callback. This token does not expire and a lost one can't be recovered, so self-issued identities are for development. For production, authenticate with an OIDC provider such as SpacetimeAuth, which handles token lifecycle.\n\nWith automatic reconnect enabled, the SDK retains the authentication token and passes it to `OnConnect`, including on WebGL. Without automatic reconnect, a WebGL connection using a saved token may return a short-lived WebSocket token instead; in that case, keep the original saved token rather than overwriting it in the callback above.\n\nFor expiring credentials, configure `.WithToken(initialToken)`, `.WithAutomaticReconnect()`, and `.WithTokenProvider(() => RefreshTokenAsync())`. The provider returns `Task<string>` for the same identity. It is used before reconnect attempts when expiry is unreadable, remaining validity is at most 30 seconds or 5% of the original lifetime, or a reused token is rejected. It is not called for the initial connection or periodically while connected. Provider failures retry; rejection of a freshly provided token stops recovery. `Disconnect()` ignores a pending provider result without canceling the provider's own asynchronous work.\n","skills/typescript-server/SKILL.md":"---\nname: typescript-server\ndescription: SpacetimeDB TypeScript server module SDK reference. Use when writing tables, reducers, or module logic in TypeScript.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: server\n  language: typescript\n  cursor_globs: \"**/*.ts\"\n  cursor_always_apply: true\n---\n\n# SpacetimeDB TypeScript SDK Reference\n\n## Module Structure\n\nTables are built with `table()`, bound with `schema()`, and exported as default. Reducers and lifecycle hooks are `export const`:\n\n```typescript\nimport { schema, table, t } from 'spacetimedb/server';\n\nconst scoreRecord = table(\n  { name: 'score_record', public: true },\n  {\n    id: t.u64().primaryKey().autoInc(),\n    owner: t.identity(),\n    value: t.u32(),\n  }\n);\n\nconst spacetimedb = schema({ scoreRecord });  // ONE object, not spread args\nexport default spacetimedb;\n\nexport const addRecord = spacetimedb.reducer(\n  { value: t.u32() },\n  (ctx, { value }) => {\n    ctx.db.scoreRecord.insert({ id: 0n, owner: ctx.sender, value });\n  }\n);\n```\n\nOnly table definitions belong in `schema({...})`. Row and object builders used as reducer arguments or view return types are not schema entries.\n\nNamed runtime exports are reserved for values registered with SpacetimeDB, such as reducers, lifecycle hooks, views, procedures, HTTP exports, and visibility filters. Keep ordinary helper functions and constants unexported.\n\n## Imports\n\nSchema builders and module exports come from `spacetimedb/server`. Runtime value classes such as `ScheduleAt`, `Timestamp`, and `ConnectionId` come from the root `spacetimedb` package; `Range` comes from `spacetimedb/server`:\n\n```typescript\nimport {\n  schema, table, t, SenderError,\n  type InferSchema, type ReducerCtx,\n} from 'spacetimedb/server';\nimport { ConnectionId, ScheduleAt, Timestamp } from 'spacetimedb';\nimport { Range } from 'spacetimedb/server';\n```\n\n## Tables\n\n`table(OPTIONS, COLUMNS)` takes two arguments. The `name` field MUST be snake_case:\n\n```typescript\nconst entity = table(\n  { name: 'entity', public: true },\n  {\n    identity: t.identity().primaryKey(),\n    name: t.string(),\n    active: t.bool(),\n  }\n);\n```\n\nOptions: `name` (snake_case, recommended), `public: true`, `event: true`, `indexes: [...]`\n\n`ctx.db` accessors are the keys passed to `schema({...})`, verbatim: `schema({ scoreRecord })` -> `ctx.db.scoreRecord`. Keep TypeScript identifiers and accessors camelCase. Use explicit `name: 'snake_case'` strings when you need a canonical database name that differs from the TypeScript identifier.\n\n## Column Types\n\nEvery column is a `t` builder value:\n\n| Builder | JS type | Notes |\n|---------|---------|-------|\n| `t.u8()` / `t.u16()` / `t.u32()` | number | |\n| `t.i8()` / `t.i16()` / `t.i32()` | number | |\n| `t.u64()` | bigint | Use `0n` literals |\n| `t.i64()` | bigint | Use `0n` literals |\n| `t.u128()` / `t.i128()` / `t.u256()` / `t.i256()` | bigint | |\n| `t.f64()` / `t.f32()` | number | |\n| `t.bool()` | boolean | |\n| `t.string()` | string | |\n| `t.identity()` | Identity | |\n| `t.connectionId()` | ConnectionId | |\n| `t.timestamp()` | Timestamp | |\n| `t.timeDuration()` | TimeDuration | |\n| `t.scheduleAt()` | ScheduleAt | |\n\nModifiers: `.primaryKey()`, `.autoInc()`, `.unique()`, `.index('btree')`, `.default(value)`.\n\nUse `.default(value)` only for a newly appended migration-safe field. Do not put defaults on primary-key, unique, or auto-increment columns.\n\nOptional columns: `nickname: t.option(t.string())`\n\nSchema builders describe the database's wire types; they are not TypeScript type names. For example, a `t.u16()` value is a TypeScript `number`, not a value cast to a type named `u16`.\n\n## Indexes\n\nUse inline `.index('btree')` when a single-column index does not need a named accessor. Use an `indexes` entry when the accessor is named explicitly or the index spans multiple columns. Every `indexes` entry requires `columns`; do not also add `.index('btree')` to the same column.\n\n```typescript\n// Inline (preferred for single-column):\nauthorId: t.u64().index('btree'),\n// Access: ctx.db.post.authorId.filter(authorId);\n\n// Multi-column (named):\nindexes: [{ accessor: 'by_group_user', algorithm: 'btree', columns: ['groupId', 'userId'] }]\n// Access: ctx.db.membership.by_group_user.filter([groupId, userId]);\n```\n\nPrefer a multi-column index over filtering by one column and looping. Filter takes an array in index column order; a prefix scan passes the leading value bare: `filter(groupId)`.\n\nThe published module's **entry file must export the schema as default**. If you split tables\n(`schema.ts`) from reducers/lifecycle (`index.ts`), re-export it from the entry:\n\n```typescript\n// index.ts\nexport { default } from './schema';   // re-export the schema for the module entry\n```\n\n## Reducers\n\nReducers are created with `spacetimedb.reducer(...)`; the export name becomes the reducer name:\n\n```typescript\nexport const createEntity = spacetimedb.reducer(\n  { name: t.string(), age: t.i32() },\n  (ctx, { name, age }) => {\n    ctx.db.entity.insert({ identity: ctx.sender, name, age, active: true });\n  }\n);\n\n// No arguments, just the callback:\nexport const doReset = spacetimedb.reducer((ctx) => { ... });\n```\n\nReducer args accept any column type, including arrays of custom types: `{ splits: t.array(Split) }`. Do not pass JSON strings for structured data.\n\n## DB Operations\n\n```typescript\nctx.db.scoreRecord.insert({ id: 0n, owner: ctx.sender, value: 1 });  // Insert (0n for autoInc)\nctx.db.scoreRecord.id.find(recordId);                     // Find by PK → row | null\nctx.db.entity.identity.find(ctx.sender);                   // Find by unique column\n[...ctx.db.post.authorId.filter(authorId)];                // Filter → spread to Array\n[...ctx.db.entity.iter()];                                 // All rows → Array\nctx.db.scoreRecord.id.update({ ...existing, value: 2 });  // Update (spread + override)\nctx.db.scoreRecord.id.delete(recordId);                   // Delete by PK\n```\n\nInsert through the table accessor (`ctx.db.scoreRecord.insert(...)`). Primary-key, unique, and index accessors support lookup or mutation of existing rows, but do not have `insert(...)`.\n\n`insert(...)` returns the inserted row, including database-assigned auto-increment fields.\n\nThe accessor for a primary key or index is the declared column name. For example, a primary key named `eventId` is accessed as `ctx.db.event.eventId`, not `ctx.db.event.id`.\n\nThe schema value registers module exports but does not expose database rows. Pass a context into any helper that needs `ctx.db`.\n\nNote: `iter()` and `filter()` return iterators. Spread to Array for `.sort()`, `.filter()`, `.map()`.\n\n## Lifecycle Hooks\n\nMUST be `export const`. Bare calls are silently ignored:\n\n```typescript\nexport const init = spacetimedb.init((ctx) => { ... });\nexport const onConnect = spacetimedb.clientConnected((ctx) => { ... });\nexport const onDisconnect = spacetimedb.clientDisconnected((ctx) => { ... });\n```\n\n`ctx.connectionId` is `ConnectionId | null`, including in lifecycle contexts. Guard it before passing it to a helper or using it as a table key.\n\n## Reducer Context API\n\n`ctx` is the only source of sender identity, time, and randomness; stdlib clocks and RNG are unavailable in modules. Let exported callbacks infer their context type. In helpers, use `ReducerCtx<InferSchema<typeof spacetimedb>>`; do not annotate a context as `any`, because that erases table row types and can make `bigint` expressions infer as `number`.\n\n```typescript\ntype Ctx = ReducerCtx<InferSchema<typeof spacetimedb>>;\n\nfunction findRecord(ctx: Ctx, id: bigint) {\n  return ctx.db.scoreRecord.id.find(id);\n}\n```\n\n```typescript\n// Auth: ctx.sender is the caller's Identity\nif (!row.owner.equals(ctx.sender)) throw new SenderError('unauthorized');\n\n// ctx.connectionId: the per-connection id, NULLABLE (ConnectionId | null) — null-check before use.\n// One Identity can hold several connections (multiple tabs/devices).\nif (ctx.connectionId) { /* ... */ }\n\n// Server timestamp (deterministic per reducer call)\nctx.db.item.insert({ id: 0n, createdAt: ctx.timestamp });\n\n// Deterministic RNG\nconst f: number = ctx.random();                          // [0.0, 1.0)\nconst roll: number = ctx.random.integerInRange(1, 6);    // safe JS number bounds/result, inclusive\nconst storedRoll: bigint = BigInt(roll);                 // convert the result for an i64/u64 column\nconst bytes: Uint8Array = ctx.random.fill(new Uint8Array(16));\n\n// Client: Timestamp → Date\nnew Date(Number(row.createdAt.microsSinceUnixEpoch / 1000n));\n```\n\nDo not construct `Identity` values from strings (e.g. `'hex' as Identity`): serialization fails and kills the module. Identities come from `ctx.sender` or `t.identity()` columns.\n\nConstruct a `ConnectionId` from its numeric representation with `new ConnectionId(value)` after importing `ConnectionId` from `spacetimedb`.\n\nConstruct exact timestamps with `new Timestamp(micros)` after importing `Timestamp` from `spacetimedb`. Inclusive index ranges use `Range` from `spacetimedb/server`:\n\n```typescript\nimport { Timestamp } from 'spacetimedb';\nimport { Range } from 'spacetimedb/server';\n\nctx.db.shipment.deliverBy.filter(new Range(\n  { tag: 'included', value: new Timestamp(1_000n) },\n  { tag: 'included', value: new Timestamp(2_000n) },\n));\n```\n\n## Scheduled Tables\n\nThe reducer or procedure referenced by a table's `scheduled` option must be exported.\n\n```typescript\nimport { ScheduleAt } from 'spacetimedb';   // ScheduleAt comes from the root package\n\nconst tickTimer = table({\n  name: 'tick_timer',\n}, {\n  scheduledId: t.u64().primaryKey().autoInc(),\n  scheduledAt: t.scheduleAt(),\n});\n\nexport const tick = spacetimedb.reducer(\n  { onSchedule: tickTimer },\n  { timer: tickTimer.rowType },\n  (ctx, { timer }) => { /* timer row auto-deleted after this runs */ }\n);\n\n// `onSchedule` also works for scheduled procedures whose return type is `t.unit()`.\n// Legacy table-side scheduling, `scheduled: (): any => tick`, still works but is not\n// recommended for new code because it forces a forward reference.\n\n// One-time: ScheduleAt.time(ctx.timestamp.microsSinceUnixEpoch + delayMicros)\n// Repeating: ScheduleAt.interval(60_000_000n)\n// Read time back from a scheduleAt value (tagged union):\n//   const micros = at.tag === 'time' ? at.value : at.value.microsSinceUnixEpoch;  // bigint\n```\n\n## Custom Types\n\n```typescript\n// Product type (struct):\nconst Position = t.object('Position', { x: t.i32(), y: t.i32() });\nconst entity = table({ name: 'entity' }, {\n  id: t.u64().primaryKey().autoInc(),\n  pos: Position,\n});\n\n// Sum type (tagged union):\nconst Shape = t.enum('Shape', {\n  circle: t.i32(),\n  rectangle: t.object('Rect', { w: t.i32(), h: t.i32() }),\n});\n// Values: { tag: 'circle', value: 10 }\n```\n\n## Views\n\nA client subscribing to a view receives only the rows it returns. Use a per-user view\n(keyed on `ctx.sender`) for per-viewer access control: deleting a row it depends on\n(e.g. a membership row) automatically drops the rows it was exposing from that client.\n\n`t.row(...)` and `t.object(...)` return schema builders, not TypeScript runtime row types. Let a view callback infer its result, or annotate a separately declared structural type such as `Array<{ sku: bigint; label: string }>`. A named output type must not reuse the generated PascalCase name of its view accessor (for example, reserve `DiscountedProduct` for a `discounted_product` view).\n\nBoth `spacetimedb.view(...)` and `spacetimedb.anonymousView(...)` take three arguments: view options, the declared return schema, and the callback.\n\n```typescript\n// Anonymous view (same for all clients):\nexport const activeUsers = spacetimedb.anonymousView(\n  { name: 'active_users', public: true },\n  t.array(entity.rowType),\n  (ctx) => [...ctx.db.entity.iter()].filter(e => e.active)\n);\n\n// Per-user view (varies by ctx.sender):\nexport const myProfile = spacetimedb.view(\n  { name: 'my_profile', public: true },\n  t.option(entity.rowType),\n  (ctx) => ctx.db.entity.identity.find(ctx.sender) ?? undefined\n);\n```\n\nFor a procedural view primary key, define the output with `t.row` and mark its field `.primaryKey()`:\n\n```typescript\nconst CatalogKey = t.row('CatalogKey', {\n  sku: t.u64().primaryKey(),\n  label: t.string(),\n});\n```\n\nQuery-builder views use `ctx.from` and return the query directly. Because a query returns a row set, declare its return schema as `t.array(tableName.rowType)`. Use `where` for predicates and `rightSemijoin` when the result should contain right-side rows that have a matching left-side row:\n\n```typescript\nctx => ctx.from.article.where(article => article.published.eq(true))\nctx => ctx.from.subscription.rightSemijoin(\n  ctx.from.account,\n  (subscription, account) => subscription.accountId.eq(account.id)\n)\n```\n\nThe method name identifies which side is returned: `A.leftSemijoin(B, ...)` returns rows from `A`, while `A.rightSemijoin(B, ...)` returns rows from `B`. To return one table's rows when another table has a match, put the returned table on the corresponding side. Semijoins do not project combined columns from both tables.\n\nProcedural views read through `ctx.db` and return materialized values such as arrays. Query-builder values from `ctx.from` are returned directly; they are not iterators and cannot be spread, looped over, or mixed with array methods. Use a procedural view when the result is a custom row assembled from multiple tables.\n\n## Client Visibility Filters\n\n```typescript\nexport const privateNoteFilter = spacetimedb.clientVisibilityFilter.sql(\n  'SELECT * FROM owned_row WHERE owner = :sender'\n);\n```\n\n## Procedures and HTTP\n\n`spacetimedb` is the local schema value returned by `schema({...})`; it is not a named export to import from `spacetimedb/server`.\n\nProcedures declare argument and return types:\n\n```typescript\nconst Result = t.object('Result', { value: t.string() });\n\nexport const inspect = spacetimedb.procedure(\n  { input: t.string() },\n  Result,\n  (_ctx, { input }) => ({ value: input })\n);\n```\n\nProcedure callbacks are synchronous. Do not mark them `async` or use `await`; return the declared value directly. A procedure with return type `t.unit()` returns `{}`.\n\nTypeScript outbound HTTP uses `ctx.http.fetch(url, options)`, including for non-GET requests; it does not provide convenience methods such as `get()` or `post()`. Responses expose the numeric `status`, `headers.get(name)`, and `text()` APIs.\n\n`t.array(t.u8())` values are `number[]`. Convert one to `new Uint8Array(value)` before using it as a binary request body.\n\nProcedures and handlers open short database transactions with `ctx.withTx(tx => ...)`. Perform network I/O before opening the transaction; only database work belongs inside its callback.\n\nScheduled procedures use the same `onSchedule` binding as scheduled reducers. The procedure must be exported, return `t.unit()`, and accept the scheduled row as its argument.\n\nInbound HTTP uses `httpHandler`, `httpRouter`, `Router`, and `SyncResponse`:\n\n`httpHandler` and `httpRouter` are methods on the local `spacetimedb` schema value, not named imports.\n\n```typescript\nimport { Router, SyncResponse } from 'spacetimedb/server';\n\nexport const health = spacetimedb.httpHandler((_ctx, _request) =>\n  new SyncResponse('ok', {\n    status: 200,\n    headers: { 'content-type': 'text/plain' },\n  })\n);\nexport const routes = spacetimedb.httpRouter(new Router().get('/health', health));\n```\n\nHandlers are synchronous: return `SyncResponse` directly rather than marking the callback `async`. Pass the exported `httpHandler(...)` value to the router, not its raw callback. The router selects the path, while a handler reads request data with APIs such as `request.text()`; `Request` has no `path` property. A handler context does not expose `ctx.db`; use `ctx.withTx(tx => ...)` when a handler needs transactional database access.\n","skills/unreal/SKILL.md":"---\nname: unreal\ndescription: SpacetimeDB Unreal Engine client SDK reference. Use when building Unreal Engine clients that connect to SpacetimeDB.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: client\n  language: cpp\n  cursor_globs: \"**/*.cpp,**/*.h\"\n  cursor_always_apply: true\n---\n\n# SpacetimeDB Unreal Engine Integration\n\nThis skill covers Unreal Engine-specific patterns for connecting to SpacetimeDB. For server-side module development, see the `rust-server` or `csharp-server` skills.\n\n---\n\n## Installation\n\nAdd the SpacetimeDB Unreal SDK as a plugin:\n\n1. Create a `Plugins` folder in your Unreal project root if it does not exist.\n2. Copy the `SpacetimeDbSdk` folder into `Plugins/`.\n3. Right-click your `.uproject` file and select **Generate Visual Studio project files**.\n4. Add `\"SpacetimeDbSdk\"` to your module's `Build.cs`:\n\n```csharp\nPublicDependencyModuleNames.AddRange(new string[] { \"SpacetimeDbSdk\" });\n```\n\n---\n\n## Generate Module Bindings\n\n```bash\nspacetime generate --lang unrealcpp \\\n  --uproject-dir <path_to_uproject_directory> \\\n  --module-path <path_to_spacetimedb_module> \\\n  --unreal-module-name <your_unreal_module_name>\n```\n\nThis generates C++ bindings in `ModuleBindings/` inside your project. Include the generated header:\n\n```cpp\n#include \"ModuleBindings/SpacetimeDBClient.g.h\"\n```\n\nRegenerate whenever you change module tables, reducers, or types.\n\n---\n\n## GameManager Actor Pattern\n\nThe recommended pattern is a singleton Actor that owns the connection. Enable ticking so `FrameTick` is called every frame.\n\n### Header (GameManager.h)\n\n```cpp\n#pragma once\n#include \"CoreMinimal.h\"\n#include \"GameFramework/Actor.h\"\n#include \"ModuleBindings/SpacetimeDBClient.g.h\"\n#include \"GameManager.generated.h\"\n\nclass UDbConnection;\n\nUCLASS()\nclass AGameManager : public AActor\n{\n    GENERATED_BODY()\npublic:\n    AGameManager();\n    static AGameManager* Instance;\n\n    UPROPERTY(EditAnywhere, Category=\"SpacetimeDB\")\n    FString ServerUri = TEXT(\"127.0.0.1:3000\");\n\n    UPROPERTY(EditAnywhere, Category=\"SpacetimeDB\")\n    FString DatabaseName = TEXT(\"my-module\");\n\n    UPROPERTY(BlueprintReadOnly, Category=\"SpacetimeDB\")\n    UDbConnection* Conn = nullptr;\n\n    UPROPERTY(BlueprintReadOnly, Category=\"SpacetimeDB\")\n    FSpacetimeDBIdentity LocalIdentity;\n\nprotected:\n    virtual void BeginPlay() override;\n    virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;\npublic:\n    virtual void Tick(float DeltaTime) override;\n\nprivate:\n    UFUNCTION() void HandleConnect(UDbConnection* InConn, FSpacetimeDBIdentity Identity, const FString& Token);\n    UFUNCTION() void HandleConnectError(const FString& Error);\n    UFUNCTION() void HandleDisconnect(UDbConnection* InConn, const FString& Error);\n    UFUNCTION() void HandleSubscriptionApplied(FSubscriptionEventContext& Context);\n};\n```\n\n### Source (GameManager.cpp)\n\n```cpp\n#include \"GameManager.h\"\n#include \"Connection/Credentials.h\"\n\nAGameManager* AGameManager::Instance = nullptr;\n\nAGameManager::AGameManager()\n{\n    PrimaryActorTick.bCanEverTick = true;\n    PrimaryActorTick.bStartWithTickEnabled = true;\n}\n\nvoid AGameManager::BeginPlay()\n{\n    Super::BeginPlay();\n    Instance = this;\n\n    FOnConnectDelegate ConnectDelegate;\n    BIND_DELEGATE_SAFE(ConnectDelegate, this, AGameManager, HandleConnect);\n    FOnDisconnectDelegate DisconnectDelegate;\n    BIND_DELEGATE_SAFE(DisconnectDelegate, this, AGameManager, HandleDisconnect);\n    FOnConnectErrorDelegate ConnectErrorDelegate;\n    BIND_DELEGATE_SAFE(ConnectErrorDelegate, this, AGameManager, HandleConnectError);\n\n    UCredentials::Init(TEXT(\".spacetime_token\"));\n    FString Token = UCredentials::LoadToken();\n\n    UDbConnectionBuilder* Builder = UDbConnection::Builder()\n        ->WithUri(ServerUri)\n        ->WithDatabaseName(DatabaseName)\n        ->OnConnect(ConnectDelegate)\n        ->OnDisconnect(DisconnectDelegate)\n        ->OnConnectError(ConnectErrorDelegate);\n\n    if (!Token.IsEmpty())\n    {\n        Builder->WithToken(Token);\n    }\n\n    Conn = Builder->Build();\n}\n\nvoid AGameManager::EndPlay(const EEndPlayReason::Type EndPlayReason)\n{\n    if (Conn) { Conn->Disconnect(); Conn = nullptr; }\n    if (Instance == this) { Instance = nullptr; }\n    Super::EndPlay(EndPlayReason);\n}\n\nvoid AGameManager::Tick(float DeltaTime)\n{\n    if (Conn && Conn->IsActive())\n    {\n        Conn->FrameTick();\n    }\n}\n\nvoid AGameManager::HandleConnect(UDbConnection* InConn, FSpacetimeDBIdentity Identity, const FString& Token)\n{\n    LocalIdentity = Identity;\n    UCredentials::SaveToken(Token);\n\n    FOnSubscriptionApplied AppliedDelegate;\n    BIND_DELEGATE_SAFE(AppliedDelegate, this, AGameManager, HandleSubscriptionApplied);\n    Conn->SubscriptionBuilder()\n        ->OnApplied(AppliedDelegate)\n        ->SubscribeToAllTables();\n}\n\nvoid AGameManager::HandleConnectError(const FString& Error)\n{\n    UE_LOG(LogTemp, Error, TEXT(\"Connection error: %s\"), *Error);\n}\n\nvoid AGameManager::HandleDisconnect(UDbConnection* InConn, const FString& Error)\n{\n    UE_LOG(LogTemp, Warning, TEXT(\"Disconnected: %s\"), *Error);\n}\n\nvoid AGameManager::HandleSubscriptionApplied(FSubscriptionEventContext& Context)\n{\n    UE_LOG(LogTemp, Log, TEXT(\"Subscription applied - game state loaded\"));\n}\n```\n\n---\n\n## FrameTick -- Critical\n\n**You must either call `Conn->FrameTick()` every frame in your Actor's `Tick()`, or call `Conn->SetAutoTicking(true)` once at startup.** The SDK queues all network messages and only processes them on tick. Without one of these, no callbacks fire and the client appears frozen.\n\n---\n\n## Connection Builder\n\nBuild a connection with the builder pattern. All builder methods return pointers for chaining with `->`.\n\n```cpp\nUDbConnection* Conn = UDbConnection::Builder()\n    ->WithUri(TEXT(\"127.0.0.1:3000\"))\n    ->WithDatabaseName(TEXT(\"my-module\"))\n    ->WithToken(SavedToken)                              // optional\n    ->WithCompression(ESpacetimeDBCompression::Gzip)     // optional\n    ->OnConnect(ConnectDelegate)\n    ->OnConnectError(ErrorDelegate)\n    ->OnDisconnect(DisconnectDelegate)\n    ->Build();\n```\n\n### OnConnect callback signature\n\n```cpp\nUFUNCTION()\nvoid OnConnected(UDbConnection* Connection, FSpacetimeDBIdentity Identity, const FString& Token);\n```\n\nSave the `Token` for future reconnection. The `Identity` is the user's persistent identifier.\n\n---\n\n## Subscribing to Tables\n\nAfter connecting, subscribe to receive table data:\n\n```cpp\n// Subscribe to all public tables\nConn->SubscriptionBuilder()\n    ->OnApplied(AppliedDelegate)\n    ->SubscribeToAllTables();\n\n// Subscribe to specific queries\nTArray<FString> Queries = { TEXT(\"SELECT * FROM player\"), TEXT(\"SELECT * FROM entity\") };\nConn->SubscriptionBuilder()\n    ->OnApplied(AppliedDelegate)\n    ->OnError(ErrorDelegate)\n    ->Subscribe(Queries);\n```\n\n### Subscription Handle\n\n`Subscribe` and `SubscribeToAllTables` return a `USubscriptionHandle*`:\n\n```cpp\nUSubscriptionHandle* Handle = Conn->SubscriptionBuilder()->...->Subscribe(Queries);\nHandle->IsActive();      // true while subscription is live\nHandle->Unsubscribe();   // cancel the subscription\nHandle->UnsubscribeThen(OnEndDelegate); // cancel with callback\nHandle->GetQuerySqls();  // get the SQL queries\n```\n\n---\n\n## Reading the Client Cache\n\nAccess tables through `Conn->Db`:\n\n```cpp\n// Find by unique/primary key (returns by value; default-constructed if not found)\nFUserType User = Conn->Db->User->Identity->Find(SomeIdentity);\n\n// Filter by BTree index\nTArray<FPlayerType> LevelFive = Conn->Db->Player->Level->Filter(5);\n\n// Iterate all rows\nTArray<FEntityType> AllEntities = Conn->Db->Entity->Iter();\n\n// Count\nint32 Total = Conn->Db->Player->Count();\n```\n\n---\n\n## Row Callbacks\n\nRegister callbacks on table objects. Callbacks use Unreal dynamic multicast delegates.\n\n```cpp\n// OnInsert\nConn->Db->User->OnInsert.AddDynamic(this, &AMyActor::OnUserInsert);\n\n// OnDelete\nConn->Db->User->OnDelete.AddDynamic(this, &AMyActor::OnUserDelete);\n\n// OnUpdate (only fires for rows with a primary key)\nConn->Db->User->OnUpdate.AddDynamic(this, &AMyActor::OnUserUpdate);\n```\n\n### Callback signatures (must be UFUNCTION)\n\n```cpp\nUFUNCTION()\nvoid OnUserInsert(const FEventContext& Context, const FUserType& NewRow);\n\nUFUNCTION()\nvoid OnUserDelete(const FEventContext& Context, const FUserType& DeletedRow);\n\nUFUNCTION()\nvoid OnUserUpdate(const FEventContext& Context, const FUserType& OldRow, const FUserType& NewRow);\n```\n\nRegister callbacks before connecting or in `HandleSubscriptionApplied`.\n\n---\n\n## Calling Reducers\n\nInvoke reducers through `Conn->Reducers`:\n\n```cpp\nConn->Reducers->SendMessage(TEXT(\"Hello!\"));\nConn->Reducers->SetName(TEXT(\"Alice\"));\nConn->Reducers->MovePlayer(1.0f, 0.0f);\n```\n\n### Reducer Result Callbacks\n\nObserve when a reducer you called completes:\n\n```cpp\nConn->Reducers->OnSendMessage.AddDynamic(this, &AMyActor::OnSendMessageResult);\n```\n\n```cpp\nUFUNCTION()\nvoid OnSendMessageResult(const FReducerEventContext& Context, const FString& Text)\n{\n    UE_LOG(LogTemp, Log, TEXT(\"SendMessage result for: %s\"), *Text);\n}\n```\n\nThese delegates fire only for reducer calls made by this connection, not for other clients' calls.\n\n---\n\n## Delegate Binding with BIND_DELEGATE_SAFE\n\nUse the `BIND_DELEGATE_SAFE` macro to safely bind delegates to member functions:\n\n```cpp\nFOnConnectDelegate ConnectDelegate;\nBIND_DELEGATE_SAFE(ConnectDelegate, this, AMyActor, HandleConnect);\n```\n\nThis is the recommended pattern for all SpacetimeDB delegate bindings in C++.\n\n---\n\n## Identity and ConnectionId\n\n```cpp\n// FSpacetimeDBIdentity -- 256-bit unique user identifier, persists across connections\nFSpacetimeDBIdentity Identity;\nIdentity.ToHex();\n\n// FSpacetimeDBConnectionId -- 128-bit per-session connection identifier\nFSpacetimeDBConnectionId ConnId = Conn->GetConnectionId();\n\n// From any context\nFSpacetimeDBIdentity Id;\nbool Found = Context.TryGetIdentity(Id);\nFSpacetimeDBConnectionId CId = Context.GetConnectionId();\n```\n\n---\n\n## Token Persistence\n\nUse the built-in `UCredentials` helper to save and load tokens. Passing the saved server-issued token back on reconnect keeps the same identity. This token does not expire and a lost one can't be recovered, so self-issued identities are for development. For production, authenticate with an OIDC provider such as SpacetimeAuth, which handles token lifecycle.\n\n```cpp\nUCredentials::Init(TEXT(\".spacetime_token\"));\nFString Token = UCredentials::LoadToken();\n// ... after connect:\nUCredentials::SaveToken(Token);\n```\n\n---\n\n## Context Types\n\nAll callbacks receive a context struct that provides access to `Db` and `Reducers`:\n\n| Type | Used In |\n|------|---------|\n| `FEventContext` | Table row callbacks (OnInsert, OnDelete, OnUpdate) |\n| `FReducerEventContext` | Reducer result callbacks |\n| `FSubscriptionEventContext` | Subscription lifecycle callbacks (OnApplied, OnError) |\n| `FErrorContext` | Error callbacks |\n\nAll inherit from `FContextBase` which provides:\n\n```cpp\nContext.Db          // URemoteTables* -- client cache\nContext.Reducers    // URemoteReducers* -- invoke reducers\nContext.SubscriptionBuilder()  // start a new subscription\n```\n\n---\n\n## Blueprint Integration\n\nAll core classes are Blueprint-accessible via `UFUNCTION(BlueprintCallable)` and `UPROPERTY(BlueprintReadOnly/BlueprintAssignable)`:\n\n- `UDbConnection::Builder()` and all builder methods are `BlueprintCallable`.\n- Table callbacks (`OnInsert`, `OnDelete`, `OnUpdate`) are `BlueprintAssignable` delegates.\n- Reducer invoke methods and result delegates are Blueprint-accessible.\n- `Conn->Db` and `Conn->Reducers` are `BlueprintReadOnly` properties.\n- Generated row types are `BlueprintType` USTRUCTs with `BlueprintReadWrite` properties.\n\nThis means you can build the entire connection and callback flow in Blueprints without writing C++.\n\n---\n\n## Unreal-Specific Considerations\n\n### Auto Ticking Alternative\n\n`UDbConnection` inherits from `FTickableGameObject`, but auto ticking is **off by default**. You have two options:\n\n```cpp\n// Option 1: Call FrameTick() manually in your Actor's Tick() (shown in GameManager above)\nvoid Tick(float DeltaTime) { Conn->FrameTick(); }\n\n// Option 2: Enable auto ticking. The SDK then processes messages every frame automatically\nConn->SetAutoTicking(true);\n```\n\nPick one. Without either, no callbacks fire.\n\n### Compression\n\n```cpp\nBuilder->WithCompression(ESpacetimeDBCompression::Gzip);  // default\nBuilder->WithCompression(ESpacetimeDBCompression::None);   // no compression\n```\n\n### Generated Types\n\nCodegen produces USTRUCTs prefixed with `F` (e.g., `FUserType`, `FEntityType`) and table classes prefixed with `U` (e.g., `UUserTable`). Row types use `GENERATED_BODY()` and `UPROPERTY()` for full reflection support.\n","codex-plugin/plugins/spacetimedb/skills/concepts/SKILL.md":"# concepts\n\nPath: `codex-plugin/plugins/spacetimedb/skills/concepts/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/concepts/SKILL.md)","codex-plugin/plugins/spacetimedb/skills/cpp-server/SKILL.md":"# cpp-server\n\nPath: `codex-plugin/plugins/spacetimedb/skills/cpp-server/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/cpp-server/SKILL.md)","codex-plugin/plugins/spacetimedb/skills/csharp-client/SKILL.md":"# csharp-client\n\nPath: `codex-plugin/plugins/spacetimedb/skills/csharp-client/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/csharp-client/SKILL.md)","codex-plugin/plugins/spacetimedb/skills/csharp-server/SKILL.md":"# csharp-server\n\nPath: `codex-plugin/plugins/spacetimedb/skills/csharp-server/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/csharp-server/SKILL.md)","codex-plugin/plugins/spacetimedb/skills/mcp/SKILL.md":"# mcp\n\nPath: `codex-plugin/plugins/spacetimedb/skills/mcp/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/mcp/SKILL.md)","codex-plugin/plugins/spacetimedb/skills/rust-server/SKILL.md":"# rust-server\n\nPath: `codex-plugin/plugins/spacetimedb/skills/rust-server/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/rust-server/SKILL.md)","codex-plugin/plugins/spacetimedb/skills/typescript-client/SKILL.md":"# typescript-client\n\nPath: `codex-plugin/plugins/spacetimedb/skills/typescript-client/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/typescript-client/SKILL.md)","codex-plugin/plugins/spacetimedb/skills/typescript-server/SKILL.md":"# typescript-server\n\nPath: `codex-plugin/plugins/spacetimedb/skills/typescript-server/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/typescript-server/SKILL.md)","codex-plugin/plugins/spacetimedb/skills/unity/SKILL.md":"# unity\n\nPath: `codex-plugin/plugins/spacetimedb/skills/unity/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/unity/SKILL.md)","codex-plugin/plugins/spacetimedb/skills/unreal/SKILL.md":"# unreal\n\nPath: `codex-plugin/plugins/spacetimedb/skills/unreal/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/unreal/SKILL.md)","AGENTS.md":"# AI Agent Protocol & Instructions\n\nPath: `AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/AGENTS.md)","CLAUDE.md":"# Claude Agent Guidelines & System Prompt\n\nPath: `CLAUDE.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/CLAUDE.md)",".claude-plugin/marketplace.json":"# Claude Plugin Marketplace Catalog\n\nPath: `.claude-plugin/marketplace.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/.claude-plugin/marketplace.json)",".agents/plugins/marketplace.json":"# Claude Plugin Marketplace Catalog\n\nPath: `.agents/plugins/marketplace.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/.agents/plugins/marketplace.json)","tools/llm-oneshot/README.md":"# llm-oneshot Documentation\n\nPath: `tools/llm-oneshot/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/README.md)","tools/llm-oneshot/package-lock.json":"# Llm-oneshot Skill\n\nPath: `tools/llm-oneshot/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/package-lock.json)","tools/llm-oneshot/package.json":"# Llm-oneshot Skill\n\nPath: `tools/llm-oneshot/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/package.json)","tools/llm-sequential-upgrade/CLAUDE.md":"# Llm-sequential-upgrade Skill\n\nPath: `tools/llm-sequential-upgrade/CLAUDE.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/CLAUDE.md)","tools/llm-sequential-upgrade/DEVELOP.md":"# Llm-sequential-upgrade Skill\n\nPath: `tools/llm-sequential-upgrade/DEVELOP.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/DEVELOP.md)","tools/llm-sequential-upgrade/GRADING.md":"# Llm-sequential-upgrade Skill\n\nPath: `tools/llm-sequential-upgrade/GRADING.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/GRADING.md)","tools/llm-sequential-upgrade/GRADING_WORKFLOW.md":"# Llm-sequential-upgrade Skill\n\nPath: `tools/llm-sequential-upgrade/GRADING_WORKFLOW.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/GRADING_WORKFLOW.md)","tools/llm-sequential-upgrade/README.md":"# llm-sequential-upgrade Documentation\n\nPath: `tools/llm-sequential-upgrade/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/README.md)","tools/llm-sequential-upgrade/RUNBOOK.md":"# Llm-sequential-upgrade Skill\n\nPath: `tools/llm-sequential-upgrade/RUNBOOK.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/RUNBOOK.md)","tools/llm-sequential-upgrade/docker-compose.otel.yaml":"# Llm-sequential-upgrade Skill\n\nPath: `tools/llm-sequential-upgrade/docker-compose.otel.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/docker-compose.otel.yaml)","tools/llm-sequential-upgrade/otel-collector-config.yaml":"# Llm-sequential-upgrade Skill\n\nPath: `tools/llm-sequential-upgrade/otel-collector-config.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/otel-collector-config.yaml)","tools/release/README.md":"# release Documentation\n\nPath: `tools/release/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/release/README.md)","tools/templates/README.md":"# templates Documentation\n\nPath: `tools/templates/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/templates/README.md)","tools/templates/package.json":"# Templates Skill\n\nPath: `tools/templates/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/templates/package.json)","tools/xtask-llm-benchmark/README.md":"# xtask-llm-benchmark Documentation\n\nPath: `tools/xtask-llm-benchmark/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/xtask-llm-benchmark/README.md)","skills/cli/README.md":"# Cli Skill\n\nPath: `skills/cli/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/cli/README.md)","skills/concepts/README.md":"# Concepts Skill\n\nPath: `skills/concepts/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/concepts/README.md)","skills/cpp-server/README.md":"# Cpp-server Skill\n\nPath: `skills/cpp-server/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/cpp-server/README.md)","skills/csharp-client/README.md":"# Csharp-client Skill\n\nPath: `skills/csharp-client/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/csharp-client/README.md)","skills/csharp-server/README.md":"# Csharp-server Skill\n\nPath: `skills/csharp-server/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/csharp-server/README.md)","skills/mcp/README.md":"# Mcp Skill\n\nPath: `skills/mcp/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/mcp/README.md)","skills/rust-server/README.md":"# Rust-server Skill\n\nPath: `skills/rust-server/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/rust-server/README.md)","skills/typescript-client/README.md":"# Typescript-client Skill\n\nPath: `skills/typescript-client/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/typescript-client/README.md)","skills/typescript-server/README.md":"# Typescript-server Skill\n\nPath: `skills/typescript-server/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/typescript-server/README.md)","skills/unity/README.md":"# Unity Skill\n\nPath: `skills/unity/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/unity/README.md)","skills/unreal/README.md":"# Unreal Skill\n\nPath: `skills/unreal/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/unreal/README.md)","codex-plugin/.agents/plugins/marketplace.json":"# Claude Plugin Marketplace Catalog\n\nPath: `codex-plugin/.agents/plugins/marketplace.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/.agents/plugins/marketplace.json)","codex-plugin/plugins/spacetimedb/.mcp.json":"# Spacetimedb Skill\n\nPath: `codex-plugin/plugins/spacetimedb/.mcp.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/.mcp.json)","tools/llm-sequential-upgrade/backends/mongodb.md":"# Backends Skill\n\nPath: `tools/llm-sequential-upgrade/backends/mongodb.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/backends/mongodb.md)","tools/llm-sequential-upgrade/backends/postgres.md":"# Backends Skill\n\nPath: `tools/llm-sequential-upgrade/backends/postgres.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/backends/postgres.md)","tools/llm-sequential-upgrade/backends/spacetime-templates.md":"# Backends Skill\n\nPath: `tools/llm-sequential-upgrade/backends/spacetime-templates.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/backends/spacetime-templates.md)","tools/llm-sequential-upgrade/backends/spacetime.md":"# Backends Skill\n\nPath: `tools/llm-sequential-upgrade/backends/spacetime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/backends/spacetime.md)","tools/llm-sequential-upgrade/perf-benchmark/README.md":"# perf-benchmark Documentation\n\nPath: `tools/llm-sequential-upgrade/perf-benchmark/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/perf-benchmark/README.md)","tools/llm-sequential-upgrade/perf-benchmark/package-lock.json":"# Perf-benchmark Skill\n\nPath: `tools/llm-sequential-upgrade/perf-benchmark/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/perf-benchmark/package-lock.json)","tools/llm-sequential-upgrade/perf-benchmark/package.json":"# Perf-benchmark Skill\n\nPath: `tools/llm-sequential-upgrade/perf-benchmark/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/perf-benchmark/package.json)","tools/llm-sequential-upgrade/perf-benchmark/tsconfig.json":"# Perf-benchmark Skill\n\nPath: `tools/llm-sequential-upgrade/perf-benchmark/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/perf-benchmark/tsconfig.json)","tools/llm-sequential-upgrade/templates/BUG_REPORT.template.md":"# Templates Skill\n\nPath: `tools/llm-sequential-upgrade/templates/BUG_REPORT.template.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/templates/BUG_REPORT.template.md)","tools/llm-sequential-upgrade/templates/ITERATION_LOG.template.md":"# Templates Skill\n\nPath: `tools/llm-sequential-upgrade/templates/ITERATION_LOG.template.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/templates/ITERATION_LOG.template.md)","tools/llm-sequential-upgrade/templates/README.md":"# templates Documentation\n\nPath: `tools/llm-sequential-upgrade/templates/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/templates/README.md)","codex-plugin/plugins/spacetimedb/.codex-plugin/plugin.json":"# codex-plugin Plugin Manifest\n\nPath: `codex-plugin/plugins/spacetimedb/.codex-plugin/plugin.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/.codex-plugin/plugin.json)","demo/Blackholio/client-unity/Packages/manifest.json":"# Packages Skill\n\nPath: `demo/Blackholio/client-unity/Packages/manifest.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/demo/Blackholio/client-unity/Packages/manifest.json)","demo/Blackholio/client-unity/Packages/packages-lock.json":"# Packages Skill\n\nPath: `demo/Blackholio/client-unity/Packages/packages-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/demo/Blackholio/client-unity/Packages/packages-lock.json)","tools/llm-oneshot/.cursor/rules/benchmark.mdc":"# Cursor Rule: benchmark\n\nPath: `tools/llm-oneshot/.cursor/rules/benchmark.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/benchmark.mdc)","tools/llm-oneshot/.cursor/rules/deployment.mdc":"# Cursor Rule: deployment\n\nPath: `tools/llm-oneshot/.cursor/rules/deployment.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/deployment.mdc)","tools/llm-oneshot/.cursor/rules/frontend-csharp.mdc":"# Cursor Rule: frontend-csharp\n\nPath: `tools/llm-oneshot/.cursor/rules/frontend-csharp.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/frontend-csharp.mdc)","tools/llm-oneshot/.cursor/rules/frontend-rust.mdc":"# Cursor Rule: frontend-rust\n\nPath: `tools/llm-oneshot/.cursor/rules/frontend-rust.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/frontend-rust.mdc)","tools/llm-oneshot/.cursor/rules/frontend-typescript.mdc":"# Cursor Rule: frontend-typescript\n\nPath: `tools/llm-oneshot/.cursor/rules/frontend-typescript.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/frontend-typescript.mdc)","tools/llm-oneshot/.cursor/rules/grading.mdc":"# Cursor Rule: grading\n\nPath: `tools/llm-oneshot/.cursor/rules/grading.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/grading.mdc)","tools/llm-oneshot/.cursor/rules/patterns-react.mdc":"# Cursor Rule: patterns-react\n\nPath: `tools/llm-oneshot/.cursor/rules/patterns-react.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/patterns-react.mdc)","tools/llm-oneshot/.cursor/rules/patterns-rust.mdc":"# Cursor Rule: patterns-rust\n\nPath: `tools/llm-oneshot/.cursor/rules/patterns-rust.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/patterns-rust.mdc)","tools/llm-oneshot/.cursor/rules/patterns-typescript.mdc":"# Cursor Rule: patterns-typescript\n\nPath: `tools/llm-oneshot/.cursor/rules/patterns-typescript.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/patterns-typescript.mdc)","tools/llm-oneshot/.cursor/rules/postgres.mdc":"# Cursor Rule: postgres\n\nPath: `tools/llm-oneshot/.cursor/rules/postgres.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/postgres.mdc)","tools/llm-oneshot/.cursor/rules/spacetimedb-styling.mdc":"# Cursor Rule: spacetimedb-styling\n\nPath: `tools/llm-oneshot/.cursor/rules/spacetimedb-styling.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/spacetimedb-styling.mdc)","tools/llm-sequential-upgrade/perf-benchmark/optimized-reference/METHODOLOGY.md":"# Optimized-reference Skill\n\nPath: `tools/llm-sequential-upgrade/perf-benchmark/optimized-reference/METHODOLOGY.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/perf-benchmark/optimized-reference/METHODOLOGY.md)","tools/llm-oneshot/apps/chat-app/prompts/README.md":"# prompts Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/README.md)","tools/llm-oneshot/apps/chat-app/prompts/base_mongodb.md":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/base_mongodb.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/base_mongodb.md)","tools/llm-oneshot/apps/chat-app/prompts/base_postgres.md":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/base_postgres.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/base_postgres.md)","tools/llm-oneshot/apps/chat-app/prompts/base_spacetime.md":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/base_spacetime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/base_spacetime.md)","tools/llm-oneshot/apps/chat-app/prompts/grading_checklist.md":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/grading_checklist.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/grading_checklist.md)","tools/llm-oneshot/apps/chat-app/prompts/grading_rubric.md":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/grading_rubric.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/grading_rubric.md)","tools/llm-oneshot/apps/chat-app/prompts/output_instructions.md":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/output_instructions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/output_instructions.md)","tools/llm-oneshot/apps/paint-app/prompts/README.md":"# prompts Documentation\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/README.md)","tools/llm-oneshot/apps/paint-app/prompts/base_postgres.md":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/base_postgres.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/base_postgres.md)","tools/llm-oneshot/apps/paint-app/prompts/base_spacetime.md":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/base_spacetime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/base_spacetime.md)","tools/llm-oneshot/apps/paint-app/prompts/grading_checklist.md":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/grading_checklist.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/grading_checklist.md)","tools/llm-oneshot/apps/paint-app/prompts/grading_rubric.md":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/grading_rubric.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/grading_rubric.md)","tools/llm-oneshot/apps/paint-app/prompts/output_instructions.md":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/output_instructions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/output_instructions.md)","demo/Blackholio/client-unity/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json":"# Com.unity.testtools.codecoverage Skill\n\nPath: `demo/Blackholio/client-unity/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/demo/Blackholio/client-unity/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json)","tools/llm-oneshot/apps/chat-app/prompts/composed/01_basic.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/01_basic.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/01_basic.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/02_scheduled.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/02_scheduled.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/02_scheduled.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/03_realtime.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/03_realtime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/03_realtime.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/04_reactions.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/04_reactions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/04_reactions.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/05_edit_history.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/05_edit_history.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/05_edit_history.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/06_permissions.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/06_permissions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/06_permissions.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/07_presence.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/07_presence.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/07_presence.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/08_threading.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/08_threading.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/08_threading.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/09_private_rooms.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/09_private_rooms.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/09_private_rooms.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/10_activity.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/10_activity.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/10_activity.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/11_drafts.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/11_drafts.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/11_drafts.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/12_anon_migration.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/12_anon_migration.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/12_anon_migration.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/13_pinned.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/13_pinned.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/13_pinned.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/14_profiles.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/14_profiles.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/14_profiles.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/15_mentions.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/15_mentions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/15_mentions.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/16_bookmarks.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/16_bookmarks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/16_bookmarks.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/17_forwarding.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/17_forwarding.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/17_forwarding.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/18_slowmode.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/18_slowmode.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/18_slowmode.md)","tools/llm-oneshot/apps/chat-app/prompts/composed/19_polls.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/19_polls.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/19_polls.md)","tools/llm-oneshot/apps/chat-app/prompts/features/01_basic.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/01_basic.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/01_basic.md)","tools/llm-oneshot/apps/chat-app/prompts/features/02_scheduled.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/02_scheduled.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/02_scheduled.md)","tools/llm-oneshot/apps/chat-app/prompts/features/03_ephemeral.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/03_ephemeral.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/03_ephemeral.md)","tools/llm-oneshot/apps/chat-app/prompts/features/04_reactions.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/04_reactions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/04_reactions.md)","tools/llm-oneshot/apps/chat-app/prompts/features/05_edit_history.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/05_edit_history.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/05_edit_history.md)","tools/llm-oneshot/apps/chat-app/prompts/features/06_permissions.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/06_permissions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/06_permissions.md)","tools/llm-oneshot/apps/chat-app/prompts/features/07_presence.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/07_presence.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/07_presence.md)","tools/llm-oneshot/apps/chat-app/prompts/features/08_threading.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/08_threading.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/08_threading.md)","tools/llm-oneshot/apps/chat-app/prompts/features/09_private_rooms.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/09_private_rooms.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/09_private_rooms.md)","tools/llm-oneshot/apps/chat-app/prompts/features/10_activity.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/10_activity.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/10_activity.md)","tools/llm-oneshot/apps/chat-app/prompts/features/11_drafts.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/11_drafts.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/11_drafts.md)","tools/llm-oneshot/apps/chat-app/prompts/features/12_anon_migration.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/12_anon_migration.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/12_anon_migration.md)","tools/llm-oneshot/apps/chat-app/prompts/features/13_pinned.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/13_pinned.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/13_pinned.md)","tools/llm-oneshot/apps/chat-app/prompts/features/14_profiles.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/14_profiles.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/14_profiles.md)","tools/llm-oneshot/apps/chat-app/prompts/features/15_mentions.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/15_mentions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/15_mentions.md)","tools/llm-oneshot/apps/chat-app/prompts/features/16_bookmarks.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/16_bookmarks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/16_bookmarks.md)","tools/llm-oneshot/apps/chat-app/prompts/features/17_forwarding.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/17_forwarding.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/17_forwarding.md)","tools/llm-oneshot/apps/chat-app/prompts/features/18_slowmode.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/18_slowmode.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/18_slowmode.md)","tools/llm-oneshot/apps/chat-app/prompts/features/19_polls.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/19_polls.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/19_polls.md)","tools/llm-oneshot/apps/chat-app/prompts/language/csharp-spacetime.md":"# Language Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/language/csharp-spacetime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/language/csharp-spacetime.md)","tools/llm-oneshot/apps/chat-app/prompts/language/rust-spacetime.md":"# Language Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/language/rust-spacetime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/language/rust-spacetime.md)","tools/llm-oneshot/apps/chat-app/prompts/language/typescript-mongodb.md":"# Language Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/language/typescript-mongodb.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/language/typescript-mongodb.md)","tools/llm-oneshot/apps/chat-app/prompts/language/typescript-postgres.md":"# Language Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/language/typescript-postgres.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/language/typescript-postgres.md)","tools/llm-oneshot/apps/chat-app/prompts/language/typescript-spacetime.md":"# Language Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/language/typescript-spacetime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/language/typescript-spacetime.md)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/BENCHMARK_COMPARISON_REPORT.md":"# Opus-4-5 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/BENCHMARK_COMPARISON_REPORT.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/BENCHMARK_COMPARISON_REPORT.md)","tools/llm-oneshot/apps/paint-app/prompts/composed/01_basic.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/01_basic.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/01_basic.md)","tools/llm-oneshot/apps/paint-app/prompts/composed/02_shapes.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/02_shapes.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/02_shapes.md)","tools/llm-oneshot/apps/paint-app/prompts/composed/03_selection.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/03_selection.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/03_selection.md)","tools/llm-oneshot/apps/paint-app/prompts/composed/04_layers.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/04_layers.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/04_layers.md)","tools/llm-oneshot/apps/paint-app/prompts/composed/05_presence.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/05_presence.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/05_presence.md)","tools/llm-oneshot/apps/paint-app/prompts/composed/06_comments.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/06_comments.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/06_comments.md)","tools/llm-oneshot/apps/paint-app/prompts/composed/07_versions.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/07_versions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/07_versions.md)","tools/llm-oneshot/apps/paint-app/prompts/composed/08_permissions.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/08_permissions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/08_permissions.md)","tools/llm-oneshot/apps/paint-app/prompts/composed/09_follow.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/09_follow.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/09_follow.md)","tools/llm-oneshot/apps/paint-app/prompts/composed/10_activity.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/10_activity.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/10_activity.md)","tools/llm-oneshot/apps/paint-app/prompts/composed/11_sharing.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/11_sharing.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/11_sharing.md)","tools/llm-oneshot/apps/paint-app/prompts/composed/12_full.md":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/12_full.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/12_full.md)","tools/llm-oneshot/apps/paint-app/prompts/features/01_basic.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/01_basic.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/01_basic.md)","tools/llm-oneshot/apps/paint-app/prompts/features/02_cursor_indicators.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/02_cursor_indicators.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/02_cursor_indicators.md)","tools/llm-oneshot/apps/paint-app/prompts/features/03_shapes.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/03_shapes.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/03_shapes.md)","tools/llm-oneshot/apps/paint-app/prompts/features/04_selection.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/04_selection.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/04_selection.md)","tools/llm-oneshot/apps/paint-app/prompts/features/05_layers_locking.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/05_layers_locking.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/05_layers_locking.md)","tools/llm-oneshot/apps/paint-app/prompts/features/06_presence.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/06_presence.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/06_presence.md)","tools/llm-oneshot/apps/paint-app/prompts/features/07_comments.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/07_comments.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/07_comments.md)","tools/llm-oneshot/apps/paint-app/prompts/features/08_version_history.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/08_version_history.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/08_version_history.md)","tools/llm-oneshot/apps/paint-app/prompts/features/09_realtime_permissions.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/09_realtime_permissions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/09_realtime_permissions.md)","tools/llm-oneshot/apps/paint-app/prompts/features/10_follow_mode.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/10_follow_mode.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/10_follow_mode.md)","tools/llm-oneshot/apps/paint-app/prompts/features/11_activity_feed.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/11_activity_feed.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/11_activity_feed.md)","tools/llm-oneshot/apps/paint-app/prompts/features/12_private_canvases.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/12_private_canvases.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/12_private_canvases.md)","tools/llm-oneshot/apps/paint-app/prompts/features/13_canvas_chat.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/13_canvas_chat.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/13_canvas_chat.md)","tools/llm-oneshot/apps/paint-app/prompts/features/14_auto_cleanup.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/14_auto_cleanup.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/14_auto_cleanup.md)","tools/llm-oneshot/apps/paint-app/prompts/features/15_text_sticky.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/15_text_sticky.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/15_text_sticky.md)","tools/llm-oneshot/apps/paint-app/prompts/features/16_keyboard_shortcuts.md":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/16_keyboard_shortcuts.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/16_keyboard_shortcuts.md)","tools/llm-oneshot/apps/paint-app/prompts/language/csharp-spacetime.md":"# Language Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/language/csharp-spacetime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/language/csharp-spacetime.md)","tools/llm-oneshot/apps/paint-app/prompts/language/rust-spacetime.md":"# Language Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/language/rust-spacetime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/language/rust-spacetime.md)","tools/llm-oneshot/apps/paint-app/prompts/language/typescript-postgres.md":"# Language Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/language/typescript-postgres.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/language/typescript-postgres.md)","tools/llm-oneshot/apps/paint-app/prompts/language/typescript-spacetime.md":"# Language Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/language/typescript-spacetime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/language/typescript-spacetime.md)","tools/xtask-llm-benchmark/src/templates/csharp/server/global.json":"# Server Skill\n\nPath: `tools/xtask-llm-benchmark/src/templates/csharp/server/global.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/xtask-llm-benchmark/src/templates/csharp/server/global.json)","tools/xtask-llm-benchmark/src/templates/typescript/server/package.json":"# Server Skill\n\nPath: `tools/xtask-llm-benchmark/src/templates/typescript/server/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/xtask-llm-benchmark/src/templates/typescript/server/package.json)","tools/xtask-llm-benchmark/src/templates/typescript/server/tsconfig.json":"# Server Skill\n\nPath: `tools/xtask-llm-benchmark/src/templates/typescript/server/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/xtask-llm-benchmark/src/templates/typescript/server/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/GRADING_RESULTS.md":"# Chat-app-20260108-120000 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/GRADING_RESULTS.md)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/GRADING_RESULTS.md":"# Chat-app-20260107-120000 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/GRADING_RESULTS.md)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/README.md":"# chat-app-20260107-120000 Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/README.md)","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/GRADING_RESULTS.md":"# Chat-app-20260108-140800 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/GRADING_RESULTS.md)","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/GRADING_RESULTS.md":"# Chat-app-20260107-092240 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/GRADING_RESULTS.md)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/GRADING_RESULTS.md":"# Chat-app-20260128-112222 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/GRADING_RESULTS.md)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/README.md":"# chat-app-20260128-112222 Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/README.md)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/GRADING_RESULTS.md":"# Chat-app-20260107-120000 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/GRADING_RESULTS.md)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/README.md":"# chat-app-20260107-120000 Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/README.md)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/GRADING_RESULTS.md":"# Chat-app-20260104-120000 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/GRADING_RESULTS.md)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/README.md":"# chat-app-20260104-120000 Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/README.md)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/GRADING_RESULTS.md":"# Chat-app-20260104-160000 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/GRADING_RESULTS.md)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/README.md":"# chat-app-20260104-160000 Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/README.md)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/GRADING_RESULTS.md":"# Chat-app-20260104-180000 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/GRADING_RESULTS.md)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/README.md":"# chat-app-20260104-180000 Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/README.md)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/GRADING_RESULTS.md":"# Chat-app-20260102-162918 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/GRADING_RESULTS.md)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/README.md":"# chat-app-20260102-162918 Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/README.md)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/GRADING_RESULTS.md":"# Chat-app-20260102-170500 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/GRADING_RESULTS.md)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/README.md":"# chat-app-20260102-170500 Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/README.md)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/GRADING_RESULTS.md":"# Chat-app-20260102-171317 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/GRADING_RESULTS.md)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/README.md":"# chat-app-20260102-171317 Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/README.md)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/GRADING_RESULTS.md":"# Chat-app-20260105-180000 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/GRADING_RESULTS.md)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/README.md":"# chat-app-20260105-180000 Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/README.md)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/package-lock.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/package.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/package.json)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/tsconfig.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/package-lock.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/package.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/package.json)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/tsconfig.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/package-lock.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/package.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/package.json)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/tsconfig.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/tsconfig.node.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/tsconfig.node.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/tsconfig.node.json)","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/package-lock.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/package.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/package.json)","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/tsconfig.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/package-lock.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/package.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/package.json)","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/tsconfig.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/package-lock.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/package.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/package.json)","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/tsconfig.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/tsconfig.node.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/tsconfig.node.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/tsconfig.node.json)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/package-lock.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/package.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/package.json)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/tsconfig.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/tsconfig.node.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/tsconfig.node.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/tsconfig.node.json)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/package-lock.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/package.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/package.json)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/tsconfig.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/package-lock.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/package.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/package.json)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/tsconfig.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/tsconfig.node.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/tsconfig.node.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/tsconfig.node.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/package-lock.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/package.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/package.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/tsconfig.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/tsconfig.node.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/tsconfig.node.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/tsconfig.node.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/package-lock.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/package.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/package.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/tsconfig.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/package-lock.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/package.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/package.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/tsconfig.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/server/package.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/server/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/server/package.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/server/tsconfig.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/server/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/server/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/client/package.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/client/package.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/client/tsconfig.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/client/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/server/package.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/server/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/server/package.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/server/tsconfig.json":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/server/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/server/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/package-lock.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/package.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/package.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/tsconfig.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/package-lock.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/package.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/package.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/tsconfig.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/package-lock.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/package.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/package.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/tsconfig.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/package-lock.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/package.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/package.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/tsconfig.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/tsconfig.json)","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/package-lock.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/package-lock.json)","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/package.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/package.json)","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/tsconfig.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/tsconfig.json)","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/package-lock.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/package-lock.json)","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/package.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/package.json)","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/tsconfig.json":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/package-lock.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/package.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/package.json)","tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/tsconfig.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/package-lock.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/package.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/package.json)","tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/tsconfig.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/package-lock.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/package.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/package.json)","tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/tsconfig.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/package-lock.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/package.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/package.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/tsconfig.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/package-lock.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/package.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/package.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/tsconfig.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/package-lock.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/package.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/package.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/tsconfig.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/tsconfig.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/package-lock.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/package-lock.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/package.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/package.json)","tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/tsconfig.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/tsconfig.json)","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/package-lock.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/package-lock.json)","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/package.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/package.json)","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/tsconfig.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/tsconfig.json)","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/package-lock.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/package-lock.json)","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/package.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/package.json)","tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/tsconfig.json":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/tsconfig.json)"},"items":[{"name":"AGENTS.md","path":"AGENTS.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/AGENTS.md","title":"AI Agent Protocol & Instructions","category":"root-instruction","format":"markdown","content":"# AI Agent Protocol & Instructions\n\nPath: `AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/AGENTS.md)","tokens":300,"sizeBytes":159},{"name":".mcp.json","path":"codex-plugin/plugins/spacetimedb/.mcp.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/.mcp.json","title":"Spacetimedb Skill","category":"anthropic-skill","format":"json","content":"# Spacetimedb Skill\n\nPath: `codex-plugin/plugins/spacetimedb/.mcp.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/.mcp.json)","tokens":300,"sizeBytes":210},{"name":"SKILL.md","path":"codex-plugin/plugins/spacetimedb/skills/cli/SKILL.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/cli/SKILL.md","title":"cli","category":"anthropic-skill","format":"markdown","content":"---\nname: cli\ndescription: SpacetimeDB CLI reference for initializing projects, building modules, publishing databases, querying data, and managing servers\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: shared\n  language: all\n  cursor_globs: \"**/*\"\n  cursor_always_apply: false\ntriggers:\n  - spacetime init\n  - spacetime build\n  - spacetime publish\n  - spacetime dev\n  - spacetime sql\n  - spacetime call\n  - spacetime logs\n  - spacetime server\n  - spacetime login\n  - spacetime generate\n  - how do I use the CLI\n  - CLI command\n---\n\n# SpacetimeDB CLI\n\nUse this skill when the user needs help with the `spacetime` CLI tool - initializing projects, building modules, publishing databases, querying data, managing servers, or troubleshooting CLI issues.\n\n## Quick Reference\n\n### Project Initialization & Development\n\n```bash\n# Initialize new project\nspacetime init my-project --lang rust|csharp|typescript|cpp\nspacetime init my-project --template <template-id>\n\n# Build module\nspacetime build                    # release build\nspacetime build --debug            # faster iteration, slower runtime\n\n# Dev mode (auto-rebuild, auto-publish, generates bindings)\nspacetime dev\nspacetime dev --client-lang typescript --module-bindings-path ./client/src/module_bindings\n\n# Generate client bindings\nspacetime generate --lang typescript|csharp|rust --out-dir ./bindings --module-path ./server\nspacetime generate --lang unrealcpp --uproject-dir ./MyGame --module-path ./server --unreal-module-name MyGame\n```\n\n### Publishing & Deployment\n\n```bash\n# Publish to Maincloud (default)\nspacetime publish my-database --yes\n\n# Publish to local server\nspacetime publish my-database --server local --yes\n\n# Clear database and republish\nspacetime publish my-database --delete-data=always --yes\n```\n\n### Database Interaction\n\n```bash\n# SQL queries\nspacetime sql my-database \"SELECT * FROM users\"\nspacetime sql my-database --interactive   # REPL mode\n\n# Call reducers (each argument is a separate positional arg)\nspacetime call my-database my_reducer '\"value\"' '123'\n\n# Subscribe to changes\nspacetime subscribe my-database \"SELECT * FROM users\" --num-updates 10\n\n# View logs\nspacetime logs my-database -f              # follow logs\nspacetime logs my-database -n 100          # up to 100 log lines\n\n# Describe schema\n# (without --json, output is human-readable text)\nspacetime describe my-database --json\nspacetime describe my-database tables --json   # also views, reducers, procedures, routes, env, types\nspacetime describe my-database tables users --json\nspacetime describe my-database reducers my_reducer --json\n```\n\n### Database Management\n\n```bash\n# List databases\nspacetime list\n\n# Delete database\nspacetime delete my-database\n\n# Rename database\nspacetime rename <database-identity> --to new-name\n```\n\n### Server Management\n\n```bash\n# List configured servers\nspacetime server list\n\n# Add server\nspacetime server add local --url http://localhost:3000 --default\nspacetime server add myserver --url https://my-spacetime.example.com\n\n# Set default server\nspacetime server set-default local\n\n# Test connectivity\nspacetime server ping local\n\n# Start local instance\nspacetime start\n\n# Clear local data\nspacetime server clear\n```\n\n### Authentication\n\n```bash\n# Login (opens browser)\nspacetime login\n\n# Login with token\nspacetime login --token <token>\n\n# Show login status\nspacetime login show\n\n# Logout\nspacetime logout\n```\n\n## Default Servers\n\n| Name | URL | Description |\n|------|-----|-------------|\n| `maincloud` | `https://maincloud.spacetimedb.com` | Production cloud (default) |\n| `local` | `http://127.0.0.1:3000` | Local development server |\n\n## Common Flags\n\n| Flag | Short | Description |\n|------|-------|-------------|\n| `--server` | `-s` | Target server (nickname, hostname, or URL) |\n| `--yes` | `-y` | Non-interactive mode (skip confirmations) |\n| `--anonymous` | | Use anonymous identity |\n| `--module-path` | `-p` | Path to module project |\n| `--no-config` | | Ignore `spacetime.json` project configuration |\n\n## Troubleshooting\n\n### \"Not logged in\"\n```bash\nspacetime login\n# Or use --anonymous for public operations\n```\n\n### \"Server not responding\"\n```bash\nspacetime server ping <server>\n# For local: ensure spacetime start is running\n```\n\n### \"Schema conflict\"\n```bash\n# Clear data and republish\nspacetime publish my-db --delete-data=always --yes\n```\n\n### \"Build failed\"\n```bash\n# Check Rust/C# toolchain\nrustup show\n# For Rust modules, ensure wasm32-unknown-unknown target\nrustup target add wasm32-unknown-unknown\n```\n\n## Module Languages\n\n**Server-side (modules):** Rust, C#, TypeScript, C++\n**Client SDKs:** TypeScript, C#, Rust, Unreal Engine\n**CLI `generate` targets:** TypeScript, C#, Rust, Unreal C++\n","frontmatter":{"name":"cli","description":"SpacetimeDB CLI reference for initializing projects, building modules, publishing databases, querying data, and managing servers","license":"Apache-2.0","metadata":{"author":"clockworklabs","version":"2.0","role":"shared","language":"all","cursor_globs":"**/*","cursor_always_apply":false},"triggers":["spacetime init","spacetime build","spacetime publish","spacetime dev","spacetime sql","spacetime call","spacetime logs","spacetime server","spacetime login","spacetime generate","how do I use the CLI","CLI command"]},"isInternal":false,"tokens":1214,"sizeBytes":4732},{"name":"SKILL.md","path":"codex-plugin/plugins/spacetimedb/skills/concepts/SKILL.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/concepts/SKILL.md","title":"concepts","category":"anthropic-skill","format":"markdown","content":"# concepts\n\nPath: `codex-plugin/plugins/spacetimedb/skills/concepts/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/concepts/SKILL.md)","tokens":300,"sizeBytes":231},{"name":"SKILL.md","path":"codex-plugin/plugins/spacetimedb/skills/cpp-server/SKILL.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/cpp-server/SKILL.md","title":"cpp-server","category":"anthropic-skill","format":"markdown","content":"# cpp-server\n\nPath: `codex-plugin/plugins/spacetimedb/skills/cpp-server/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/cpp-server/SKILL.md)","tokens":300,"sizeBytes":237},{"name":"SKILL.md","path":"codex-plugin/plugins/spacetimedb/skills/csharp-client/SKILL.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/csharp-client/SKILL.md","title":"csharp-client","category":"anthropic-skill","format":"markdown","content":"# csharp-client\n\nPath: `codex-plugin/plugins/spacetimedb/skills/csharp-client/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/csharp-client/SKILL.md)","tokens":300,"sizeBytes":246},{"name":"SKILL.md","path":"codex-plugin/plugins/spacetimedb/skills/csharp-server/SKILL.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/csharp-server/SKILL.md","title":"csharp-server","category":"anthropic-skill","format":"markdown","content":"# csharp-server\n\nPath: `codex-plugin/plugins/spacetimedb/skills/csharp-server/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/csharp-server/SKILL.md)","tokens":300,"sizeBytes":246},{"name":"SKILL.md","path":"codex-plugin/plugins/spacetimedb/skills/mcp/SKILL.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/mcp/SKILL.md","title":"mcp","category":"anthropic-skill","format":"markdown","content":"# mcp\n\nPath: `codex-plugin/plugins/spacetimedb/skills/mcp/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/mcp/SKILL.md)","tokens":300,"sizeBytes":216},{"name":"SKILL.md","path":"codex-plugin/plugins/spacetimedb/skills/rust-server/SKILL.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/rust-server/SKILL.md","title":"rust-server","category":"anthropic-skill","format":"markdown","content":"# rust-server\n\nPath: `codex-plugin/plugins/spacetimedb/skills/rust-server/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/rust-server/SKILL.md)","tokens":300,"sizeBytes":240},{"name":"SKILL.md","path":"codex-plugin/plugins/spacetimedb/skills/typescript-client/SKILL.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/typescript-client/SKILL.md","title":"typescript-client","category":"anthropic-skill","format":"markdown","content":"# typescript-client\n\nPath: `codex-plugin/plugins/spacetimedb/skills/typescript-client/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/typescript-client/SKILL.md)","tokens":300,"sizeBytes":258},{"name":"SKILL.md","path":"codex-plugin/plugins/spacetimedb/skills/typescript-server/SKILL.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/typescript-server/SKILL.md","title":"typescript-server","category":"anthropic-skill","format":"markdown","content":"# typescript-server\n\nPath: `codex-plugin/plugins/spacetimedb/skills/typescript-server/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/typescript-server/SKILL.md)","tokens":300,"sizeBytes":258},{"name":"SKILL.md","path":"codex-plugin/plugins/spacetimedb/skills/unity/SKILL.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/unity/SKILL.md","title":"unity","category":"anthropic-skill","format":"markdown","content":"# unity\n\nPath: `codex-plugin/plugins/spacetimedb/skills/unity/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/unity/SKILL.md)","tokens":300,"sizeBytes":222},{"name":"SKILL.md","path":"codex-plugin/plugins/spacetimedb/skills/unreal/SKILL.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/unreal/SKILL.md","title":"unreal","category":"anthropic-skill","format":"markdown","content":"# unreal\n\nPath: `codex-plugin/plugins/spacetimedb/skills/unreal/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/unreal/SKILL.md)","tokens":300,"sizeBytes":225},{"name":"manifest.json","path":"demo/Blackholio/client-unity/Packages/manifest.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/demo/Blackholio/client-unity/Packages/manifest.json","title":"Packages Skill","category":"anthropic-skill","format":"json","content":"# Packages Skill\n\nPath: `demo/Blackholio/client-unity/Packages/manifest.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/demo/Blackholio/client-unity/Packages/manifest.json)","tokens":300,"sizeBytes":225},{"name":"packages-lock.json","path":"demo/Blackholio/client-unity/Packages/packages-lock.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/demo/Blackholio/client-unity/Packages/packages-lock.json","title":"Packages Skill","category":"anthropic-skill","format":"json","content":"# Packages Skill\n\nPath: `demo/Blackholio/client-unity/Packages/packages-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/demo/Blackholio/client-unity/Packages/packages-lock.json)","tokens":300,"sizeBytes":235},{"name":"Settings.json","path":"demo/Blackholio/client-unity/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/demo/Blackholio/client-unity/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json","title":"Com.unity.testtools.codecoverage Skill","category":"anthropic-skill","format":"json","content":"# Com.unity.testtools.codecoverage Skill\n\nPath: `demo/Blackholio/client-unity/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/demo/Blackholio/client-unity/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json)","tokens":300,"sizeBytes":347},{"name":"README.md","path":"skills/cli/README.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/cli/README.md","title":"Cli Skill","category":"anthropic-skill","format":"markdown","content":"# Cli Skill\n\nPath: `skills/cli/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/cli/README.md)","tokens":300,"sizeBytes":158},{"name":"SKILL.md","path":"skills/cli/SKILL.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/cli/SKILL.md","title":"cli","category":"anthropic-skill","format":"markdown","content":"---\nname: cli\ndescription: SpacetimeDB CLI reference for initializing projects, building modules, publishing databases, querying data, and managing servers\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: shared\n  language: all\n  cursor_globs: \"**/*\"\n  cursor_always_apply: false\ntriggers:\n  - spacetime init\n  - spacetime build\n  - spacetime publish\n  - spacetime dev\n  - spacetime sql\n  - spacetime call\n  - spacetime logs\n  - spacetime server\n  - spacetime login\n  - spacetime generate\n  - how do I use the CLI\n  - CLI command\n---\n\n# SpacetimeDB CLI\n\nUse this skill when the user needs help with the `spacetime` CLI tool - initializing projects, building modules, publishing databases, querying data, managing servers, or troubleshooting CLI issues.\n\n## Quick Reference\n\n### Project Initialization & Development\n\n```bash\n# Initialize new project\nspacetime init my-project --lang rust|csharp|typescript|cpp\nspacetime init my-project --template <template-id>\n\n# Build module\nspacetime build                    # release build\nspacetime build --debug            # faster iteration, slower runtime\n\n# Dev mode (auto-rebuild, auto-publish, generates bindings)\nspacetime dev\nspacetime dev --client-lang typescript --module-bindings-path ./client/src/module_bindings\n\n# Generate client bindings\nspacetime generate --lang typescript|csharp|rust --out-dir ./bindings --module-path ./server\nspacetime generate --lang unrealcpp --uproject-dir ./MyGame --module-path ./server --unreal-module-name MyGame\n```\n\n### Publishing & Deployment\n\n```bash\n# Publish to Maincloud (default)\nspacetime publish my-database --yes\n\n# Publish to local server\nspacetime publish my-database --server local --yes\n\n# Clear database and republish\nspacetime publish my-database --delete-data=always --yes\n```\n\n### Database Interaction\n\n```bash\n# SQL queries\nspacetime sql my-database \"SELECT * FROM users\"\nspacetime sql my-database --interactive   # REPL mode\n\n# Call reducers (each argument is a separate positional arg)\nspacetime call my-database my_reducer '\"value\"' '123'\n\n# Subscribe to changes\nspacetime subscribe my-database \"SELECT * FROM users\" --num-updates 10\n\n# View logs\nspacetime logs my-database -f              # follow logs\nspacetime logs my-database -n 100          # up to 100 log lines\n\n# Describe schema\n# (without --json, output is human-readable text)\nspacetime describe my-database --json\nspacetime describe my-database tables --json   # also views, reducers, procedures, routes, env, types\nspacetime describe my-database tables users --json\nspacetime describe my-database reducers my_reducer --json\n```\n\n### Database Management\n\n```bash\n# List databases\nspacetime list\n\n# Delete database\nspacetime delete my-database\n\n# Rename database\nspacetime rename <database-identity> --to new-name\n```\n\n### Server Management\n\n```bash\n# List configured servers\nspacetime server list\n\n# Add server\nspacetime server add local --url http://localhost:3000 --default\nspacetime server add myserver --url https://my-spacetime.example.com\n\n# Set default server\nspacetime server set-default local\n\n# Test connectivity\nspacetime server ping local\n\n# Start local instance\nspacetime start\n\n# Clear local data\nspacetime server clear\n```\n\n### Authentication\n\n```bash\n# Login (opens browser)\nspacetime login\n\n# Login with token\nspacetime login --token <token>\n\n# Show login status\nspacetime login show\n\n# Logout\nspacetime logout\n```\n\n## Default Servers\n\n| Name | URL | Description |\n|------|-----|-------------|\n| `maincloud` | `https://maincloud.spacetimedb.com` | Production cloud (default) |\n| `local` | `http://127.0.0.1:3000` | Local development server |\n\n## Common Flags\n\n| Flag | Short | Description |\n|------|-------|-------------|\n| `--server` | `-s` | Target server (nickname, hostname, or URL) |\n| `--yes` | `-y` | Non-interactive mode (skip confirmations) |\n| `--anonymous` | | Use anonymous identity |\n| `--module-path` | `-p` | Path to module project |\n| `--no-config` | | Ignore `spacetime.json` project configuration |\n\n## Troubleshooting\n\n### \"Not logged in\"\n```bash\nspacetime login\n# Or use --anonymous for public operations\n```\n\n### \"Server not responding\"\n```bash\nspacetime server ping <server>\n# For local: ensure spacetime start is running\n```\n\n### \"Schema conflict\"\n```bash\n# Clear data and republish\nspacetime publish my-db --delete-data=always --yes\n```\n\n### \"Build failed\"\n```bash\n# Check Rust/C# toolchain\nrustup show\n# For Rust modules, ensure wasm32-unknown-unknown target\nrustup target add wasm32-unknown-unknown\n```\n\n## Module Languages\n\n**Server-side (modules):** Rust, C#, TypeScript, C++\n**Client SDKs:** TypeScript, C#, Rust, Unreal Engine\n**CLI `generate` targets:** TypeScript, C#, Rust, Unreal C++\n","frontmatter":{"name":"cli","description":"SpacetimeDB CLI reference for initializing projects, building modules, publishing databases, querying data, and managing servers","license":"Apache-2.0","metadata":{"author":"clockworklabs","version":"2.0","role":"shared","language":"all","cursor_globs":"**/*","cursor_always_apply":false},"triggers":["spacetime init","spacetime build","spacetime publish","spacetime dev","spacetime sql","spacetime call","spacetime logs","spacetime server","spacetime login","spacetime generate","how do I use the CLI","CLI command"]},"isInternal":false,"tokens":1214,"sizeBytes":4732},{"name":"README.md","path":"skills/concepts/README.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/concepts/README.md","title":"Concepts Skill","category":"anthropic-skill","format":"markdown","content":"# Concepts Skill\n\nPath: `skills/concepts/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/concepts/README.md)","tokens":300,"sizeBytes":173},{"name":"SKILL.md","path":"skills/concepts/SKILL.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/concepts/SKILL.md","title":"concepts","category":"anthropic-skill","format":"markdown","content":"---\nname: concepts\ndescription: Understand SpacetimeDB architecture and core concepts. Use when learning SpacetimeDB or making architectural decisions.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: shared\n  language: all\n  cursor_globs: \"**/*\"\n  cursor_always_apply: true\n---\n\n# SpacetimeDB Core Concepts\n\nSpacetimeDB is a relational database that is also a server. It lets you upload application logic directly into the database as modules, eliminating the traditional web/game server layer entirely. Rust, C#, and C++ modules compile to WebAssembly, while TypeScript modules run on V8.\n\n---\n\n## Critical Rules\n\n1. **Reducers are transactional.** They do not return data to callers. Use subscriptions to read data.\n2. **Reducers must be deterministic.** Do not use filesystem, network, external clocks, or external random sources in reducers. Use the reducer context (`ctx`) for SpacetimeDB-provided timestamp and deterministic random values.\n3. **Read data via tables/subscriptions**, not reducer return values. Clients get data through subscribed queries.\n4. **Auto-increment IDs are not sequential.** Gaps are normal, do not use for ordering. Use timestamps or explicit sequence columns.\n5. **`ctx.sender` is the authenticated principal.** Never trust identity passed as arguments.\n\n---\n\n## Feature Implementation Checklist\n\n1. **Backend:** Define table(s) to store the data\n2. **Backend:** Define reducer(s) to mutate the data\n3. **Client:** Subscribe to the table(s)\n4. **Client:** Call the reducer(s) from UI\n5. **Client:** Render the data from the table(s)\n\n---\n\n## Debugging Checklist\n\n1. Is SpacetimeDB server running? (`spacetime start`)\n2. Is the module published? (`spacetime publish`)\n3. Are client bindings generated? (`spacetime generate`)\n4. Check server logs for errors (`spacetime logs <db-name>`)\n5. Is the reducer actually being called from the client?\n\n---\n\n## Tables\n\n- **Private tables** (default): Only accessible by reducers and the database owner.\n- **Public tables**: Exposed for client read access through subscriptions. Writes still require reducers.\n\nOrganize data by access pattern, not by entity:\n\n```\nPlayer          PlayerState         PlayerStats\nid         <--  player_id           player_id\nname            position_x          total_kills\n                position_y          total_deaths\n                velocity_x          play_time\n```\n\n## Reducers\n\nReducers are transactional functions that modify database state. They run atomically, cannot interact with the outside world, and do not return data to callers. See the language-specific server skills for syntax.\n\n## Event Tables\n\nEvent tables broadcast reducer-specific data to clients. Rows are never stored in the client cache (`count()` returns 0, `iter()` yields nothing); only `onInsert` callbacks fire.\n\n## Subscriptions\n\nSubscriptions replicate database rows to clients in real-time.\n\n1. **Subscribe**: Register SQL queries describing needed data\n2. **Receive initial data**: All matching rows are sent immediately\n3. **Receive updates**: Real-time updates when subscribed rows change\n4. **React to changes**: Use callbacks (`onInsert`, `onDelete`, `onUpdate`)\n\nBest practices:\n- Group subscriptions by lifetime\n- Subscribe before unsubscribing when updating subscriptions\n- Avoid overlapping queries\n- Use indexes for efficient queries\n\n## Modules\n\nModules contain application logic that runs inside the database.\n\n- **Tables**: Define the data schema\n- **Reducers**: Define callable functions that modify state\n- **Event Tables**: Broadcast reducer-specific data to clients\n- **Views**: Read-only functions that expose computed subsets of data to clients\n- **Procedures**: (Unstable) Functions that can have side effects (HTTP requests, `ctx.withTx`)\n\nServer-side modules can be written in: Rust, C#, TypeScript, C++\n\nLifecycle: Write → Compile → Publish (`spacetime publish`) → Hot-swap (republish without disconnecting clients)\n\n## Identity\n\n- **Identity**: A long-lived, globally unique identifier for a user.\n- **ConnectionId**: Identifies a specific client connection.\n- Always use `ctx.sender` / `ctx.Sender` / `ctx.sender()` for authorization.\n\nSpacetimeDB works with many OIDC providers, including SpacetimeAuth (built-in), Auth0, Clerk, Keycloak, Google, and GitHub.\n","frontmatter":{"name":"concepts","description":"Understand SpacetimeDB architecture and core concepts. Use when learning SpacetimeDB or making architectural decisions.","license":"Apache-2.0","metadata":{"author":"clockworklabs","version":"2.0","role":"shared","language":"all","cursor_globs":"**/*","cursor_always_apply":true}},"isInternal":false,"tokens":941,"sizeBytes":4315},{"name":"README.md","path":"skills/cpp-server/README.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/cpp-server/README.md","title":"Cpp-server Skill","category":"anthropic-skill","format":"markdown","content":"# Cpp-server Skill\n\nPath: `skills/cpp-server/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/cpp-server/README.md)","tokens":300,"sizeBytes":179},{"name":"SKILL.md","path":"skills/cpp-server/SKILL.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/cpp-server/SKILL.md","title":"cpp-server","category":"anthropic-skill","format":"markdown","content":"---\nname: cpp-server\ndescription: SpacetimeDB C++ server module SDK reference. Use when writing tables, reducers, or module logic in C++.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: server\n  language: cpp\n  cursor_globs: \"**/*.cpp,**/*.h,**/*.hpp\"\n  cursor_always_apply: true\n---\n\n# SpacetimeDB C++ SDK Reference\n\n## Imports\n\n```cpp\n#include <spacetimedb.h>\nusing namespace SpacetimeDB;\n```\n\n## Tables\n\nRegister structs with macros, then declare as tables:\n\n```cpp\nstruct Entity {\n    uint64_t id;\n    Identity owner;\n    std::string name;\n    bool active;\n};\nSPACETIMEDB_STRUCT(Entity, id, owner, name, active)\nSPACETIMEDB_TABLE(Entity, entity, Public)\nFIELD_PrimaryKeyAutoInc(entity, id)\nFIELD_Index(entity, name)\n```\n\nOptions:\n- `SPACETIMEDB_TABLE(Type, accessor, Public|Private)`: regular table\n- `SPACETIMEDB_TABLE(Type, accessor, Public|Private, true)`: event table\n\nField constraints:\n- `FIELD_PrimaryKey(accessor, field)`: primary key\n- `FIELD_PrimaryKeyAutoInc(accessor, field)`: primary key with auto-increment (use 0 on insert)\n- `FIELD_Unique(accessor, field)`: unique constraint\n- `FIELD_Index(accessor, field)`: btree index (enables `.filter()`)\n\n## Column Types\n\n| C++ type | Notes |\n|----------|-------|\n| `uint8_t` / `uint16_t` / `uint32_t` / `uint64_t` | unsigned integers |\n| `SpacetimeDB::u128` / `SpacetimeDB::u256` | large unsigned integers |\n| `int8_t` / `int16_t` / `int32_t` / `int64_t` | signed integers |\n| `SpacetimeDB::i128` / `SpacetimeDB::i256` | large signed integers |\n| `float` / `double` | floats |\n| `bool` | boolean |\n| `std::string` | text |\n| `std::vector<T>` | list/array |\n| `std::optional<T>` | nullable column |\n| `Identity` | user identity |\n| `ConnectionId` | connection handle |\n| `Timestamp` | server timestamp (microseconds since epoch) |\n| `TimeDuration` | duration in microseconds |\n| `ScheduleAt` | for scheduled tables |\n\n## Indexes\n\n```cpp\n// Single-column:\nFIELD_Index(entity, name)\n// Access: ctx.db[entity_name].filter(\"Alice\")\n\n// Multi-column:\nFIELD_NamedMultiColumnIndex(score, by_player_and_level, player_id, level)\n```\n\nRange queries (included by `spacetimedb.h`; include `<spacetimedb/range_queries.h>` directly only when not using the umbrella header):\n```cpp\nctx.db[user_age].filter(range_inclusive(uint8_t(18), uint8_t(65)));\nctx.db[user_age].filter(range_from(uint8_t(18)));\n```\n\n## Reducers\n\nAll reducers return `ReducerResult`. Use `Ok()` or `Err(message)`:\n\n```cpp\nSPACETIMEDB_REDUCER(create_entity, ReducerContext ctx, std::string name) {\n    if (name.empty()) {\n        return Err(\"Name cannot be empty\");\n    }\n    ctx.db[entity].insert(Entity{0, ctx.sender(), name, true});\n    return Ok();\n}\n```\n\n## DB Operations\n\n```cpp\nctx.db[entity].insert(Entity{0, owner, \"Sample\", true});     // Insert (0 for autoInc)\nctx.db[entity_id].find(entityId);                             // Find by PK → std::optional\nctx.db[entity_identity].find(ctx.sender());                   // Find by unique column\nctx.db[entity_name].filter(\"Alice\");                          // Filter by index → iterable\nctx.db[entity];                                               // All rows → iterable (range-for)\nctx.db[entity].count();                                       // Count rows\n\n// Update: find, mutate, update\nif (auto e = ctx.db[entity_id].find(entityId)) {\n    e->name = \"New Name\";\n    ctx.db[entity_id].update(*e);\n}\n\n// Delete by primary key\nctx.db[entity_id].delete_by_key(entityId);\n```\n\nNote: Bracket notation `ctx.db[accessor]` is used for all table access. The accessor name comes from `SPACETIMEDB_TABLE` and `FIELD_*` macros.\n\n## Lifecycle Hooks\n\n```cpp\nSPACETIMEDB_INIT(init, ReducerContext ctx) {\n    LOG_INFO(\"Database initializing...\");\n    return Ok();\n}\n\nSPACETIMEDB_CLIENT_CONNECTED(on_connect, ReducerContext ctx) {\n    LOG_INFO(\"Connected: \" + ctx.sender().to_string());\n    return Ok();\n}\n\nSPACETIMEDB_CLIENT_DISCONNECTED(on_disconnect, ReducerContext ctx) {\n    LOG_INFO(\"Disconnected: \" + ctx.sender().to_string());\n    return Ok();\n}\n```\n\n## Authentication & Timestamps\n\n```cpp\n// Auth: ctx.sender() is the caller's Identity\nif (row.owner != ctx.sender()) {\n    return Err(\"unauthorized\");\n}\n\n// Server timestamps\nctx.db[item].insert(Item{0, ctx.sender(), ctx.timestamp});\n\n// Timestamp arithmetic\nTimestamp later = ctx.timestamp + TimeDuration::from_seconds(10);\n```\n\n## Reducer Context\n\n`ReducerContext` is the single source of sender identity, deterministic time, and deterministic randomness inside a reducer. Always go through `ctx` for these. Standard library clocks and random sources are not available in modules.\n\n```cpp\nctx.db[table]          // Table access (bracket notation)\nctx.sender()           // Caller's Identity\nctx.timestamp          // Invocation timestamp\nctx.connection_id      // std::optional<ConnectionId>\nctx.identity()         // Module's own identity\nctx.rng()              // Deterministic RNG\nctx.sender_auth()      // AuthCtx with JWT claims\n```\n\n## Scheduled Tables\n\n```cpp\nstruct Reminder {\n    uint64_t scheduled_id;\n    ScheduleAt scheduled_at;\n    std::string message;\n};\nSPACETIMEDB_STRUCT(Reminder, scheduled_id, scheduled_at, message)\nSPACETIMEDB_TABLE(Reminder, reminder, Public)\nFIELD_PrimaryKeyAutoInc(reminder, scheduled_id)\nSPACETIMEDB_SCHEDULE(reminder, 1, send_reminder)  // 1 = scheduled_at field index (0-based)\n\nSPACETIMEDB_REDUCER(send_reminder, ReducerContext ctx, Reminder arg) {\n    LOG_INFO(\"Reminder: \" + arg.message);\n    return Ok();\n}\n\n// One-time: fires at a specific time\nctx.db[reminder].insert(Reminder{0, ScheduleAt::time(ctx.timestamp + TimeDuration::from_seconds(10)), \"msg\"});\n// Repeating: fires on an interval\nctx.db[reminder].insert(Reminder{0, ScheduleAt::interval(TimeDuration::from_seconds(5)), \"msg\"});\n```\n\n## Custom Types\n\n```cpp\n// Struct (product type):\nstruct Point { float x; float y; };\nSPACETIMEDB_STRUCT(Point, x, y)\n\n// Enum (sum type):\nSPACETIMEDB_UNIT_TYPE(Active)\nSPACETIMEDB_UNIT_TYPE(Inactive)\nSPACETIMEDB_ENUM(PlayerStatus,\n    (Active, Active),\n    (Inactive, Inactive),\n    (Suspended, std::string)\n)\n```\n\n## Logging\n\n```cpp\nLOG_INFO(\"Message: \" + msg);\nLOG_WARN(\"Warning: \" + msg);\nLOG_ERROR(\"Error: \" + msg);\nLOG_DEBUG(\"Debug: \" + msg);\nLOG_PANIC(\"Fatal: \" + msg);   // terminates reducer\n```\n\n## Complete Example\n\n```cpp\n#include <spacetimedb.h>\nusing namespace SpacetimeDB;\n\nstruct Entity {\n    Identity identity;\n    std::string name;\n    bool active;\n};\nSPACETIMEDB_STRUCT(Entity, identity, name, active)\nSPACETIMEDB_TABLE(Entity, entity, Public)\nFIELD_PrimaryKey(entity, identity)\n\nstruct Record {\n    uint64_t id;\n    Identity owner;\n    uint32_t value;\n    Timestamp created_at;\n};\nSPACETIMEDB_STRUCT(Record, id, owner, value, created_at)\nSPACETIMEDB_TABLE(Record, record, Public)\nFIELD_PrimaryKeyAutoInc(record, id)\n\nSPACETIMEDB_CLIENT_CONNECTED(on_connect, ReducerContext ctx) {\n    if (auto existing = ctx.db[entity_identity].find(ctx.sender())) {\n        existing->active = true;\n        ctx.db[entity_identity].update(*existing);\n    }\n    return Ok();\n}\n\nSPACETIMEDB_CLIENT_DISCONNECTED(on_disconnect, ReducerContext ctx) {\n    if (auto existing = ctx.db[entity_identity].find(ctx.sender())) {\n        existing->active = false;\n        ctx.db[entity_identity].update(*existing);\n    }\n    return Ok();\n}\n\nSPACETIMEDB_REDUCER(create_entity, ReducerContext ctx, std::string name) {\n    if (ctx.db[entity_identity].find(ctx.sender())) {\n        return Err(\"already exists\");\n    }\n    ctx.db[entity].insert(Entity{ctx.sender(), name, true});\n    return Ok();\n}\n\nSPACETIMEDB_REDUCER(add_record, ReducerContext ctx, uint32_t value) {\n    if (!ctx.db[entity_identity].find(ctx.sender())) {\n        return Err(\"not found\");\n    }\n    ctx.db[record].insert(Record{0, ctx.sender(), value, ctx.timestamp});\n    return Ok();\n}\n```\n","frontmatter":{"name":"cpp-server","description":"SpacetimeDB C++ server module SDK reference. Use when writing tables, reducers, or module logic in C++.","license":"Apache-2.0","metadata":{"author":"clockworklabs","version":"2.0","role":"server","language":"cpp","cursor_globs":"**/*.cpp,**/*.h,**/*.hpp","cursor_always_apply":true}},"isInternal":false,"tokens":2094,"sizeBytes":7844},{"name":"README.md","path":"skills/csharp-client/README.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/csharp-client/README.md","title":"Csharp-client Skill","category":"anthropic-skill","format":"markdown","content":"# Csharp-client Skill\n\nPath: `skills/csharp-client/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/csharp-client/README.md)","tokens":300,"sizeBytes":188},{"name":"SKILL.md","path":"skills/csharp-client/SKILL.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/csharp-client/SKILL.md","title":"csharp-client","category":"anthropic-skill","format":"markdown","content":"---\nname: csharp-client\ndescription: SpacetimeDB C#/.NET client SDK reference. Use when building C# clients that connect to SpacetimeDB (console, desktop, or any .NET app).\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: client\n  language: csharp\n  cursor_globs: \"**/*.cs\"\n  cursor_always_apply: true\n---\n\n# SpacetimeDB C# Client\n\nInstall: `dotnet add package SpacetimeDB.ClientSDK`\n\nGenerated bindings convert snake_case names to PascalCase, including row fields: a server column `trip_id` is `TripId` on client rows.\n\n## Connection\n\n```csharp\nusing SpacetimeDB;\nusing SpacetimeDB.Types;\n\nvar conn = DbConnection.Builder()\n    .WithUri(\"http://localhost:3000\")\n    .WithDatabaseName(\"my-database\")\n    .WithToken(savedToken)\n    .WithCompression(Compression.Brotli) // optional; this is the default\n    .OnConnect((conn, identity, token) =>\n    {\n        Console.WriteLine($\"Connected as: {identity}\");\n        // Save token for reconnection\n        File.WriteAllText(\"auth_token.txt\", token);\n\n        conn.SubscriptionBuilder()\n            .OnApplied(OnSubscriptionApplied)\n            .SubscribeToAllTables();\n    })\n    .OnConnectError(err => Console.Error.WriteLine($\"Connection failed: {err}\"))\n    .OnDisconnect((conn, err) =>\n    {\n        if (err != null) Console.Error.WriteLine($\"Disconnected: {err}\");\n    })\n    .Build();\n```\n\nCompression options are `Compression.Brotli`, `Compression.Gzip`, and `Compression.None`. The SDK uses Brotli when `WithCompression` is omitted.\n\n## Automatic Reconnect and Token Refresh\n\nAutomatic reconnect is opt-in: add `.WithAutomaticReconnect()` to the builder. Initial connection failures do not retry. After an established connection is lost, the SDK retries with exponential backoff and jitter from `MinDelay` (default 1 s) up to `MaxDelay` (default 30 s); tune them with `.WithAutomaticReconnect(new AutomaticReconnectOptions { MinDelay = ..., MaxDelay = ... })`. Values below the 500 ms and 1 s floors are raised with a warning, so that retrying clients cannot overwhelm the database. `Disconnect()` permanently stops recovery.\n\nKeep calling `FrameTick()` while `IsActive` is false. `IsReconnecting` is true while recovering before the next handshake. Use `.OnDisconnect((conn, error, next) => ...)` and `.OnConnectError((error, next) => ...)` to inspect `NextReconnect?`: a non-null value provides `Attempt` and `Delay`; null means no retry is scheduled. Existing callback overloads still work.\n\n`OnConnect` runs on every successful reconnect, so create the subscription in the example above only on the first connection, or move it after `Build()`. Register row callbacks once as well. The same connection, identity, table handles, and subscriptions survive; each attempt gets a fresh `ConnectionId`. Cached rows stay readable but stale during outages. The SDK replays subscriptions in one batch and emits only net row changes. Subscription `OnApplied` runs again after replay; use it to mark data ready, not for repeated one-time setup.\n\nFor expiring credentials, combine `.WithToken(initialToken)` with `.WithTokenProvider(() => RefreshTokenAsync())`, where your provider returns `Task<string>` for the same identity. The provider is not called for the initial connection. Before retries, it is called when remaining validity is at most 30 seconds or 5% of the token lifetime, whichever is greater, when expiry cannot be read, or after a reused token is rejected. Provider failures retry; rejection of a freshly provided token is terminal. No periodic refresh runs while connected. Disconnecting ignores a pending provider result but does not cancel the provider's own work.\n\nCalls made while disconnected fail immediately. Pending reducer calls receive `Status.UnknownResult`; pending procedures and one-off queries fail with `UnknownResultException`. These calls may already have executed and are never replayed. Regenerate bindings so unhandled unknown reducer outcomes reach `OnUnhandledReducerError`.\n\n## Event Loop (Critical)\n\n**`FrameTick()` must be called in your main loop.** The SDK queues all network messages and only processes them when you call `FrameTick()`. Without it, no callbacks fire.\n\n```csharp\nwhile (running)\n{\n    conn.FrameTick();\n    // Your application logic...\n    Thread.Sleep(16); // ~60fps\n}\n```\n\n**Thread safety**: `FrameTick()` processes messages on the calling thread. Do NOT call it from a background thread. Do NOT access `conn.Db` from background threads.\n\n## Subscriptions\n\n```csharp\n// Subscribe to all tables\nconn.SubscriptionBuilder()\n    .OnApplied(ctx => Console.WriteLine(\"Subscription ready\"))\n    .SubscribeToAllTables();\n\n// Subscribe with typed query builder (recommended)\nconn.SubscriptionBuilder()\n    .OnApplied(OnSubscriptionApplied)\n    .AddQuery(q => q.From.Player().Where(p => p.Level.Gte(5u)))\n    .AddQuery(q => q.From.GameState())\n    .Subscribe();\n\n// Or with raw SQL strings\nconn.SubscriptionBuilder()\n    .OnApplied(OnSubscriptionApplied)\n    .Subscribe(new[] {\n        \"SELECT * FROM player WHERE level >= 5\",\n        \"SELECT * FROM game_state\"\n    });\n```\n\n## Row Callbacks\n\n```csharp\nconn.Db.Player.OnInsert += (EventContext ctx, Player player) =>\n{\n    Console.WriteLine($\"Player joined: {player.Name}\");\n};\n\nconn.Db.Player.OnDelete += (EventContext ctx, Player player) =>\n{\n    Console.WriteLine($\"Player left: {player.Name}\");\n};\n\nconn.Db.Player.OnUpdate += (EventContext ctx, Player oldPlayer, Player newPlayer) =>\n{\n    Console.WriteLine($\"Player updated: {newPlayer.Name}\");\n};\n```\n\n## Reading the Client Cache\n\n```csharp\n// Find by primary key\nif (conn.Db.Player.Id.Find(playerId) is Player player)\n{\n    Console.WriteLine($\"Player: {player.Name}\");\n}\n\n// Find by unique column\nvar me = conn.Db.Player.Identity.Find(myIdentity);\n\n// Filter by indexed column\nforeach (var p in conn.Db.Player.Level.Filter(5))\n{\n    Console.WriteLine($\"Level 5: {p.Name}\");\n}\n\n// Iterate all rows\nforeach (var p in conn.Db.Player.Iter())\n{\n    Console.WriteLine(p.Name);\n}\n\n// Count\nint total = conn.Db.Player.Count;\n```\n\n## Calling Reducers\n\n```csharp\nconn.Reducers.CreatePlayer(\"Alice\");\nconn.Reducers.MovePlayer(10.0f, 20.0f);\nconn.Reducers.SendMessage(\"Hello!\");\n```\n\nReducer calls return `void`; observe failures via the reducer callbacks below (`Status.Failed`).\n\n## Reducer Callbacks\n\n```csharp\nconn.Reducers.OnSendMessage += (ReducerEventContext ctx, string text) =>\n{\n    if (ctx.Event.Status is Status.Committed)\n        Console.WriteLine($\"Message sent: {text}\");\n    else if (ctx.Event.Status is Status.Failed(var reason))\n        Console.Error.WriteLine($\"Send failed: {reason}\");\n    else if (ctx.Event.Status is Status.UnknownResult)\n        Console.Error.WriteLine(\"Connection lost before the result arrived; the message may have been sent.\");\n};\n```\n\n## Identity\n\n```csharp\n// Identities from OnConnect callback\nIdentity myIdentity;\n\n// Compare identities\nif (player.Owner == myIdentity) { /* it's me */ }\n\n// Display\nConsole.WriteLine($\"Identity: {identity}\");\n```\n","frontmatter":{"name":"csharp-client","description":"SpacetimeDB C#/.NET client SDK reference. Use when building C# clients that connect to SpacetimeDB (console, desktop, or any .NET app).","license":"Apache-2.0","metadata":{"author":"clockworklabs","version":"2.0","role":"client","language":"csharp","cursor_globs":"**/*.cs","cursor_always_apply":true}},"isInternal":false,"tokens":1605,"sizeBytes":7021},{"name":"README.md","path":"skills/csharp-server/README.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/csharp-server/README.md","title":"Csharp-server Skill","category":"anthropic-skill","format":"markdown","content":"# Csharp-server Skill\n\nPath: `skills/csharp-server/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/csharp-server/README.md)","tokens":300,"sizeBytes":188},{"name":"SKILL.md","path":"skills/csharp-server/SKILL.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/csharp-server/SKILL.md","title":"csharp-server","category":"anthropic-skill","format":"markdown","content":"---\nname: csharp-server\ndescription: SpacetimeDB C# server module SDK reference. Use when writing tables, reducers, or module logic in C#.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: server\n  language: csharp\n  cursor_globs: \"**/*.cs\"\n  cursor_always_apply: true\n---\n\n# SpacetimeDB C# SDK Reference\n\n## Module Structure\n\nReducers are static methods in a `static partial class`; tables are `public partial struct`s. This reference keeps everything in one `public static partial class Module`, which needs only `using SpacetimeDB;`:\n\nMethods exported through SpacetimeDB attributes, including reducers, procedures, views, HTTP handlers, and routers, must be `public static`; generated bindings invoke them from another class.\n\n```csharp\nusing SpacetimeDB;\n\npublic static partial class Module\n{\n    [SpacetimeDB.Table(Accessor = \"ScoreRecord\", Public = true)]\n    public partial struct ScoreRecord\n    {\n        [PrimaryKey]\n        [AutoInc]\n        public ulong Id;\n        public Identity Owner;\n        public uint Value;\n    }\n\n    [SpacetimeDB.Reducer]\n    public static void AddRecord(ReducerContext ctx, uint value)\n    {\n        ctx.Db.ScoreRecord.Insert(new ScoreRecord { Id = 0, Owner = ctx.Sender, Value = value });\n    }\n}\n```\n\n## Tables\n\n`[SpacetimeDB.Table(...)]` on a `public partial struct`. `Accessor` should be PascalCase:\n\n```csharp\n[SpacetimeDB.Table(Accessor = \"Entity\", Public = true)]\npublic partial struct Entity\n{\n    [PrimaryKey]\n    [AutoInc]\n    public ulong Id;\n    [SpacetimeDB.Index.BTree]\n    public Identity Owner;\n    public string Name;\n    [SpacetimeDB.Index.BTree]\n    public bool Active;\n}\n```\n\nOptions: `Accessor = \"PascalCase\"` (recommended), `Public = true`, `Scheduled = nameof(ReducerFn)`, `ScheduledAt = nameof(field)`, `Event = true`\n\n`ctx.Db` accessors use the `Accessor` name: `ctx.Db.Entity`, `ctx.Db.ScoreRecord`.\n\n## Column Types\n\n| C# type | Notes |\n|---------|-------|\n| `byte` / `ushort` / `uint` / `ulong` | unsigned integers |\n| `U128` / `U256` | large unsigned integers (SpacetimeDB types) |\n| `sbyte` / `short` / `int` / `long` | signed integers |\n| `I128` / `I256` | large signed integers (SpacetimeDB types) |\n| `float` / `double` | floats |\n| `bool` | boolean |\n| `string` | text |\n| `List<T>` | list/array |\n| `Identity` | user identity |\n| `ConnectionId` | connection handle |\n| `Timestamp` | server timestamp (microseconds since epoch) |\n| `TimeDuration` | duration in microseconds |\n| `Uuid` | UUID |\n\nOptional columns: nullable types (`string? Nickname`, `uint? HighScore`)\n\n## Column Attributes\n\nThe complete set of column attributes:\n\n```csharp\n[PrimaryKey]          // primary key\n[AutoInc]             // auto-increment (use 0 as placeholder on insert)\n[Unique]              // unique constraint; indexes the column, enables .Find()\n[SpacetimeDB.Index.BTree]  // btree index (enables .Filter() on this column)\n[Default(true)]       // migration-safe default for a newly appended field\n```\n\nDefaults support compatible addition of a newly appended field. Do not apply `[Default(...)]` to primary-key, unique, or auto-increment fields.\n\n## Indexes\n\nWrite the index attribute fully qualified: `[SpacetimeDB.Index.BTree]`. Prefer inline for single-column; multi-column uses struct-level:\n\n```csharp\n// Inline (preferred for single-column):\n[SpacetimeDB.Index.BTree]\npublic ulong AuthorId;\n// Access: ctx.Db.Post.AuthorId.Filter(authorId)\n\n// Multi-column (struct-level):\n[SpacetimeDB.Table(Accessor = \"Membership\")]\n[SpacetimeDB.Index.BTree(Accessor = \"ByGroupUser\", Columns = new[] { nameof(GroupId), nameof(UserId) })]\npublic partial struct Membership { public ulong GroupId; public Identity UserId; ... }\n```\n\nPrefer a multi-column index over filtering by one column and looping.\n\n## Reducers\n\n```csharp\n[SpacetimeDB.Reducer]\npublic static void CreateEntity(ReducerContext ctx, string name, int age)\n{\n    ctx.Db.Entity.Insert(new Entity { Owner = ctx.Sender, Name = name, Age = age, Active = true });\n}\n\n// No arguments:\n[SpacetimeDB.Reducer]\npublic static void DoReset(ReducerContext ctx) { ... }\n```\n\n## DB Operations\n\n```csharp\nvar row = ctx.Db.Entity.Insert(new Entity { Name = \"Sample\" });   // Insert; returns the row with AutoInc fields assigned\nctx.Db.Entity.Id.Find(entityId);                                  // Find by PK → Entity? (nullable)\nctx.Db.Entity.Identity.Find(ctx.Sender);                          // Find by unique column → Entity?\nif (ctx.Db.Entity.Id.Find(entityId) is { } entity) { ... }        // unwrap Entity? before member access\nctx.Db.Item.AuthorId.Filter(authorId);                            // Filter by index → IEnumerable<Item>\nctx.Db.Entity.Iter();                                             // All rows → IEnumerable<Entity>\nctx.Db.Entity.Count;                                              // Count rows\nctx.Db.Entity.Id.Update(existing with { Name = newName });        // Update by PK\nctx.Db.Entity.Id.Delete(entityId);                                // Delete by PK\n```\n\nNote: Filter/Iter return enumerables. Use `.ToList()` if you need to sort or mutate.\n\nThe pattern is `ctx.Db.{Accessor}.{ColumnName}.{Method}(value)` for all indexed column operations.\n\n## Lifecycle Hooks\n\n```csharp\n[SpacetimeDB.Reducer(ReducerKind.Init)]\npublic static void OnInit(ReducerContext ctx) { ... }\n\n[SpacetimeDB.Reducer(ReducerKind.ClientConnected)]\npublic static void OnConnect(ReducerContext ctx) { ... }\n\n[SpacetimeDB.Reducer(ReducerKind.ClientDisconnected)]\npublic static void OnDisconnect(ReducerContext ctx) { ... }\n```\n\n`ctx.ConnectionId` is `ConnectionId?`, including in connection lifecycle reducers. Check or unwrap it before storing it in a non-nullable column or passing it to an index accessor.\n\n## Views\n\n```csharp\n// Anonymous view (same result for all clients):\n[SpacetimeDB.View(Accessor = \"ActiveUsers\", Public = true)]\npublic static List<Entity> ActiveUsers(AnonymousViewContext ctx)\n{\n    return ctx.Db.Entity.Active.Filter(true).ToList();\n}\n\n// Per-user view:\n[SpacetimeDB.View(Accessor = \"MyEntities\", Public = true)]\npublic static List<Entity> MyEntities(ViewContext ctx)\n{\n    return ctx.Db.Entity.Owner.Filter(ctx.Sender).ToList();\n}\n```\n\nView contexts expose read-only table handles. These support `Count` plus `Find`/`Filter` on declared indexes, but not full-table `Iter()`. Start procedural view traversal from an indexed lookup or filter.\n\nQuery-builder views use `ViewContext`, `ctx.From`, and return `IQuery<T>` directly. Use `Where` for predicates and `RightSemijoin` when the result should contain right-side rows that have a matching left-side row:\n\n```csharp\nctx.From.Article().Where(article => article.Published.Eq(true));\nctx.From.Subscription().RightSemijoin(\n    ctx.From.Account(),\n    (subscription, account) => subscription.AccountId.Eq(account.Id)\n);\n```\n\nDeclare a procedural view primary key in its attribute: `[SpacetimeDB.View(Accessor = \"CatalogEntry\", Public = true, PrimaryKey = nameof(CatalogRow.Sku))]`.\n\nProcedural-view primary keys are explicit schema metadata. Add one only when the view itself is required to expose a primary key; a source table's primary key is not inherited by the view.\n\nInclusive btree ranges use tuples, for example `ctx.Db.Shipment.DeliverBy.Filter((new Timestamp(1_000), new Timestamp(2_000)))`.\n\n## Client Visibility Filters\n\n```csharp\n[ClientVisibilityFilter]\npublic static readonly Filter PrivateNoteFilter = new Filter.Sql(\n    \"SELECT * FROM OwnedRow WHERE Owner = :sender\"\n);\n```\n\n## Reducer Context API\n\n`ReducerContext` (`ctx`) is the only source of sender identity, time, and randomness; stdlib clocks and RNG are unavailable in modules.\n\n```csharp\n// Auth: ctx.Sender is the caller's Identity\nif (row.Owner != ctx.Sender)\n    throw new Exception(\"unauthorized\");\n\n// Server timestamp (deterministic per reducer call)\nctx.Db.Item.Insert(new Item { CreatedAt = ctx.Timestamp, .. });\n\n// Timestamp arithmetic\nvar expiry = ctx.Timestamp + new TimeDuration(delayMicros);\n\n// Deterministic RNG\nint roll = ctx.Rng.Next(1, 7);          // [1, 7): inclusive 1, exclusive 7\ndouble f = ctx.Rng.NextDouble();        // [0.0, 1.0)\n\n// Timestamp → milliseconds since epoch\ntimestamp.MicrosecondsSinceUnixEpoch / 1000\n```\n\n## Scheduled Tables\n\nDeclare the scheduled table and its reducer in the same `Module` class so `nameof(...)` resolves:\n\n```csharp\n[SpacetimeDB.Table(\n    Accessor = \"TickTimer\",\n    Scheduled = nameof(Tick),\n    ScheduledAt = nameof(ScheduledAt),\n    Public = true\n)]\npublic partial struct TickTimer\n{\n    [PrimaryKey]\n    [AutoInc]\n    public ulong ScheduledId;\n    public ScheduleAt ScheduledAt;\n}\n\n[SpacetimeDB.Reducer]\npublic static void Tick(ReducerContext ctx, TickTimer timer)\n{\n    // timer row is auto-deleted after this reducer runs\n}\n\n// One-time: fires once at a specific time\nvar at = new ScheduleAt.Time(ctx.Timestamp + new TimeDuration(10_000_000));\n// Repeating: fires on an interval\nvar at = new ScheduleAt.Interval(TimeSpan.FromSeconds(5));\n\nctx.Db.TickTimer.Insert(new TickTimer { ScheduledId = 0, ScheduledAt = at });\n```\n\nScheduled reducer callbacks use the ordinary `[SpacetimeDB.Reducer]` attribute. There is no `ReducerKind.Scheduled`; the table's `Scheduled` option associates the callback.\n\nTo construct a `ConnectionId` from a 128-bit numeric representation, encode it as exactly 16 little-endian bytes and call `ConnectionId.From(bytes)`. The result is nullable and must be checked before use.\n\n## Procedures and HTTP\n\nProcedures are unstable APIs, so modules using them should include `#pragma warning disable STDB_UNSTABLE`. They receive `ProcedureContext` and may return `[SpacetimeDB.Type]` values:\n\n```csharp\n[SpacetimeDB.Type]\npublic partial struct ResultValue { public string Value; }\n\n[SpacetimeDB.Procedure]\npublic static ResultValue Inspect(ProcedureContext ctx, string input) =>\n    new() { Value = input };\n```\n\nOutbound HTTP is available through `ctx.Http`; handle its success/error result before using the response. Open short database transactions with `ctx.WithTx`. Perform network I/O before opening the transaction, and keep only database work inside its callback.\n\n```csharp\nvar result = ctx.Http.Get(uri);\nvar text = result.Match(\n    response => response.Body.ToStringUtf8Lossy(),\n    error => throw new Exception(error.Message)\n);\n\nctx.WithTx(tx =>\n{\n    tx.Db.ScoreRecord.Insert(new ScoreRecord { Id = 0, Owner = ctx.Sender, Value = 1 });\n    return 0;\n});\n```\n\n`WithTx` is generic: its callback must return a value (use `return 0;` when no result is needed). The callback's generated `tx.Db` exposes module table accessors; `ProcedureContext` and `HandlerContext` do not expose tables directly.\n\nFor non-GET requests, construct and send an `HttpRequest` directly:\n\n```csharp\nvar result = ctx.Http.Send(new HttpRequest\n{\n    Uri = uri,\n    Method = SpacetimeDB.HttpMethod.Post,\n    Headers = new() { new HttpHeader(\"content-type\", \"text/plain\") },\n    Body = HttpBody.FromString(payload),\n});\n```\n\n`HttpResponse.StatusCode` is `ushort`. HTTP headers are `HttpHeader` values, not tuples, and each header's `Value` is `byte[]`; decode text values with `System.Text.Encoding.UTF8.GetString(header.Value)`. Treat bodies as bytes: use `HttpBody.FromString(...)` to create text, `new HttpBody(bytes)` to supply raw bytes, `ToBytes()` to read raw bytes, and `ToStringUtf8Lossy()` to read text. There is no `HttpBody.FromBytes`, and `ToString()` does not return body contents. Qualify `SpacetimeDB.HttpMethod` when .NET's implicit `System.Net.Http` imports could make the name ambiguous.\n\nScheduled procedures use the ordinary scheduled-table shape. Its `Scheduled` name refers to a `[SpacetimeDB.Procedure]` method taking `ProcedureContext` plus the scheduled row, and database access inside that procedure goes through `ctx.WithTx`.\n\nInbound HTTP uses handler attributes and one router. Handler database access also goes through `ctx.WithTx`:\n\n```csharp\n[SpacetimeDB.HttpHandler]\npublic static HttpResponse Health(HandlerContext ctx, HttpRequest request) => new(\n    200, HttpVersion.Http11, new(), HttpBody.FromString(\"ok\")\n);\n\n[SpacetimeDB.HttpRouter]\npublic static Router Routes() => SpacetimeDB.Router.New().Get(\"/health\", Handlers.Health);\n```\n\n`Handlers` is generated from methods marked `[SpacetimeDB.HttpHandler]`; do not declare it yourself. Reference an attributed method in a router as `Handlers.MethodName`.\n\n## Custom Types\n\n```csharp\n[SpacetimeDB.Type]\npublic enum Status { Online, Away, Offline }\n\n[SpacetimeDB.Type]\npublic partial struct Point { public float X; public float Y; }\n```\n\nTagged enums (discriminated unions): a `partial record` with empty body and no constructor parameters. Payloads are `[Type] partial struct`s:\n\n```csharp\n[SpacetimeDB.Type]\npublic partial struct Circle { public int Radius; }\n\n[SpacetimeDB.Type]\npublic partial struct Rectangle { public int Width; public int Height; }\n\n[SpacetimeDB.Type]\npublic partial record Shape : SpacetimeDB.TaggedEnum<(Circle Circle, Rectangle Rectangle)> { }\n\n// Construct variants via the generated nested constructors:\nvar a = new Shape.Circle(new Circle { Radius = 10 });\nvar b = new Shape.Rectangle(new Rectangle { Width = 4, Height = 6 });\n```\n","frontmatter":{"name":"csharp-server","description":"SpacetimeDB C# server module SDK reference. Use when writing tables, reducers, or module logic in C#.","license":"Apache-2.0","metadata":{"author":"clockworklabs","version":"2.0","role":"server","language":"csharp","cursor_globs":"**/*.cs","cursor_always_apply":true}},"isInternal":false,"tokens":3171,"sizeBytes":13205},{"name":"README.md","path":"skills/mcp/README.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/mcp/README.md","title":"Mcp Skill","category":"anthropic-skill","format":"markdown","content":"# Mcp Skill\n\nPath: `skills/mcp/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/mcp/README.md)","tokens":300,"sizeBytes":158},{"name":"SKILL.md","path":"skills/mcp/SKILL.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/mcp/SKILL.md","title":"mcp","category":"anthropic-skill","format":"markdown","content":"---\nname: mcp\ndescription: Operate a running SpacetimeDB database through MCP tools rather than the CLI - list databases, read schemas, run SQL, and call reducers. Use when the client exposes spacetimedb MCP tools and the task is to inspect or change data in a live database.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: shared\n  language: all\n  cursor_globs: \"**/*\"\n  cursor_always_apply: false\ntriggers:\n  - inspect the database\n  - query the database\n  - list my databases\n  - read the schema\n  - call a reducer\n  - use the MCP server\n  - spacetimedb MCP\n---\n\n# SpacetimeDB over MCP\n\nA SpacetimeDB host speaks MCP, so an MCP-aware client can operate a live database with tool calls\ninstead of shell commands. If the client exposes `spacetimedb` tools, use them for anything that\nreads or changes a running database.\n\nCheck the tool list before deciding they are missing. The tools are passive: they appear as\n`spacetimedb.list_databases`, `spacetimedb.get_schema`, `spacetimedb.sql`, `spacetimedb.call`, and\n`spacetimedb.ping`, and nothing announces them.\n\n## Which to reach for\n\n| Task | Use |\n| --- | --- |\n| List databases, read a schema, run SQL, call a reducer | **MCP tools** |\n| init, build, publish, generate, start, logs | **`spacetime` CLI** (see the `cli` skill) |\n\nThe MCP tools only operate a database that already exists. They cannot scaffold a project, compile a\nmodule, publish, or generate bindings, so the two are complementary rather than alternatives. Prefer\nthe tools when they are present: they are typed, they return JSON, and the client can gate the\ndestructive ones. When no MCP client is attached, the equivalent CLI commands are correct.\n\n## The tools\n\n| Tool | Arguments | Returns |\n| --- | --- | --- |\n| `list_databases` | none | the databases **you own**, with identity and names |\n| `get_schema` | `database` | tables and reducers as JSON |\n| `sql` | `database`, `sql`, optional `confirmed` | rows as JSON |\n| `call` | `database`, `reducer`, optional `args` (JSON array) | the reducer outcome |\n| `ping` | optional `message` | a health check |\n\n`list_databases` lists only your own databases, so it is empty for an anonymous identity. Start there\nwhen you do not know the database name.\n\n## Two shapes, so read `tools/list` first\n\nA server is either host-wide or scoped to one database. Do not assume which:\n\n**Host-wide** (`spacetime mcp` with no database, or `POST /v1/mcp`). Every data tool takes a required\n`database` argument, a name or an identity, and `list_databases` is offered:\n\n```json\n{ \"name\": \"sql\", \"arguments\": { \"database\": \"mydb\", \"sql\": \"SELECT * FROM message\" } }\n```\n\n**Scoped** (`spacetime mcp <database>`, or `POST /v1/database/<db>/mcp`). The connection fixes the\ndatabase, so there is no `database` argument and no `list_databases`:\n\n```json\n{ \"name\": \"sql\", \"arguments\": { \"sql\": \"SELECT * FROM message\" } }\n```\n\nWhen `spacetime mcp` runs inside a project with a `spacetime.json` that has a single unambiguous\n`server`, it uses that server unless `--server` or `--no-config` is passed. It does not infer a\ndatabase from the config; omitting the database argument still means host-wide mode.\n\n## Rules that do not change\n\nThe tools run with your identity, exactly as the HTTP API does. The model is the same as everywhere\nelse, so the `concepts` skill still governs:\n\n1. **Reducers are the write path.** Use `call` to change data. It runs in a transaction that either\n   fully commits or fully rolls back.\n2. **SQL writes require ownership.** `sql` reads public tables; writing through it needs you to own\n   the database. Prefer `call`.\n3. **Private tables are not client-readable.** `get_schema` still shows a private table's\n   declaration, so a `no such table` error from `sql` usually means the table is private rather than\n   missing. Access depends on your identity, so do not assume a private table is readable.\n4. **Tool errors come back in band.** A failed reducer or a bad query returns a result with\n   `isError: true` and the message as text, not a transport failure. Read the text before retrying.\n\n## Inspecting a database\n\n```\nlist_databases {}\nget_schema     { \"database\": \"mydb\" }\nsql            { \"database\": \"mydb\", \"sql\": \"SELECT * FROM message\" }\ncall           { \"database\": \"mydb\", \"reducer\": \"send_message\", \"args\": [\"hello\"] }\n```\n\nPass `\"confirmed\": true` to `sql` to wait for a durably confirmed read.\n\n## Troubleshooting\n\n| Message | Meaning |\n| --- | --- |\n| `database argument must be a string` | The server is host-wide and you omitted `database` |\n| `unknown tool: list_databases` | The server is scoped to one database already |\n| `` `x` not found `` | No such database on this server, or a name where an identity was meant |\n| `no such table: x` | The table is private, or you are querying the wrong database |\n| No `spacetimedb` tools at all | No MCP server is connected. Use the CLI instead (`cli` skill) |\n\n`spacetime mcp` is UNSTABLE and subject to breaking changes. If a client cannot start it, fall back\nto the CLI commands in the `cli` skill.\n\nReference: https://spacetimedb.com/docs\n","frontmatter":{"name":"mcp","description":"Operate a running SpacetimeDB database through MCP tools rather than the CLI - list databases, read schemas, run SQL, and call reducers. Use when the client exposes spacetimedb MCP tools and the task is to inspect or change data in a live database.","license":"Apache-2.0","metadata":{"author":"clockworklabs","version":"2.0","role":"shared","language":"all","cursor_globs":"**/*","cursor_always_apply":false},"triggers":["inspect the database","query the database","list my databases","read the schema","call a reducer","use the MCP server","spacetimedb MCP"]},"isInternal":false,"tokens":1330,"sizeBytes":5119},{"name":"README.md","path":"skills/rust-server/README.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/rust-server/README.md","title":"Rust-server Skill","category":"anthropic-skill","format":"markdown","content":"# Rust-server Skill\n\nPath: `skills/rust-server/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/rust-server/README.md)","tokens":300,"sizeBytes":182},{"name":"SKILL.md","path":"skills/rust-server/SKILL.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/rust-server/SKILL.md","title":"rust-server","category":"anthropic-skill","format":"markdown","content":"---\nname: rust-server\ndescription: SpacetimeDB Rust server module SDK reference. Use when writing tables, reducers, or module logic in Rust.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: server\n  language: rust\n  cursor_globs: \"**/*.rs\"\n  cursor_always_apply: true\n---\n\n# SpacetimeDB Rust SDK Reference\n\n## Imports\n\n```rust\nuse spacetimedb::{\n    procedure, reducer, table, Filter, Identity, ProcedureContext, Query,\n    ReducerContext, SpacetimeType, Table, ConnectionId, ScheduleAt,\n    TimeDuration, Timestamp, Uuid,\n};\n```\n\n**`Table` is required.** Without it, `ctx.db.*.insert()`, `.iter()`, `.find()` etc. won't compile (`no method named 'insert' found`).\n\n## Tables\n\n`#[spacetimedb::table(...)]` on a `pub struct`. `accessor` must be snake_case:\n\n```rust\n#[spacetimedb::table(accessor = entity, public)]\npub struct Entity {\n    #[primary_key]\n    #[auto_inc]\n    pub id: u64,\n    pub owner: Identity,\n    pub name: String,\n    #[index(btree)]\n    pub active: bool,\n}\n```\n\nOptions: `accessor = snake_case` (required), `public`, `scheduled(reducer_fn)`, `index(...)`\n\n`ctx.db` accessors use the `accessor` name (snake_case).\n\n## Column Types\n\n| Rust type | Notes |\n|-----------|-------|\n| `u8` / `u16` / `u32` / `u64` / `u128` | unsigned integers |\n| `i8` / `i16` / `i32` / `i64` / `i128` | signed integers |\n| `spacetimedb::sats::u256` / `spacetimedb::sats::i256` | 256-bit integers |\n| `f32` / `f64` | floats |\n| `bool` | boolean |\n| `String` | text |\n| `Vec<T>` | list/array |\n| `Identity` | user identity |\n| `ConnectionId` | connection handle |\n| `Timestamp` | server timestamp (microseconds since epoch) |\n| `TimeDuration` | duration in microseconds |\n| `Uuid` | UUID |\n| `Option<T>` | nullable column |\n\n## Column Attributes\n\n```rust\n#[primary_key]          // primary key\n#[auto_inc]             // auto-increment (use 0 as placeholder on insert)\n#[unique]               // unique constraint\n#[index(btree)]         // btree index (enables .filter() on this column)\n#[default(true)]        // migration-safe default for a newly appended column\n```\n\nDefaults support compatible addition of a newly appended field. Do not place `#[default(...)]` on primary-key, unique, or auto-increment columns.\n\n## Indexes\n\nPrefer `#[index(btree)]` inline for single-column. Multi-column uses table-level:\n\n```rust\n// Inline (preferred for single-column):\n#[index(btree)]\npub author_id: u64,\n// Access: ctx.db.post().author_id().filter(author_id)\n\n// Multi-column (table-level):\n#[spacetimedb::table(accessor = membership, public,\n    index(accessor = by_group_user, btree(columns = [group_id, user_id]))\n)]\npub struct Membership { pub group_id: u64, pub user_id: Identity, ... }\n// Access: ctx.db.membership().by_group_user().filter((group_id, &user_id))\n```\n\nWhen you frequently look up rows by multiple columns, prefer a multi-column index over filtering by one column and looping over the results.\n\n## Reducers\n\n```rust\n#[spacetimedb::reducer]\npub fn create_entity(ctx: &ReducerContext, name: String) {\n    ctx.db.entity().insert(Entity { id: 0, owner: ctx.sender(), name, active: true });\n}\n\n// Reducers can return Result<(), String> or Result<(), E> where E: Display\n#[spacetimedb::reducer]\npub fn validate_entity(ctx: &ReducerContext, name: String) -> Result<(), String> {\n    if name.is_empty() {\n        return Err(\"Name cannot be empty\".to_string());\n    }\n    ctx.db.entity().try_insert(Entity { id: 0, owner: ctx.sender(), name, active: true })?;\n    Ok(())\n}\n```\n\nNote: `insert()` panics on constraint violations. Use `try_insert()` with `?` when returning `Result`.\n\n## DB Operations\n\n```rust\nctx.db.entity().insert(Entity { id: 0, name: \"Sample\".into() });  // Insert (0 for autoInc)\nctx.db.entity().id().find(entity_id);                              // Find by PK → Option<Entity>\nctx.db.entity().identity().find(ctx.sender());                     // Find by unique column → Option<Entity>\nctx.db.item().author_id().filter(author_id);                       // Filter by index → iterator\nctx.db.entity().iter();                                            // All rows → iterator\nctx.db.entity().count();                                           // Count rows\nctx.db.entity().id().update(Entity { name: new_name, ..existing }); // Update (override + spread)\nctx.db.entity().id().delete(entity_id);                            // Delete by PK\nctx.db.entity().name().delete(\"Alice\".to_string());                // Delete by indexed String column\n```\n\nNote: `iter()` and `filter()` return iterators. Collect to Vec if you need `.sort()`, `.filter()`, `.map()`.\n\nRange queries on btree indexes: `filter(18..=65)`, `filter(18..)`, `filter(..18)`.\n\nString column accessors operate on the column's owned `String` type, not `&str`. Pass a `String` or `&String` to `find` and `delete`; index filters borrow the key, as in `ctx.db.product().category().filter(&\"hardware\".to_string())`.\n\n## Lifecycle Hooks\n\n```rust\n#[spacetimedb::reducer(init)]\npub fn init(ctx: &ReducerContext) { ... }\n\n#[spacetimedb::reducer(client_connected)]\npub fn on_connect(ctx: &ReducerContext) { ... }\n\n#[spacetimedb::reducer(client_disconnected)]\npub fn on_disconnect(ctx: &ReducerContext) { ... }\n```\n\nThe current connection ID is available through `ctx.connection_id()` (not a public field) and may be absent outside connection-scoped calls.\n\n## Views\n\n```rust\n// Anonymous view (same result for all clients):\nuse spacetimedb::{view, AnonymousViewContext};\n\n#[view(accessor = active_users, public)]\nfn active_users(ctx: &AnonymousViewContext) -> Vec<Entity> {\n    ctx.db.entity().active().filter(true).collect()\n}\n\n// Per-user view (result varies by sender):\nuse spacetimedb::{view, ViewContext};\n\n#[view(accessor = my_profile, public)]\nfn my_profile(ctx: &ViewContext) -> Option<Entity> {\n    ctx.db.entity().identity().find(ctx.sender())\n}\n```\n\nProcedural-view table handles support indexed `find` and `filter` access, but not full-table `iter()`. Start a procedural view from an appropriate table index.\n\nDeclare a procedural view primary key in the view attribute:\n\n```rust\n#[view(accessor = catalog_entry, public, primary_key = sku)]\nfn catalog_entry(ctx: &AnonymousViewContext) -> Vec<CatalogEntry> { ... }\n```\n\nProcedural-view primary keys are explicit schema metadata. Add one only when the view itself is required to expose a primary key; a source table's primary key is not inherited by the view.\n\nQuery-builder views use `ViewContext`, `ctx.from`, and return `impl Query<Row>`. Use `filter` for predicates and `right_semijoin` when the result should contain right-side rows that have a matching left-side row:\n\n```rust\nctx.from.article().filter(|article| article.published.eq(true))\nctx.from.subscription().right_semijoin(\n    ctx.from.account(),\n    |subscription, account| subscription.account_id.eq(account.id),\n)\n```\n\nQuery-builder comparisons against a `String` column take an owned `String`, for example `row.label.eq(\"active\".to_string())`.\n\n## Client Visibility Filters\n\n```rust\nuse spacetimedb::Filter;\n\n#[spacetimedb::client_visibility_filter]\nconst PRIVATE_NOTE_FILTER: Filter =\n    Filter::Sql(\"SELECT * FROM owned_row WHERE owner = :sender\");\n```\n\n## Reducer Context API\n\n`ReducerContext` (`ctx`) is the only source of sender identity, time, and randomness; stdlib clocks and RNG are unavailable in modules.\n\n```rust\n// Auth: ctx.sender() is the caller's Identity\nif row.owner != ctx.sender() {\n    panic!(\"unauthorized\");\n    // or: return Err(anyhow::anyhow!(\"unauthorized\"));\n}\n\n// Server timestamp (deterministic per reducer call)\nctx.db.item().insert(Item { id: 0, owner: ctx.sender(), created_at: ctx.timestamp, .. });\n\n// Timestamp arithmetic\nlet expiry = ctx.timestamp + TimeDuration::from_micros(delay_micros);\n\n// Deterministic RNG: ctx.random() for a single value, ctx.rng() for the rand::Rng trait\nuse spacetimedb::rand::Rng;\nlet n: u32 = ctx.random();                    // random u32\nlet roll: u32 = ctx.rng().gen_range(1..=6);   // any rand::Rng method\n\n// Client: Timestamp → milliseconds since epoch\ntimestamp.to_micros_since_unix_epoch() / 1000\n```\n\n## Scheduled Tables\n\n```rust\n#[spacetimedb::table(accessor = tick_timer, scheduled(tick), public)]\npub struct TickTimer {\n    #[primary_key]\n    #[auto_inc]\n    scheduled_id: u64,\n    scheduled_at: spacetimedb::ScheduleAt,\n}\n\n#[spacetimedb::reducer]\npub fn tick(ctx: &ReducerContext, timer: TickTimer) {\n    // timer row is auto-deleted after this reducer runs\n}\n\n// One-time: fires once at a specific time\nlet at = ScheduleAt::Time(ctx.timestamp + std::time::Duration::from_secs(10));\n// Repeating: fires on an interval\nlet at = ScheduleAt::Interval(std::time::Duration::from_secs(5).into());\n\nctx.db.tick_timer().insert(TickTimer { scheduled_id: 0, scheduled_at: at });\n```\n\nConstruct a connection ID from a numeric representation with `ConnectionId::from_u128(value)`.\n\n## Procedures and HTTP\n\nProcedures use `&mut ProcedureContext` and may return typed values:\n\n```rust\nuse spacetimedb::{procedure, ProcedureContext, SpacetimeType};\n\n#[derive(SpacetimeType)]\npub struct ResultValue { pub value: String }\n\n#[procedure]\npub fn inspect(_ctx: &mut ProcedureContext, input: String) -> ResultValue {\n    ResultValue { value: input }\n}\n```\n\nOutbound HTTP is available through `ctx.http`. Convenience methods such as `get` return a response, and other methods use `Request::builder()` with `ctx.http.send(request)`. `response.status()` returns a `StatusCode`; use `is_success()` to test it or `as_u16()` when a numeric status is needed. Responses are not cloneable, so inspect status and headers before consuming the body with `response.into_body().into_string_lossy()`. Header values use the fallible `to_str()` conversion; they do not provide `as_str()`.\n\nOpen short database transactions with `ctx.with_tx(|tx| ...)`. Access tables inside the callback through `tx.db`, not directly on `tx`. It returns the callback's value directly, so do not call `unwrap` or `expect` on the result unless the callback itself returns a `Result`. The callback implements `Fn`, so clone captured owned values when storing them rather than moving them out of the closure. Perform network I/O before opening the transaction.\n\nFor an outbound request without a convenience method:\n\n```rust\nlet request = Request::builder()\n    .method(\"POST\")\n    .uri(url)\n    .body(Body::from_bytes(data))\n    .unwrap();\nlet response = ctx.http.send(request).expect(\"request failed\");\n```\n\nScheduled procedures use the ordinary scheduled-table shape, but the scheduled function is marked `#[procedure]` and receives `&mut ProcedureContext` plus the scheduled row.\n\nInbound HTTP uses handler functions and one router:\n\n```rust\nuse spacetimedb::http::{handler, router, Body, HandlerContext, Request, Response, Router};\n\n#[handler]\nfn health(_ctx: &mut HandlerContext, _request: Request) -> Response {\n    Response::builder().status(200).body(Body::from_bytes(\"ok\")).unwrap()\n}\n\n#[router]\nfn routes() -> Router { Router::new().get(\"/health\", health) }\n```\n\n`HandlerContext` does not expose `db`; open database access with `ctx.with_tx(|tx| ...)`. HTTP response bodies must own their data or borrow `'static` data, so convert dynamic borrowed text to an owned `String` before passing it to `Body::from_bytes`.\n\n## Logging\n\n```rust\nlog::info!(\"Player connected: {:?}\", ctx.sender());\nlog::warn!(\"Low health: {}\", hp);\nlog::error!(\"Failed to find entity\");\n```\n\n## Custom Types\n\n```rust\n#[derive(SpacetimeType)]\npub enum Status { Online, Away, Offline }\n\n#[derive(SpacetimeType)]\npub struct Point { x: f32, y: f32 }\n```\n\n## Complete Example\n\n```rust\n// src/lib.rs\nuse spacetimedb::{Identity, ReducerContext, SpacetimeType, Table, Timestamp};\n\n#[spacetimedb::table(accessor = entity, public)]\npub struct Entity {\n    #[primary_key]\n    pub identity: Identity,\n    pub name: String,\n    pub active: bool,\n}\n\n#[spacetimedb::table(accessor = record, public)]\npub struct Record {\n    #[primary_key]\n    #[auto_inc]\n    pub id: u64,\n    pub owner: Identity,\n    pub value: u32,\n    pub created_at: Timestamp,\n}\n\n#[spacetimedb::reducer(client_connected)]\npub fn on_connect(ctx: &ReducerContext) {\n    if let Some(existing) = ctx.db.entity().identity().find(ctx.sender()) {\n        ctx.db.entity().identity().update(Entity { active: true, ..existing });\n    }\n}\n\n#[spacetimedb::reducer(client_disconnected)]\npub fn on_disconnect(ctx: &ReducerContext) {\n    if let Some(existing) = ctx.db.entity().identity().find(ctx.sender()) {\n        ctx.db.entity().identity().update(Entity { active: false, ..existing });\n    }\n}\n\n#[spacetimedb::reducer]\npub fn create_entity(ctx: &ReducerContext, name: String) {\n    if ctx.db.entity().identity().find(ctx.sender()).is_some() {\n        panic!(\"already exists\");\n    }\n    ctx.db.entity().insert(Entity { identity: ctx.sender(), name, active: true });\n}\n\n#[spacetimedb::reducer]\npub fn add_record(ctx: &ReducerContext, value: u32) {\n    if ctx.db.entity().identity().find(ctx.sender()).is_none() {\n        panic!(\"not found\");\n    }\n    ctx.db.record().insert(Record {\n        id: 0,\n        owner: ctx.sender(),\n        value,\n        created_at: ctx.timestamp,\n    });\n}\n```\n","frontmatter":{"name":"rust-server","description":"SpacetimeDB Rust server module SDK reference. Use when writing tables, reducers, or module logic in Rust.","license":"Apache-2.0","metadata":{"author":"clockworklabs","version":"2.0","role":"server","language":"rust","cursor_globs":"**/*.rs","cursor_always_apply":true}},"isInternal":false,"tokens":3304,"sizeBytes":13178},{"name":"README.md","path":"skills/typescript-client/README.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/typescript-client/README.md","title":"Typescript-client Skill","category":"anthropic-skill","format":"markdown","content":"# Typescript-client Skill\n\nPath: `skills/typescript-client/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/typescript-client/README.md)","tokens":300,"sizeBytes":200},{"name":"SKILL.md","path":"skills/typescript-client/SKILL.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/typescript-client/SKILL.md","title":"typescript-client","category":"anthropic-skill","format":"markdown","content":"---\nname: typescript-client\ndescription: SpacetimeDB TypeScript/React client SDK reference. Use when building web clients that connect to SpacetimeDB.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: client\n  language: typescript\n  cursor_globs: \"**/*.tsx,**/*.ts\"\n  cursor_always_apply: true\n---\n\n# SpacetimeDB TypeScript Client\n\nGenerated bindings convert snake_case names to camelCase, including row fields: a server column `trip_id` is `tripId` on client rows.\n\n## React: main.tsx\n\n```typescript\nimport React, { useMemo } from 'react';\nimport ReactDOM from 'react-dom/client';\nimport { SpacetimeDBProvider } from 'spacetimedb/react';\nimport { DbConnection } from './module_bindings';\nimport { MODULE_NAME, SPACETIMEDB_URI } from './config';\nimport App from './App';\n\nconst TOKEN_KEY = `${SPACETIMEDB_URI}/${MODULE_NAME}/auth_token`;\n\nfunction Root() {\n  const connectionBuilder = useMemo(() =>\n    DbConnection.builder()\n      .withUri(SPACETIMEDB_URI)\n      .withDatabaseName(MODULE_NAME)\n      .withToken(localStorage.getItem(TOKEN_KEY) ?? undefined)\n      .withAutomaticReconnect()\n      .onConnect((_conn, _identity, token) => localStorage.setItem(TOKEN_KEY, token)),\n    []\n  );\n  return (\n    <SpacetimeDBProvider connectionBuilder={connectionBuilder}>\n      <App />\n    </SpacetimeDBProvider>\n  );\n}\n\nReactDOM.createRoot(document.getElementById('root')!).render(<Root />);\n```\n\n## React: App.tsx\n\n```typescript\nimport { useTable, useSpacetimeDB } from 'spacetimedb/react';\nimport { DbConnection, tables } from './module_bindings';\n\nexport default function App() {\n  const { isActive, identity: myIdentity, getConnection } = useSpacetimeDB();\n  const conn = getConnection() as DbConnection | null;\n\n  // useTable owns subscriptions and reports readiness after replay.\n  const [entities, entitiesReady] = useTable(tables.entity);\n  const [records, recordsReady] = useTable(tables.record);\n\n  const [onlineUsers] = useTable(\n    tables.entity.where(r => r.active.eq(true)),\n    {\n      onInsert: user => console.log('User connected:', user.name),\n      onDelete: user => console.log('User disconnected:', user.name),\n      onUpdate: (oldUser, newUser) => console.log('Updated:', newUser.name),\n    }\n  );\n\n  const addRecord = (data: string) => {\n    if (!conn || !isActive) return;\n    void conn.reducers.addRecord({ data }).catch(console.error);\n  };\n  const ownsEntity = entities.some(\n    row => row.owner.toHexString() === myIdentity?.toHexString()\n  );\n\n  return (\n    <main>\n      <p>{isActive ? 'Connected' : 'Not connected'}</p>\n      <p>{entitiesReady && recordsReady ? 'Data ready' : 'Waiting for current data'}</p>\n      <p>{onlineUsers.length} users online, {records.length} records</p>\n      <p>{ownsEntity ? 'You own an entity' : 'No owned entity'}</p>\n      <button disabled={!isActive} onClick={() => addRecord('Hello!')}>\n        Add record\n      </button>\n    </main>\n  );\n}\n```\n\n## Vanilla (non-React)\n\n```typescript\nimport { DbConnection, tables } from './module_bindings';\n\nconst HOST = 'wss://maincloud.spacetimedb.com';\nconst DATABASE = 'my_module';\nconst TOKEN_KEY = `${HOST}/${DATABASE}/auth_token`;\n\nconst conn = DbConnection.builder()\n  .withUri(HOST)\n  .withDatabaseName(DATABASE)\n  .withToken(localStorage.getItem(TOKEN_KEY) ?? undefined)\n  .withAutomaticReconnect()\n  .onConnect((_conn, identity, token) => {\n    localStorage.setItem(TOKEN_KEY, token);\n    console.log('Connected as:', identity.toHexString());\n  })\n  .onDisconnect((_ctx, error, nextAttempt, delayMs) => {\n    if (nextAttempt !== undefined) {\n      console.warn(`Reconnect attempt ${nextAttempt} in ${delayMs} ms`, error);\n    } else {\n      console.log('Connection ended', error);\n    }\n  })\n  .onConnectError((_ctx, error, nextAttempt, delayMs) => {\n    console.error('Connection failed:', error);\n    if (nextAttempt !== undefined) {\n      console.log(`Retry ${nextAttempt} in ${delayMs} ms`);\n    }\n  })\n  .build();\n\n// Register once; the SDK replays this subscription after reconnecting.\nconst subscription = conn.subscriptionBuilder()\n  .onApplied(() => console.log('Ready'))\n  .subscribe([tables.user, tables.message]);\n\n// Row callbacks\nconn.db.user.onInsert((ctx, user) => console.log('Joined:', user.name));\nconn.db.user.onDelete((ctx, user) => console.log('Left:', user.name));\nconn.db.user.onUpdate((ctx, oldUser, newUser) => console.log('Updated:', newUser.name));\n```\n\n## Automatic Reconnect and Token Refresh\n\nThe React provider's connection manager enables automatic reconnect; the explicit `.withAutomaticReconnect()` above also shows the setting to use for direct connections. Without it, a direct connection does not recover automatically. For direct connections, initial failures are not retried. After an established connection drops, retries use exponential backoff and jitter from `minDelayMs` (default 1 s) up to `maxDelayMs` (default 30 s), until `disconnect()` or a terminal failure. Tune these with `.withAutomaticReconnect({ minDelayMs, maxDelayMs })`; values below the 500 ms and 1 s floors are raised with a warning, so that retrying clients cannot overwhelm the database. While mounted, the React provider also preserves its separate connection-manager retries: it builds a replacement connection after an initial or terminal failure that the core connection will not retry. It respects an explicit `disconnect()`.\n\nThe same connection, identity, table handles, subscriptions, and row callbacks survive recovery. Each attempt gets a fresh connection ID. `onConnect` runs again before subscription replay, so register subscriptions and row callbacks once, outside that callback. The SDK replays subscriptions in one batch, retains readable but stale cached rows during outages, and emits net row changes after reconciliation. Subscription `onApplied` runs again after replay; keep one-time setup separate.\n\nIn React, let `useTable` manage its own subscriptions. Do not add a second subscription effect for the same queries or recreate subscriptions whenever `isActive` changes. Use the hook's `isReady` result for data readiness: a successful reconnect handshake does not mean replay has completed. Invoke reducers from event handlers, not during rendering. For a manually created subscription, retain its handle and call `unsubscribe()` when it is no longer needed, including during an outage.\n\nFor direct connections, `conn.isReconnecting` reports recovery before the next successful handshake. `onDisconnect` and `onConnectError` receive `(ctx, error, nextReconnectAttempt, nextReconnectDelayMs)`. The last two arguments are `undefined` when no retry is scheduled. Do not build a replacement connection or run your own retry timer while automatic recovery is pending. An explicit `conn.disconnect()` stops recovery, including a pending token refresh result.\n\nFor expiring credentials, also call `.withTokenProvider(() => refreshTokenAsync())`, where your authentication integration supplies `refreshTokenAsync(): Promise<string>`. Supply the initial token with `.withToken(initialToken)`; the provider is used only for reconnect attempts. It must return a non-empty token for the same identity. The SDK calls it when remaining validity is at most 30 seconds or 5% of the original lifetime, whichever is greater, when expiry cannot be read, or after a reused token is rejected. Provider failures retry; rejection of a freshly provided token is terminal. No periodic refresh runs while connected, and disconnecting does not cancel the provider's own asynchronous work.\n\nCalls made while disconnected fail immediately. Pending reducer and procedure promises reject with `UnknownCallResultError` (exported from `spacetimedb`) when the connection is lost before a result arrives. The server may have executed the operation; the SDK never replays it. Do not automatically retry non-idempotent calls on that error.\n\n## Gotchas\n\n- **`useTable` rows are `readonly`.** Copy before sorting/mutating, or it fails to type-check:\n  `const [rows] = useTable(tables.message); const sorted = [...rows].sort(...)`.\n- **bigint in JSX.** ids/counts from `t.u64()`/`t.i64()` columns are `bigint`, which React\n  cannot render. Wrap it: `{Number(row.id)}` or `{String(count)}`.\n","frontmatter":{"name":"typescript-client","description":"SpacetimeDB TypeScript/React client SDK reference. Use when building web clients that connect to SpacetimeDB.","license":"Apache-2.0","metadata":{"author":"clockworklabs","version":"2.0","role":"client","language":"typescript","cursor_globs":"**/*.tsx,**/*.ts","cursor_always_apply":true}},"isInternal":false,"tokens":1870,"sizeBytes":8223},{"name":"README.md","path":"skills/typescript-server/README.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/typescript-server/README.md","title":"Typescript-server Skill","category":"anthropic-skill","format":"markdown","content":"# Typescript-server Skill\n\nPath: `skills/typescript-server/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/typescript-server/README.md)","tokens":300,"sizeBytes":200},{"name":"SKILL.md","path":"skills/typescript-server/SKILL.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/typescript-server/SKILL.md","title":"typescript-server","category":"anthropic-skill","format":"markdown","content":"---\nname: typescript-server\ndescription: SpacetimeDB TypeScript server module SDK reference. Use when writing tables, reducers, or module logic in TypeScript.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: server\n  language: typescript\n  cursor_globs: \"**/*.ts\"\n  cursor_always_apply: true\n---\n\n# SpacetimeDB TypeScript SDK Reference\n\n## Module Structure\n\nTables are built with `table()`, bound with `schema()`, and exported as default. Reducers and lifecycle hooks are `export const`:\n\n```typescript\nimport { schema, table, t } from 'spacetimedb/server';\n\nconst scoreRecord = table(\n  { name: 'score_record', public: true },\n  {\n    id: t.u64().primaryKey().autoInc(),\n    owner: t.identity(),\n    value: t.u32(),\n  }\n);\n\nconst spacetimedb = schema({ scoreRecord });  // ONE object, not spread args\nexport default spacetimedb;\n\nexport const addRecord = spacetimedb.reducer(\n  { value: t.u32() },\n  (ctx, { value }) => {\n    ctx.db.scoreRecord.insert({ id: 0n, owner: ctx.sender, value });\n  }\n);\n```\n\nOnly table definitions belong in `schema({...})`. Row and object builders used as reducer arguments or view return types are not schema entries.\n\nNamed runtime exports are reserved for values registered with SpacetimeDB, such as reducers, lifecycle hooks, views, procedures, HTTP exports, and visibility filters. Keep ordinary helper functions and constants unexported.\n\n## Imports\n\nSchema builders and module exports come from `spacetimedb/server`. Runtime value classes such as `ScheduleAt`, `Timestamp`, and `ConnectionId` come from the root `spacetimedb` package; `Range` comes from `spacetimedb/server`:\n\n```typescript\nimport {\n  schema, table, t, SenderError,\n  type InferSchema, type ReducerCtx,\n} from 'spacetimedb/server';\nimport { ConnectionId, ScheduleAt, Timestamp } from 'spacetimedb';\nimport { Range } from 'spacetimedb/server';\n```\n\n## Tables\n\n`table(OPTIONS, COLUMNS)` takes two arguments. The `name` field MUST be snake_case:\n\n```typescript\nconst entity = table(\n  { name: 'entity', public: true },\n  {\n    identity: t.identity().primaryKey(),\n    name: t.string(),\n    active: t.bool(),\n  }\n);\n```\n\nOptions: `name` (snake_case, recommended), `public: true`, `event: true`, `indexes: [...]`\n\n`ctx.db` accessors are the keys passed to `schema({...})`, verbatim: `schema({ scoreRecord })` -> `ctx.db.scoreRecord`. Keep TypeScript identifiers and accessors camelCase. Use explicit `name: 'snake_case'` strings when you need a canonical database name that differs from the TypeScript identifier.\n\n## Column Types\n\nEvery column is a `t` builder value:\n\n| Builder | JS type | Notes |\n|---------|---------|-------|\n| `t.u8()` / `t.u16()` / `t.u32()` | number | |\n| `t.i8()` / `t.i16()` / `t.i32()` | number | |\n| `t.u64()` | bigint | Use `0n` literals |\n| `t.i64()` | bigint | Use `0n` literals |\n| `t.u128()` / `t.i128()` / `t.u256()` / `t.i256()` | bigint | |\n| `t.f64()` / `t.f32()` | number | |\n| `t.bool()` | boolean | |\n| `t.string()` | string | |\n| `t.identity()` | Identity | |\n| `t.connectionId()` | ConnectionId | |\n| `t.timestamp()` | Timestamp | |\n| `t.timeDuration()` | TimeDuration | |\n| `t.scheduleAt()` | ScheduleAt | |\n\nModifiers: `.primaryKey()`, `.autoInc()`, `.unique()`, `.index('btree')`, `.default(value)`.\n\nUse `.default(value)` only for a newly appended migration-safe field. Do not put defaults on primary-key, unique, or auto-increment columns.\n\nOptional columns: `nickname: t.option(t.string())`\n\nSchema builders describe the database's wire types; they are not TypeScript type names. For example, a `t.u16()` value is a TypeScript `number`, not a value cast to a type named `u16`.\n\n## Indexes\n\nUse inline `.index('btree')` when a single-column index does not need a named accessor. Use an `indexes` entry when the accessor is named explicitly or the index spans multiple columns. Every `indexes` entry requires `columns`; do not also add `.index('btree')` to the same column.\n\n```typescript\n// Inline (preferred for single-column):\nauthorId: t.u64().index('btree'),\n// Access: ctx.db.post.authorId.filter(authorId);\n\n// Multi-column (named):\nindexes: [{ accessor: 'by_group_user', algorithm: 'btree', columns: ['groupId', 'userId'] }]\n// Access: ctx.db.membership.by_group_user.filter([groupId, userId]);\n```\n\nPrefer a multi-column index over filtering by one column and looping. Filter takes an array in index column order; a prefix scan passes the leading value bare: `filter(groupId)`.\n\nThe published module's **entry file must export the schema as default**. If you split tables\n(`schema.ts`) from reducers/lifecycle (`index.ts`), re-export it from the entry:\n\n```typescript\n// index.ts\nexport { default } from './schema';   // re-export the schema for the module entry\n```\n\n## Reducers\n\nReducers are created with `spacetimedb.reducer(...)`; the export name becomes the reducer name:\n\n```typescript\nexport const createEntity = spacetimedb.reducer(\n  { name: t.string(), age: t.i32() },\n  (ctx, { name, age }) => {\n    ctx.db.entity.insert({ identity: ctx.sender, name, age, active: true });\n  }\n);\n\n// No arguments, just the callback:\nexport const doReset = spacetimedb.reducer((ctx) => { ... });\n```\n\nReducer args accept any column type, including arrays of custom types: `{ splits: t.array(Split) }`. Do not pass JSON strings for structured data.\n\n## DB Operations\n\n```typescript\nctx.db.scoreRecord.insert({ id: 0n, owner: ctx.sender, value: 1 });  // Insert (0n for autoInc)\nctx.db.scoreRecord.id.find(recordId);                     // Find by PK → row | null\nctx.db.entity.identity.find(ctx.sender);                   // Find by unique column\n[...ctx.db.post.authorId.filter(authorId)];                // Filter → spread to Array\n[...ctx.db.entity.iter()];                                 // All rows → Array\nctx.db.scoreRecord.id.update({ ...existing, value: 2 });  // Update (spread + override)\nctx.db.scoreRecord.id.delete(recordId);                   // Delete by PK\n```\n\nInsert through the table accessor (`ctx.db.scoreRecord.insert(...)`). Primary-key, unique, and index accessors support lookup or mutation of existing rows, but do not have `insert(...)`.\n\n`insert(...)` returns the inserted row, including database-assigned auto-increment fields.\n\nThe accessor for a primary key or index is the declared column name. For example, a primary key named `eventId` is accessed as `ctx.db.event.eventId`, not `ctx.db.event.id`.\n\nThe schema value registers module exports but does not expose database rows. Pass a context into any helper that needs `ctx.db`.\n\nNote: `iter()` and `filter()` return iterators. Spread to Array for `.sort()`, `.filter()`, `.map()`.\n\n## Lifecycle Hooks\n\nMUST be `export const`. Bare calls are silently ignored:\n\n```typescript\nexport const init = spacetimedb.init((ctx) => { ... });\nexport const onConnect = spacetimedb.clientConnected((ctx) => { ... });\nexport const onDisconnect = spacetimedb.clientDisconnected((ctx) => { ... });\n```\n\n`ctx.connectionId` is `ConnectionId | null`, including in lifecycle contexts. Guard it before passing it to a helper or using it as a table key.\n\n## Reducer Context API\n\n`ctx` is the only source of sender identity, time, and randomness; stdlib clocks and RNG are unavailable in modules. Let exported callbacks infer their context type. In helpers, use `ReducerCtx<InferSchema<typeof spacetimedb>>`; do not annotate a context as `any`, because that erases table row types and can make `bigint` expressions infer as `number`.\n\n```typescript\ntype Ctx = ReducerCtx<InferSchema<typeof spacetimedb>>;\n\nfunction findRecord(ctx: Ctx, id: bigint) {\n  return ctx.db.scoreRecord.id.find(id);\n}\n```\n\n```typescript\n// Auth: ctx.sender is the caller's Identity\nif (!row.owner.equals(ctx.sender)) throw new SenderError('unauthorized');\n\n// ctx.connectionId: the per-connection id, NULLABLE (ConnectionId | null) — null-check before use.\n// One Identity can hold several connections (multiple tabs/devices).\nif (ctx.connectionId) { /* ... */ }\n\n// Server timestamp (deterministic per reducer call)\nctx.db.item.insert({ id: 0n, createdAt: ctx.timestamp });\n\n// Deterministic RNG\nconst f: number = ctx.random();                          // [0.0, 1.0)\nconst roll: number = ctx.random.integerInRange(1, 6);    // safe JS number bounds/result, inclusive\nconst storedRoll: bigint = BigInt(roll);                 // convert the result for an i64/u64 column\nconst bytes: Uint8Array = ctx.random.fill(new Uint8Array(16));\n\n// Client: Timestamp → Date\nnew Date(Number(row.createdAt.microsSinceUnixEpoch / 1000n));\n```\n\nDo not construct `Identity` values from strings (e.g. `'hex' as Identity`): serialization fails and kills the module. Identities come from `ctx.sender` or `t.identity()` columns.\n\nConstruct a `ConnectionId` from its numeric representation with `new ConnectionId(value)` after importing `ConnectionId` from `spacetimedb`.\n\nConstruct exact timestamps with `new Timestamp(micros)` after importing `Timestamp` from `spacetimedb`. Inclusive index ranges use `Range` from `spacetimedb/server`:\n\n```typescript\nimport { Timestamp } from 'spacetimedb';\nimport { Range } from 'spacetimedb/server';\n\nctx.db.shipment.deliverBy.filter(new Range(\n  { tag: 'included', value: new Timestamp(1_000n) },\n  { tag: 'included', value: new Timestamp(2_000n) },\n));\n```\n\n## Scheduled Tables\n\nThe reducer or procedure referenced by a table's `scheduled` option must be exported.\n\n```typescript\nimport { ScheduleAt } from 'spacetimedb';   // ScheduleAt comes from the root package\n\nconst tickTimer = table({\n  name: 'tick_timer',\n}, {\n  scheduledId: t.u64().primaryKey().autoInc(),\n  scheduledAt: t.scheduleAt(),\n});\n\nexport const tick = spacetimedb.reducer(\n  { onSchedule: tickTimer },\n  { timer: tickTimer.rowType },\n  (ctx, { timer }) => { /* timer row auto-deleted after this runs */ }\n);\n\n// `onSchedule` also works for scheduled procedures whose return type is `t.unit()`.\n// Legacy table-side scheduling, `scheduled: (): any => tick`, still works but is not\n// recommended for new code because it forces a forward reference.\n\n// One-time: ScheduleAt.time(ctx.timestamp.microsSinceUnixEpoch + delayMicros)\n// Repeating: ScheduleAt.interval(60_000_000n)\n// Read time back from a scheduleAt value (tagged union):\n//   const micros = at.tag === 'time' ? at.value : at.value.microsSinceUnixEpoch;  // bigint\n```\n\n## Custom Types\n\n```typescript\n// Product type (struct):\nconst Position = t.object('Position', { x: t.i32(), y: t.i32() });\nconst entity = table({ name: 'entity' }, {\n  id: t.u64().primaryKey().autoInc(),\n  pos: Position,\n});\n\n// Sum type (tagged union):\nconst Shape = t.enum('Shape', {\n  circle: t.i32(),\n  rectangle: t.object('Rect', { w: t.i32(), h: t.i32() }),\n});\n// Values: { tag: 'circle', value: 10 }\n```\n\n## Views\n\nA client subscribing to a view receives only the rows it returns. Use a per-user view\n(keyed on `ctx.sender`) for per-viewer access control: deleting a row it depends on\n(e.g. a membership row) automatically drops the rows it was exposing from that client.\n\n`t.row(...)` and `t.object(...)` return schema builders, not TypeScript runtime row types. Let a view callback infer its result, or annotate a separately declared structural type such as `Array<{ sku: bigint; label: string }>`. A named output type must not reuse the generated PascalCase name of its view accessor (for example, reserve `DiscountedProduct` for a `discounted_product` view).\n\nBoth `spacetimedb.view(...)` and `spacetimedb.anonymousView(...)` take three arguments: view options, the declared return schema, and the callback.\n\n```typescript\n// Anonymous view (same for all clients):\nexport const activeUsers = spacetimedb.anonymousView(\n  { name: 'active_users', public: true },\n  t.array(entity.rowType),\n  (ctx) => [...ctx.db.entity.iter()].filter(e => e.active)\n);\n\n// Per-user view (varies by ctx.sender):\nexport const myProfile = spacetimedb.view(\n  { name: 'my_profile', public: true },\n  t.option(entity.rowType),\n  (ctx) => ctx.db.entity.identity.find(ctx.sender) ?? undefined\n);\n```\n\nFor a procedural view primary key, define the output with `t.row` and mark its field `.primaryKey()`:\n\n```typescript\nconst CatalogKey = t.row('CatalogKey', {\n  sku: t.u64().primaryKey(),\n  label: t.string(),\n});\n```\n\nQuery-builder views use `ctx.from` and return the query directly. Because a query returns a row set, declare its return schema as `t.array(tableName.rowType)`. Use `where` for predicates and `rightSemijoin` when the result should contain right-side rows that have a matching left-side row:\n\n```typescript\nctx => ctx.from.article.where(article => article.published.eq(true))\nctx => ctx.from.subscription.rightSemijoin(\n  ctx.from.account,\n  (subscription, account) => subscription.accountId.eq(account.id)\n)\n```\n\nThe method name identifies which side is returned: `A.leftSemijoin(B, ...)` returns rows from `A`, while `A.rightSemijoin(B, ...)` returns rows from `B`. To return one table's rows when another table has a match, put the returned table on the corresponding side. Semijoins do not project combined columns from both tables.\n\nProcedural views read through `ctx.db` and return materialized values such as arrays. Query-builder values from `ctx.from` are returned directly; they are not iterators and cannot be spread, looped over, or mixed with array methods. Use a procedural view when the result is a custom row assembled from multiple tables.\n\n## Client Visibility Filters\n\n```typescript\nexport const privateNoteFilter = spacetimedb.clientVisibilityFilter.sql(\n  'SELECT * FROM owned_row WHERE owner = :sender'\n);\n```\n\n## Procedures and HTTP\n\n`spacetimedb` is the local schema value returned by `schema({...})`; it is not a named export to import from `spacetimedb/server`.\n\nProcedures declare argument and return types:\n\n```typescript\nconst Result = t.object('Result', { value: t.string() });\n\nexport const inspect = spacetimedb.procedure(\n  { input: t.string() },\n  Result,\n  (_ctx, { input }) => ({ value: input })\n);\n```\n\nProcedure callbacks are synchronous. Do not mark them `async` or use `await`; return the declared value directly. A procedure with return type `t.unit()` returns `{}`.\n\nTypeScript outbound HTTP uses `ctx.http.fetch(url, options)`, including for non-GET requests; it does not provide convenience methods such as `get()` or `post()`. Responses expose the numeric `status`, `headers.get(name)`, and `text()` APIs.\n\n`t.array(t.u8())` values are `number[]`. Convert one to `new Uint8Array(value)` before using it as a binary request body.\n\nProcedures and handlers open short database transactions with `ctx.withTx(tx => ...)`. Perform network I/O before opening the transaction; only database work belongs inside its callback.\n\nScheduled procedures use the same `onSchedule` binding as scheduled reducers. The procedure must be exported, return `t.unit()`, and accept the scheduled row as its argument.\n\nInbound HTTP uses `httpHandler`, `httpRouter`, `Router`, and `SyncResponse`:\n\n`httpHandler` and `httpRouter` are methods on the local `spacetimedb` schema value, not named imports.\n\n```typescript\nimport { Router, SyncResponse } from 'spacetimedb/server';\n\nexport const health = spacetimedb.httpHandler((_ctx, _request) =>\n  new SyncResponse('ok', {\n    status: 200,\n    headers: { 'content-type': 'text/plain' },\n  })\n);\nexport const routes = spacetimedb.httpRouter(new Router().get('/health', health));\n```\n\nHandlers are synchronous: return `SyncResponse` directly rather than marking the callback `async`. Pass the exported `httpHandler(...)` value to the router, not its raw callback. The router selects the path, while a handler reads request data with APIs such as `request.text()`; `Request` has no `path` property. A handler context does not expose `ctx.db`; use `ctx.withTx(tx => ...)` when a handler needs transactional database access.\n","frontmatter":{"name":"typescript-server","description":"SpacetimeDB TypeScript server module SDK reference. Use when writing tables, reducers, or module logic in TypeScript.","license":"Apache-2.0","metadata":{"author":"clockworklabs","version":"2.0","role":"server","language":"typescript","cursor_globs":"**/*.ts","cursor_always_apply":true}},"isInternal":false,"tokens":3882,"sizeBytes":15830},{"name":"README.md","path":"skills/unity/README.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/unity/README.md","title":"Unity Skill","category":"anthropic-skill","format":"markdown","content":"# Unity Skill\n\nPath: `skills/unity/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/unity/README.md)","tokens":300,"sizeBytes":164},{"name":"SKILL.md","path":"skills/unity/SKILL.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/unity/SKILL.md","title":"unity","category":"anthropic-skill","format":"markdown","content":"---\nname: unity\ndescription: Integrate SpacetimeDB with Unity game projects. Use when building Unity clients with MonoBehaviour lifecycle, FrameTick, and PlayerPrefs token persistence.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: client\n  language: csharp\n  cursor_globs: \"**/*.cs\"\n  cursor_always_apply: false\n  tested_with: \"SpacetimeDB 2.0, Unity 2022.3+\"\n---\n\n# SpacetimeDB Unity Integration\n\nThis skill covers Unity-specific patterns for connecting to SpacetimeDB. For server-side module development, see the `csharp-server` skill.\n\n---\n\n## Installation\n\nAdd via Unity Package Manager using the git URL:\n\n```\nhttps://github.com/clockworklabs/com.clockworklabs.spacetimedbsdk.git\n```\n\n**Window > Package Manager > + > Add package from git URL**\n\n---\n\n## Generate Module Bindings\n\n```bash\nspacetime generate --lang csharp --out-dir Assets/SpacetimeDB/module_bindings --module-path PATH_TO_MODULE\n```\n\nPlace generated files in your Assets folder so Unity compiles them.\n\n---\n\n## SpacetimeManager Singleton\n\nThe core pattern for Unity integration. This MonoBehaviour manages the connection lifecycle.\n\n```csharp\nusing UnityEngine;\nusing SpacetimeDB;\nusing SpacetimeDB.Types;\n\npublic class SpacetimeManager : MonoBehaviour\n{\n    private const string TOKEN_KEY = \"SpacetimeAuthToken\";\n    private const string SERVER_URI = \"http://localhost:3000\";\n    private const string DATABASE_NAME = \"my-game\";\n\n    public static SpacetimeManager Instance { get; private set; }\n    public DbConnection Connection { get; private set; }\n    public Identity LocalIdentity { get; private set; }\n\n    void Awake()\n    {\n        if (Instance != null && Instance != this) { Destroy(gameObject); return; }\n        Instance = this;\n        DontDestroyOnLoad(gameObject);\n    }\n\n    void Start()\n    {\n        string savedToken = PlayerPrefs.GetString(TOKEN_KEY, null);\n\n        Connection = DbConnection.Builder()\n            .WithUri(SERVER_URI)\n            .WithDatabaseName(DATABASE_NAME)\n            .WithToken(savedToken)\n            .OnConnect(OnConnected)\n            .OnConnectError(err => Debug.LogError($\"Connection failed: {err}\"))\n            .OnDisconnect((conn, err) => {\n                if (err != null) Debug.LogError($\"Disconnected: {err}\");\n            })\n            .Build();\n    }\n\n    void Update()\n    {\n        Connection?.FrameTick();\n    }\n\n    void OnDestroy()\n    {\n        Connection?.Disconnect();\n    }\n\n    private void OnConnected(DbConnection conn, Identity identity, string authToken)\n    {\n        LocalIdentity = identity;\n        PlayerPrefs.SetString(TOKEN_KEY, authToken);\n        PlayerPrefs.Save();\n\n        Debug.Log($\"Connected as: {identity}\");\n\n        conn.SubscriptionBuilder()\n            .OnApplied(OnSubscriptionApplied)\n            .SubscribeToAllTables();\n    }\n\n    private void OnSubscriptionApplied(SubscriptionEventContext ctx)\n    {\n        Debug.Log(\"Subscription applied: game state loaded\");\n    }\n}\n```\n\n---\n\n## FrameTick (Critical)\n\n**`FrameTick()` must be called every frame in `Update()`.** The SDK queues all network messages and only processes them when you call `FrameTick()`. Without it, no callbacks fire and the client appears frozen. See the `Update()` method in the SpacetimeManager above.\n\n**Thread safety**: `FrameTick()` processes messages on the calling thread (the main thread in Unity). Do NOT call it from a background thread. Do NOT access `conn.Db` from background threads.\n\n## Automatic Reconnect\n\nAdd `.WithAutomaticReconnect()` to the builder to recover an established connection after an outage. In the singleton above, create subscriptions only on the first `OnConnected`, or move them after `Build()`: `OnConnected` runs again after each successful reconnect. Keep calling `FrameTick()` during outages, or use `SpacetimeDBNetworkManager`, which also ticks reconnecting connections. Do not gate ticking on `IsActive`.\n\nThe SDK retains the identity, table handles, callbacks, and subscriptions, and replays subscriptions in one batch. Cached rows stay readable during an outage; row callbacks report net changes after recovery. `OnApplied` runs again, so separate one-time object setup from marking data ready. Each reconnect attempt has a fresh `ConnectionId`.\n\n`IsReconnecting` reports recovery before the next successful handshake. The `OnDisconnect((conn, error, next) => ...)` and `OnConnectError((error, next) => ...)` overloads expose `NextReconnect?`, with the upcoming `Attempt` and `Delay`, or null for a terminal failure. Initial connection failures do not retry. Retries use exponential backoff and jitter from `MinDelay` (default 1 s) up to `MaxDelay` (default 30 s), tunable with `.WithAutomaticReconnect(new AutomaticReconnectOptions { MinDelay = ..., MaxDelay = ... })`; values below the 500 ms and 1 s floors are raised with a warning, so that retrying clients cannot overwhelm the database. `Disconnect()` stops them.\n\nCalls made while disconnected fail immediately. Pending reducer calls may report `Status.UnknownResult`, meaning the server may have executed them; they are not replayed. Pending procedures and one-off queries fail with `UnknownResultException`. Regenerate bindings when upgrading to include unknown-outcome handling.\n\n---\n\n## Row Callbacks for Game State\n\nRegister callbacks to update Unity GameObjects when table data changes.\n\n```csharp\nvoid RegisterCallbacks()\n{\n    Connection.Db.Player.OnInsert += (EventContext ctx, Player player) => {\n        SpawnPlayerObject(player);\n    };\n\n    Connection.Db.Player.OnDelete += (EventContext ctx, Player player) => {\n        DestroyPlayerObject(player.Id);\n    };\n\n    Connection.Db.Player.OnUpdate += (EventContext ctx, Player oldPlayer, Player newPlayer) => {\n        UpdatePlayerObject(newPlayer);\n    };\n}\n```\n\nRegister these once after building the connection, before the first `FrameTick()`. Do not register them repeatedly in `OnConnected` or `OnSubscriptionApplied` when automatic reconnect is enabled.\n\n---\n\n## Calling Reducers from UI\n\n```csharp\npublic class GameUI : MonoBehaviour\n{\n    public void OnMoveButtonClicked(Vector2 direction)\n    {\n        SpacetimeManager.Instance.Connection.Reducers.MovePlayer(direction.x, direction.y);\n    }\n\n    public void OnSendChat(string message)\n    {\n        SpacetimeManager.Instance.Connection.Reducers.SendMessage(message);\n    }\n}\n```\n\n### Reducer Callbacks\n\n```csharp\nSpacetimeManager.Instance.Connection.Reducers.OnSendMessage += (ReducerEventContext ctx, string text) => {\n    if (ctx.Event.Status is Status.Committed)\n        Debug.Log($\"Message sent: {text}\");\n    else if (ctx.Event.Status is Status.Failed(var reason))\n        Debug.LogError($\"Send failed: {reason}\");\n    else if (ctx.Event.Status is Status.UnknownResult)\n        Debug.LogWarning(\"Connection lost before the result arrived; the message may have been sent.\");\n};\n```\n\n---\n\n## Reading the Client Cache\n\n```csharp\n// Find by primary key\nif (Connection.Db.Player.Id.Find(playerId) is Player player)\n{\n    Debug.Log($\"Player: {player.Name}\");\n}\n\n// Iterate all\nforeach (var p in Connection.Db.Player.Iter())\n{\n    Debug.Log(p.Name);\n}\n\n// Filter by index\nforeach (var p in Connection.Db.Player.Level.Filter(5))\n{\n    Debug.Log($\"Level 5: {p.Name}\");\n}\n\n// Count\nint total = Connection.Db.Player.Count;\n```\n\n---\n\n## Unity-Specific Considerations\n\n### Main Thread Only\nAll SpacetimeDB SDK calls (`FrameTick`, `conn.Db` access, reducer calls) must happen on the main thread. If you need to pass data to a background thread, copy it first in the callback.\n\n### Scene Loading\nUse `DontDestroyOnLoad(gameObject)` on the SpacetimeManager to prevent the connection from being destroyed during scene transitions. Without it, the connection drops every time you load a new scene.\n\n### IL2CPP / AOT\nThe SpacetimeDB SDK uses code generation. If you encounter issues with IL2CPP builds:\n- Ensure generated bindings are up to date\n- Check that `link.xml` preserves SpacetimeDB types if you use assembly stripping\n\n### Token Persistence\nToken save/load via `PlayerPrefs` is demonstrated in the SpacetimeManager singleton above. Persisting the server-issued token and passing it back on reconnect keeps the same identity; without a saved token the server issues a new identity in the `OnConnect` callback. This token does not expire and a lost one can't be recovered, so self-issued identities are for development. For production, authenticate with an OIDC provider such as SpacetimeAuth, which handles token lifecycle.\n\nWith automatic reconnect enabled, the SDK retains the authentication token and passes it to `OnConnect`, including on WebGL. Without automatic reconnect, a WebGL connection using a saved token may return a short-lived WebSocket token instead; in that case, keep the original saved token rather than overwriting it in the callback above.\n\nFor expiring credentials, configure `.WithToken(initialToken)`, `.WithAutomaticReconnect()`, and `.WithTokenProvider(() => RefreshTokenAsync())`. The provider returns `Task<string>` for the same identity. It is used before reconnect attempts when expiry is unreadable, remaining validity is at most 30 seconds or 5% of the original lifetime, or a reused token is rejected. It is not called for the initial connection or periodically while connected. Provider failures retry; rejection of a freshly provided token stops recovery. `Disconnect()` ignores a pending provider result without canceling the provider's own asynchronous work.\n","frontmatter":{"name":"unity","description":"Integrate SpacetimeDB with Unity game projects. Use when building Unity clients with MonoBehaviour lifecycle, FrameTick, and PlayerPrefs token persistence.","license":"Apache-2.0","metadata":{"author":"clockworklabs","version":"2.0","role":"client","language":"csharp","cursor_globs":"**/*.cs","cursor_always_apply":false,"tested_with":"SpacetimeDB 2.0, Unity 2022.3+"}},"isInternal":false,"tokens":2042,"sizeBytes":9485},{"name":"README.md","path":"skills/unreal/README.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/unreal/README.md","title":"Unreal Skill","category":"anthropic-skill","format":"markdown","content":"# Unreal Skill\n\nPath: `skills/unreal/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/unreal/README.md)","tokens":300,"sizeBytes":167},{"name":"SKILL.md","path":"skills/unreal/SKILL.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/unreal/SKILL.md","title":"unreal","category":"anthropic-skill","format":"markdown","content":"---\nname: unreal\ndescription: SpacetimeDB Unreal Engine client SDK reference. Use when building Unreal Engine clients that connect to SpacetimeDB.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: client\n  language: cpp\n  cursor_globs: \"**/*.cpp,**/*.h\"\n  cursor_always_apply: true\n---\n\n# SpacetimeDB Unreal Engine Integration\n\nThis skill covers Unreal Engine-specific patterns for connecting to SpacetimeDB. For server-side module development, see the `rust-server` or `csharp-server` skills.\n\n---\n\n## Installation\n\nAdd the SpacetimeDB Unreal SDK as a plugin:\n\n1. Create a `Plugins` folder in your Unreal project root if it does not exist.\n2. Copy the `SpacetimeDbSdk` folder into `Plugins/`.\n3. Right-click your `.uproject` file and select **Generate Visual Studio project files**.\n4. Add `\"SpacetimeDbSdk\"` to your module's `Build.cs`:\n\n```csharp\nPublicDependencyModuleNames.AddRange(new string[] { \"SpacetimeDbSdk\" });\n```\n\n---\n\n## Generate Module Bindings\n\n```bash\nspacetime generate --lang unrealcpp \\\n  --uproject-dir <path_to_uproject_directory> \\\n  --module-path <path_to_spacetimedb_module> \\\n  --unreal-module-name <your_unreal_module_name>\n```\n\nThis generates C++ bindings in `ModuleBindings/` inside your project. Include the generated header:\n\n```cpp\n#include \"ModuleBindings/SpacetimeDBClient.g.h\"\n```\n\nRegenerate whenever you change module tables, reducers, or types.\n\n---\n\n## GameManager Actor Pattern\n\nThe recommended pattern is a singleton Actor that owns the connection. Enable ticking so `FrameTick` is called every frame.\n\n### Header (GameManager.h)\n\n```cpp\n#pragma once\n#include \"CoreMinimal.h\"\n#include \"GameFramework/Actor.h\"\n#include \"ModuleBindings/SpacetimeDBClient.g.h\"\n#include \"GameManager.generated.h\"\n\nclass UDbConnection;\n\nUCLASS()\nclass AGameManager : public AActor\n{\n    GENERATED_BODY()\npublic:\n    AGameManager();\n    static AGameManager* Instance;\n\n    UPROPERTY(EditAnywhere, Category=\"SpacetimeDB\")\n    FString ServerUri = TEXT(\"127.0.0.1:3000\");\n\n    UPROPERTY(EditAnywhere, Category=\"SpacetimeDB\")\n    FString DatabaseName = TEXT(\"my-module\");\n\n    UPROPERTY(BlueprintReadOnly, Category=\"SpacetimeDB\")\n    UDbConnection* Conn = nullptr;\n\n    UPROPERTY(BlueprintReadOnly, Category=\"SpacetimeDB\")\n    FSpacetimeDBIdentity LocalIdentity;\n\nprotected:\n    virtual void BeginPlay() override;\n    virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;\npublic:\n    virtual void Tick(float DeltaTime) override;\n\nprivate:\n    UFUNCTION() void HandleConnect(UDbConnection* InConn, FSpacetimeDBIdentity Identity, const FString& Token);\n    UFUNCTION() void HandleConnectError(const FString& Error);\n    UFUNCTION() void HandleDisconnect(UDbConnection* InConn, const FString& Error);\n    UFUNCTION() void HandleSubscriptionApplied(FSubscriptionEventContext& Context);\n};\n```\n\n### Source (GameManager.cpp)\n\n```cpp\n#include \"GameManager.h\"\n#include \"Connection/Credentials.h\"\n\nAGameManager* AGameManager::Instance = nullptr;\n\nAGameManager::AGameManager()\n{\n    PrimaryActorTick.bCanEverTick = true;\n    PrimaryActorTick.bStartWithTickEnabled = true;\n}\n\nvoid AGameManager::BeginPlay()\n{\n    Super::BeginPlay();\n    Instance = this;\n\n    FOnConnectDelegate ConnectDelegate;\n    BIND_DELEGATE_SAFE(ConnectDelegate, this, AGameManager, HandleConnect);\n    FOnDisconnectDelegate DisconnectDelegate;\n    BIND_DELEGATE_SAFE(DisconnectDelegate, this, AGameManager, HandleDisconnect);\n    FOnConnectErrorDelegate ConnectErrorDelegate;\n    BIND_DELEGATE_SAFE(ConnectErrorDelegate, this, AGameManager, HandleConnectError);\n\n    UCredentials::Init(TEXT(\".spacetime_token\"));\n    FString Token = UCredentials::LoadToken();\n\n    UDbConnectionBuilder* Builder = UDbConnection::Builder()\n        ->WithUri(ServerUri)\n        ->WithDatabaseName(DatabaseName)\n        ->OnConnect(ConnectDelegate)\n        ->OnDisconnect(DisconnectDelegate)\n        ->OnConnectError(ConnectErrorDelegate);\n\n    if (!Token.IsEmpty())\n    {\n        Builder->WithToken(Token);\n    }\n\n    Conn = Builder->Build();\n}\n\nvoid AGameManager::EndPlay(const EEndPlayReason::Type EndPlayReason)\n{\n    if (Conn) { Conn->Disconnect(); Conn = nullptr; }\n    if (Instance == this) { Instance = nullptr; }\n    Super::EndPlay(EndPlayReason);\n}\n\nvoid AGameManager::Tick(float DeltaTime)\n{\n    if (Conn && Conn->IsActive())\n    {\n        Conn->FrameTick();\n    }\n}\n\nvoid AGameManager::HandleConnect(UDbConnection* InConn, FSpacetimeDBIdentity Identity, const FString& Token)\n{\n    LocalIdentity = Identity;\n    UCredentials::SaveToken(Token);\n\n    FOnSubscriptionApplied AppliedDelegate;\n    BIND_DELEGATE_SAFE(AppliedDelegate, this, AGameManager, HandleSubscriptionApplied);\n    Conn->SubscriptionBuilder()\n        ->OnApplied(AppliedDelegate)\n        ->SubscribeToAllTables();\n}\n\nvoid AGameManager::HandleConnectError(const FString& Error)\n{\n    UE_LOG(LogTemp, Error, TEXT(\"Connection error: %s\"), *Error);\n}\n\nvoid AGameManager::HandleDisconnect(UDbConnection* InConn, const FString& Error)\n{\n    UE_LOG(LogTemp, Warning, TEXT(\"Disconnected: %s\"), *Error);\n}\n\nvoid AGameManager::HandleSubscriptionApplied(FSubscriptionEventContext& Context)\n{\n    UE_LOG(LogTemp, Log, TEXT(\"Subscription applied - game state loaded\"));\n}\n```\n\n---\n\n## FrameTick -- Critical\n\n**You must either call `Conn->FrameTick()` every frame in your Actor's `Tick()`, or call `Conn->SetAutoTicking(true)` once at startup.** The SDK queues all network messages and only processes them on tick. Without one of these, no callbacks fire and the client appears frozen.\n\n---\n\n## Connection Builder\n\nBuild a connection with the builder pattern. All builder methods return pointers for chaining with `->`.\n\n```cpp\nUDbConnection* Conn = UDbConnection::Builder()\n    ->WithUri(TEXT(\"127.0.0.1:3000\"))\n    ->WithDatabaseName(TEXT(\"my-module\"))\n    ->WithToken(SavedToken)                              // optional\n    ->WithCompression(ESpacetimeDBCompression::Gzip)     // optional\n    ->OnConnect(ConnectDelegate)\n    ->OnConnectError(ErrorDelegate)\n    ->OnDisconnect(DisconnectDelegate)\n    ->Build();\n```\n\n### OnConnect callback signature\n\n```cpp\nUFUNCTION()\nvoid OnConnected(UDbConnection* Connection, FSpacetimeDBIdentity Identity, const FString& Token);\n```\n\nSave the `Token` for future reconnection. The `Identity` is the user's persistent identifier.\n\n---\n\n## Subscribing to Tables\n\nAfter connecting, subscribe to receive table data:\n\n```cpp\n// Subscribe to all public tables\nConn->SubscriptionBuilder()\n    ->OnApplied(AppliedDelegate)\n    ->SubscribeToAllTables();\n\n// Subscribe to specific queries\nTArray<FString> Queries = { TEXT(\"SELECT * FROM player\"), TEXT(\"SELECT * FROM entity\") };\nConn->SubscriptionBuilder()\n    ->OnApplied(AppliedDelegate)\n    ->OnError(ErrorDelegate)\n    ->Subscribe(Queries);\n```\n\n### Subscription Handle\n\n`Subscribe` and `SubscribeToAllTables` return a `USubscriptionHandle*`:\n\n```cpp\nUSubscriptionHandle* Handle = Conn->SubscriptionBuilder()->...->Subscribe(Queries);\nHandle->IsActive();      // true while subscription is live\nHandle->Unsubscribe();   // cancel the subscription\nHandle->UnsubscribeThen(OnEndDelegate); // cancel with callback\nHandle->GetQuerySqls();  // get the SQL queries\n```\n\n---\n\n## Reading the Client Cache\n\nAccess tables through `Conn->Db`:\n\n```cpp\n// Find by unique/primary key (returns by value; default-constructed if not found)\nFUserType User = Conn->Db->User->Identity->Find(SomeIdentity);\n\n// Filter by BTree index\nTArray<FPlayerType> LevelFive = Conn->Db->Player->Level->Filter(5);\n\n// Iterate all rows\nTArray<FEntityType> AllEntities = Conn->Db->Entity->Iter();\n\n// Count\nint32 Total = Conn->Db->Player->Count();\n```\n\n---\n\n## Row Callbacks\n\nRegister callbacks on table objects. Callbacks use Unreal dynamic multicast delegates.\n\n```cpp\n// OnInsert\nConn->Db->User->OnInsert.AddDynamic(this, &AMyActor::OnUserInsert);\n\n// OnDelete\nConn->Db->User->OnDelete.AddDynamic(this, &AMyActor::OnUserDelete);\n\n// OnUpdate (only fires for rows with a primary key)\nConn->Db->User->OnUpdate.AddDynamic(this, &AMyActor::OnUserUpdate);\n```\n\n### Callback signatures (must be UFUNCTION)\n\n```cpp\nUFUNCTION()\nvoid OnUserInsert(const FEventContext& Context, const FUserType& NewRow);\n\nUFUNCTION()\nvoid OnUserDelete(const FEventContext& Context, const FUserType& DeletedRow);\n\nUFUNCTION()\nvoid OnUserUpdate(const FEventContext& Context, const FUserType& OldRow, const FUserType& NewRow);\n```\n\nRegister callbacks before connecting or in `HandleSubscriptionApplied`.\n\n---\n\n## Calling Reducers\n\nInvoke reducers through `Conn->Reducers`:\n\n```cpp\nConn->Reducers->SendMessage(TEXT(\"Hello!\"));\nConn->Reducers->SetName(TEXT(\"Alice\"));\nConn->Reducers->MovePlayer(1.0f, 0.0f);\n```\n\n### Reducer Result Callbacks\n\nObserve when a reducer you called completes:\n\n```cpp\nConn->Reducers->OnSendMessage.AddDynamic(this, &AMyActor::OnSendMessageResult);\n```\n\n```cpp\nUFUNCTION()\nvoid OnSendMessageResult(const FReducerEventContext& Context, const FString& Text)\n{\n    UE_LOG(LogTemp, Log, TEXT(\"SendMessage result for: %s\"), *Text);\n}\n```\n\nThese delegates fire only for reducer calls made by this connection, not for other clients' calls.\n\n---\n\n## Delegate Binding with BIND_DELEGATE_SAFE\n\nUse the `BIND_DELEGATE_SAFE` macro to safely bind delegates to member functions:\n\n```cpp\nFOnConnectDelegate ConnectDelegate;\nBIND_DELEGATE_SAFE(ConnectDelegate, this, AMyActor, HandleConnect);\n```\n\nThis is the recommended pattern for all SpacetimeDB delegate bindings in C++.\n\n---\n\n## Identity and ConnectionId\n\n```cpp\n// FSpacetimeDBIdentity -- 256-bit unique user identifier, persists across connections\nFSpacetimeDBIdentity Identity;\nIdentity.ToHex();\n\n// FSpacetimeDBConnectionId -- 128-bit per-session connection identifier\nFSpacetimeDBConnectionId ConnId = Conn->GetConnectionId();\n\n// From any context\nFSpacetimeDBIdentity Id;\nbool Found = Context.TryGetIdentity(Id);\nFSpacetimeDBConnectionId CId = Context.GetConnectionId();\n```\n\n---\n\n## Token Persistence\n\nUse the built-in `UCredentials` helper to save and load tokens. Passing the saved server-issued token back on reconnect keeps the same identity. This token does not expire and a lost one can't be recovered, so self-issued identities are for development. For production, authenticate with an OIDC provider such as SpacetimeAuth, which handles token lifecycle.\n\n```cpp\nUCredentials::Init(TEXT(\".spacetime_token\"));\nFString Token = UCredentials::LoadToken();\n// ... after connect:\nUCredentials::SaveToken(Token);\n```\n\n---\n\n## Context Types\n\nAll callbacks receive a context struct that provides access to `Db` and `Reducers`:\n\n| Type | Used In |\n|------|---------|\n| `FEventContext` | Table row callbacks (OnInsert, OnDelete, OnUpdate) |\n| `FReducerEventContext` | Reducer result callbacks |\n| `FSubscriptionEventContext` | Subscription lifecycle callbacks (OnApplied, OnError) |\n| `FErrorContext` | Error callbacks |\n\nAll inherit from `FContextBase` which provides:\n\n```cpp\nContext.Db          // URemoteTables* -- client cache\nContext.Reducers    // URemoteReducers* -- invoke reducers\nContext.SubscriptionBuilder()  // start a new subscription\n```\n\n---\n\n## Blueprint Integration\n\nAll core classes are Blueprint-accessible via `UFUNCTION(BlueprintCallable)` and `UPROPERTY(BlueprintReadOnly/BlueprintAssignable)`:\n\n- `UDbConnection::Builder()` and all builder methods are `BlueprintCallable`.\n- Table callbacks (`OnInsert`, `OnDelete`, `OnUpdate`) are `BlueprintAssignable` delegates.\n- Reducer invoke methods and result delegates are Blueprint-accessible.\n- `Conn->Db` and `Conn->Reducers` are `BlueprintReadOnly` properties.\n- Generated row types are `BlueprintType` USTRUCTs with `BlueprintReadWrite` properties.\n\nThis means you can build the entire connection and callback flow in Blueprints without writing C++.\n\n---\n\n## Unreal-Specific Considerations\n\n### Auto Ticking Alternative\n\n`UDbConnection` inherits from `FTickableGameObject`, but auto ticking is **off by default**. You have two options:\n\n```cpp\n// Option 1: Call FrameTick() manually in your Actor's Tick() (shown in GameManager above)\nvoid Tick(float DeltaTime) { Conn->FrameTick(); }\n\n// Option 2: Enable auto ticking. The SDK then processes messages every frame automatically\nConn->SetAutoTicking(true);\n```\n\nPick one. Without either, no callbacks fire.\n\n### Compression\n\n```cpp\nBuilder->WithCompression(ESpacetimeDBCompression::Gzip);  // default\nBuilder->WithCompression(ESpacetimeDBCompression::None);   // no compression\n```\n\n### Generated Types\n\nCodegen produces USTRUCTs prefixed with `F` (e.g., `FUserType`, `FEntityType`) and table classes prefixed with `U` (e.g., `UUserTable`). Row types use `GENERATED_BODY()` and `UPROPERTY()` for full reflection support.\n","frontmatter":{"name":"unreal","description":"SpacetimeDB Unreal Engine client SDK reference. Use when building Unreal Engine clients that connect to SpacetimeDB.","license":"Apache-2.0","metadata":{"author":"clockworklabs","version":"2.0","role":"client","language":"cpp","cursor_globs":"**/*.cpp,**/*.h","cursor_always_apply":true}},"isInternal":false,"tokens":3015,"sizeBytes":12701},{"name":"base_mongodb.md","path":"tools/llm-oneshot/apps/chat-app/prompts/base_mongodb.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/base_mongodb.md","title":"Prompts Skill","category":"anthropic-skill","format":"markdown","content":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/base_mongodb.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/base_mongodb.md)","tokens":300,"sizeBytes":232},{"name":"base_postgres.md","path":"tools/llm-oneshot/apps/chat-app/prompts/base_postgres.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/base_postgres.md","title":"Prompts Skill","category":"anthropic-skill","format":"markdown","content":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/base_postgres.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/base_postgres.md)","tokens":300,"sizeBytes":234},{"name":"base_spacetime.md","path":"tools/llm-oneshot/apps/chat-app/prompts/base_spacetime.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/base_spacetime.md","title":"Prompts Skill","category":"anthropic-skill","format":"markdown","content":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/base_spacetime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/base_spacetime.md)","tokens":300,"sizeBytes":236},{"name":"01_basic.md","path":"tools/llm-oneshot/apps/chat-app/prompts/composed/01_basic.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/01_basic.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/01_basic.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/01_basic.md)","tokens":300,"sizeBytes":243},{"name":"02_scheduled.md","path":"tools/llm-oneshot/apps/chat-app/prompts/composed/02_scheduled.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/02_scheduled.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/02_scheduled.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/02_scheduled.md)","tokens":300,"sizeBytes":251},{"name":"03_realtime.md","path":"tools/llm-oneshot/apps/chat-app/prompts/composed/03_realtime.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/03_realtime.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/03_realtime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/03_realtime.md)","tokens":300,"sizeBytes":249},{"name":"04_reactions.md","path":"tools/llm-oneshot/apps/chat-app/prompts/composed/04_reactions.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/04_reactions.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/04_reactions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/04_reactions.md)","tokens":300,"sizeBytes":251},{"name":"05_edit_history.md","path":"tools/llm-oneshot/apps/chat-app/prompts/composed/05_edit_history.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/05_edit_history.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/05_edit_history.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/05_edit_history.md)","tokens":300,"sizeBytes":257},{"name":"06_permissions.md","path":"tools/llm-oneshot/apps/chat-app/prompts/composed/06_permissions.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/06_permissions.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/06_permissions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/06_permissions.md)","tokens":300,"sizeBytes":255},{"name":"07_presence.md","path":"tools/llm-oneshot/apps/chat-app/prompts/composed/07_presence.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/07_presence.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/07_presence.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/07_presence.md)","tokens":300,"sizeBytes":249},{"name":"08_threading.md","path":"tools/llm-oneshot/apps/chat-app/prompts/composed/08_threading.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/08_threading.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/08_threading.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/08_threading.md)","tokens":300,"sizeBytes":251},{"name":"09_private_rooms.md","path":"tools/llm-oneshot/apps/chat-app/prompts/composed/09_private_rooms.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/09_private_rooms.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/09_private_rooms.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/09_private_rooms.md)","tokens":300,"sizeBytes":259},{"name":"10_activity.md","path":"tools/llm-oneshot/apps/chat-app/prompts/composed/10_activity.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/10_activity.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/10_activity.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/10_activity.md)","tokens":300,"sizeBytes":249},{"name":"11_drafts.md","path":"tools/llm-oneshot/apps/chat-app/prompts/composed/11_drafts.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/11_drafts.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/11_drafts.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/11_drafts.md)","tokens":300,"sizeBytes":245},{"name":"12_anon_migration.md","path":"tools/llm-oneshot/apps/chat-app/prompts/composed/12_anon_migration.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/12_anon_migration.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/12_anon_migration.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/12_anon_migration.md)","tokens":300,"sizeBytes":261},{"name":"13_pinned.md","path":"tools/llm-oneshot/apps/chat-app/prompts/composed/13_pinned.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/13_pinned.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/13_pinned.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/13_pinned.md)","tokens":300,"sizeBytes":245},{"name":"14_profiles.md","path":"tools/llm-oneshot/apps/chat-app/prompts/composed/14_profiles.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/14_profiles.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/14_profiles.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/14_profiles.md)","tokens":300,"sizeBytes":249},{"name":"15_mentions.md","path":"tools/llm-oneshot/apps/chat-app/prompts/composed/15_mentions.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/15_mentions.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/15_mentions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/15_mentions.md)","tokens":300,"sizeBytes":249},{"name":"16_bookmarks.md","path":"tools/llm-oneshot/apps/chat-app/prompts/composed/16_bookmarks.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/16_bookmarks.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/16_bookmarks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/16_bookmarks.md)","tokens":300,"sizeBytes":251},{"name":"17_forwarding.md","path":"tools/llm-oneshot/apps/chat-app/prompts/composed/17_forwarding.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/17_forwarding.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/17_forwarding.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/17_forwarding.md)","tokens":300,"sizeBytes":253},{"name":"18_slowmode.md","path":"tools/llm-oneshot/apps/chat-app/prompts/composed/18_slowmode.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/18_slowmode.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/18_slowmode.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/18_slowmode.md)","tokens":300,"sizeBytes":249},{"name":"19_polls.md","path":"tools/llm-oneshot/apps/chat-app/prompts/composed/19_polls.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/19_polls.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/composed/19_polls.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/composed/19_polls.md)","tokens":300,"sizeBytes":243},{"name":"01_basic.md","path":"tools/llm-oneshot/apps/chat-app/prompts/features/01_basic.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/01_basic.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/01_basic.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/01_basic.md)","tokens":300,"sizeBytes":243},{"name":"02_scheduled.md","path":"tools/llm-oneshot/apps/chat-app/prompts/features/02_scheduled.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/02_scheduled.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/02_scheduled.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/02_scheduled.md)","tokens":300,"sizeBytes":251},{"name":"03_ephemeral.md","path":"tools/llm-oneshot/apps/chat-app/prompts/features/03_ephemeral.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/03_ephemeral.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/03_ephemeral.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/03_ephemeral.md)","tokens":300,"sizeBytes":251},{"name":"04_reactions.md","path":"tools/llm-oneshot/apps/chat-app/prompts/features/04_reactions.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/04_reactions.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/04_reactions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/04_reactions.md)","tokens":300,"sizeBytes":251},{"name":"05_edit_history.md","path":"tools/llm-oneshot/apps/chat-app/prompts/features/05_edit_history.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/05_edit_history.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/05_edit_history.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/05_edit_history.md)","tokens":300,"sizeBytes":257},{"name":"06_permissions.md","path":"tools/llm-oneshot/apps/chat-app/prompts/features/06_permissions.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/06_permissions.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/06_permissions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/06_permissions.md)","tokens":300,"sizeBytes":255},{"name":"07_presence.md","path":"tools/llm-oneshot/apps/chat-app/prompts/features/07_presence.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/07_presence.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/07_presence.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/07_presence.md)","tokens":300,"sizeBytes":249},{"name":"08_threading.md","path":"tools/llm-oneshot/apps/chat-app/prompts/features/08_threading.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/08_threading.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/08_threading.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/08_threading.md)","tokens":300,"sizeBytes":251},{"name":"09_private_rooms.md","path":"tools/llm-oneshot/apps/chat-app/prompts/features/09_private_rooms.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/09_private_rooms.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/09_private_rooms.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/09_private_rooms.md)","tokens":300,"sizeBytes":259},{"name":"10_activity.md","path":"tools/llm-oneshot/apps/chat-app/prompts/features/10_activity.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/10_activity.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/10_activity.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/10_activity.md)","tokens":300,"sizeBytes":249},{"name":"11_drafts.md","path":"tools/llm-oneshot/apps/chat-app/prompts/features/11_drafts.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/11_drafts.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/11_drafts.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/11_drafts.md)","tokens":300,"sizeBytes":245},{"name":"12_anon_migration.md","path":"tools/llm-oneshot/apps/chat-app/prompts/features/12_anon_migration.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/12_anon_migration.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/12_anon_migration.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/12_anon_migration.md)","tokens":300,"sizeBytes":261},{"name":"13_pinned.md","path":"tools/llm-oneshot/apps/chat-app/prompts/features/13_pinned.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/13_pinned.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/13_pinned.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/13_pinned.md)","tokens":300,"sizeBytes":245},{"name":"14_profiles.md","path":"tools/llm-oneshot/apps/chat-app/prompts/features/14_profiles.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/14_profiles.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/14_profiles.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/14_profiles.md)","tokens":300,"sizeBytes":249},{"name":"15_mentions.md","path":"tools/llm-oneshot/apps/chat-app/prompts/features/15_mentions.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/15_mentions.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/15_mentions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/15_mentions.md)","tokens":300,"sizeBytes":249},{"name":"16_bookmarks.md","path":"tools/llm-oneshot/apps/chat-app/prompts/features/16_bookmarks.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/16_bookmarks.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/16_bookmarks.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/16_bookmarks.md)","tokens":300,"sizeBytes":251},{"name":"17_forwarding.md","path":"tools/llm-oneshot/apps/chat-app/prompts/features/17_forwarding.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/17_forwarding.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/17_forwarding.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/17_forwarding.md)","tokens":300,"sizeBytes":253},{"name":"18_slowmode.md","path":"tools/llm-oneshot/apps/chat-app/prompts/features/18_slowmode.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/18_slowmode.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/18_slowmode.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/18_slowmode.md)","tokens":300,"sizeBytes":249},{"name":"19_polls.md","path":"tools/llm-oneshot/apps/chat-app/prompts/features/19_polls.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/19_polls.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/features/19_polls.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/features/19_polls.md)","tokens":300,"sizeBytes":243},{"name":"grading_checklist.md","path":"tools/llm-oneshot/apps/chat-app/prompts/grading_checklist.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/grading_checklist.md","title":"Prompts Skill","category":"anthropic-skill","format":"markdown","content":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/grading_checklist.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/grading_checklist.md)","tokens":300,"sizeBytes":242},{"name":"grading_rubric.md","path":"tools/llm-oneshot/apps/chat-app/prompts/grading_rubric.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/grading_rubric.md","title":"Prompts Skill","category":"anthropic-skill","format":"markdown","content":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/grading_rubric.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/grading_rubric.md)","tokens":300,"sizeBytes":236},{"name":"csharp-spacetime.md","path":"tools/llm-oneshot/apps/chat-app/prompts/language/csharp-spacetime.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/language/csharp-spacetime.md","title":"Language Skill","category":"anthropic-skill","format":"markdown","content":"# Language Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/language/csharp-spacetime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/language/csharp-spacetime.md)","tokens":300,"sizeBytes":259},{"name":"rust-spacetime.md","path":"tools/llm-oneshot/apps/chat-app/prompts/language/rust-spacetime.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/language/rust-spacetime.md","title":"Language Skill","category":"anthropic-skill","format":"markdown","content":"# Language Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/language/rust-spacetime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/language/rust-spacetime.md)","tokens":300,"sizeBytes":255},{"name":"typescript-mongodb.md","path":"tools/llm-oneshot/apps/chat-app/prompts/language/typescript-mongodb.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/language/typescript-mongodb.md","title":"Language Skill","category":"anthropic-skill","format":"markdown","content":"# Language Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/language/typescript-mongodb.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/language/typescript-mongodb.md)","tokens":300,"sizeBytes":263},{"name":"typescript-postgres.md","path":"tools/llm-oneshot/apps/chat-app/prompts/language/typescript-postgres.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/language/typescript-postgres.md","title":"Language Skill","category":"anthropic-skill","format":"markdown","content":"# Language Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/language/typescript-postgres.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/language/typescript-postgres.md)","tokens":300,"sizeBytes":265},{"name":"typescript-spacetime.md","path":"tools/llm-oneshot/apps/chat-app/prompts/language/typescript-spacetime.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/language/typescript-spacetime.md","title":"Language Skill","category":"anthropic-skill","format":"markdown","content":"# Language Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/language/typescript-spacetime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/language/typescript-spacetime.md)","tokens":300,"sizeBytes":267},{"name":"output_instructions.md","path":"tools/llm-oneshot/apps/chat-app/prompts/output_instructions.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/output_instructions.md","title":"Prompts Skill","category":"anthropic-skill","format":"markdown","content":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/output_instructions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/output_instructions.md)","tokens":300,"sizeBytes":246},{"name":"package-lock.json","path":"tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/package-lock.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/package-lock.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/package-lock.json)","tokens":300,"sizeBytes":349},{"name":"package.json","path":"tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/package.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/package.json)","tokens":300,"sizeBytes":339},{"name":"tsconfig.json","path":"tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/tsconfig.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/client/tsconfig.json)","tokens":300,"sizeBytes":341},{"name":"GRADING_RESULTS.md","path":"tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/GRADING_RESULTS.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/GRADING_RESULTS.md","title":"Chat-app-20260108-120000 Skill","category":"anthropic-skill","format":"markdown","content":"# Chat-app-20260108-120000 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/GRADING_RESULTS.md)","tokens":300,"sizeBytes":355},{"name":"package-lock.json","path":"tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/package-lock.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/package-lock.json","title":"Server Skill","category":"anthropic-skill","format":"json","content":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/package-lock.json)","tokens":300,"sizeBytes":349},{"name":"package.json","path":"tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/package.json","title":"Server Skill","category":"anthropic-skill","format":"json","content":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/package.json)","tokens":300,"sizeBytes":339},{"name":"tsconfig.json","path":"tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/tsconfig.json","title":"Server Skill","category":"anthropic-skill","format":"json","content":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/postgres/chat-app-20260108-120000/server/tsconfig.json)","tokens":300,"sizeBytes":341},{"name":"package-lock.json","path":"tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/package-lock.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/package-lock.json","title":"Spacetimedb Skill","category":"anthropic-skill","format":"json","content":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/package-lock.json)","tokens":300,"sizeBytes":382},{"name":"package.json","path":"tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/package.json","title":"Spacetimedb Skill","category":"anthropic-skill","format":"json","content":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/package.json)","tokens":300,"sizeBytes":372},{"name":"tsconfig.json","path":"tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/tsconfig.json","title":"Spacetimedb Skill","category":"anthropic-skill","format":"json","content":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/backend/spacetimedb/tsconfig.json)","tokens":300,"sizeBytes":374},{"name":"package-lock.json","path":"tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/package-lock.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/package-lock.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/package-lock.json)","tokens":300,"sizeBytes":351},{"name":"package.json","path":"tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/package.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/package.json)","tokens":300,"sizeBytes":341},{"name":"tsconfig.json","path":"tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/tsconfig.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/tsconfig.json)","tokens":300,"sizeBytes":343},{"name":"tsconfig.node.json","path":"tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/tsconfig.node.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/tsconfig.node.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/tsconfig.node.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/client/tsconfig.node.json)","tokens":300,"sizeBytes":353},{"name":"GRADING_RESULTS.md","path":"tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/GRADING_RESULTS.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/GRADING_RESULTS.md","title":"Chat-app-20260107-120000 Skill","category":"anthropic-skill","format":"markdown","content":"# Chat-app-20260107-120000 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/GRADING_RESULTS.md)","tokens":300,"sizeBytes":357},{"name":"package-lock.json","path":"tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/package-lock.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/package-lock.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/package-lock.json)","tokens":300,"sizeBytes":339},{"name":"package.json","path":"tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/package.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/package.json)","tokens":300,"sizeBytes":329},{"name":"tsconfig.json","path":"tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/tsconfig.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/client/tsconfig.json)","tokens":300,"sizeBytes":331},{"name":"GRADING_RESULTS.md","path":"tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/GRADING_RESULTS.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/GRADING_RESULTS.md","title":"Chat-app-20260108-140800 Skill","category":"anthropic-skill","format":"markdown","content":"# Chat-app-20260108-140800 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/GRADING_RESULTS.md)","tokens":300,"sizeBytes":345},{"name":"package-lock.json","path":"tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/package-lock.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/package-lock.json","title":"Server Skill","category":"anthropic-skill","format":"json","content":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/package-lock.json)","tokens":300,"sizeBytes":339},{"name":"package.json","path":"tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/package.json","title":"Server Skill","category":"anthropic-skill","format":"json","content":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/package.json)","tokens":300,"sizeBytes":329},{"name":"tsconfig.json","path":"tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/tsconfig.json","title":"Server Skill","category":"anthropic-skill","format":"json","content":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/postgres/chat-app-20260108-140800/server/tsconfig.json)","tokens":300,"sizeBytes":331},{"name":"package-lock.json","path":"tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/package-lock.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/package-lock.json","title":"Spacetimedb Skill","category":"anthropic-skill","format":"json","content":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/package-lock.json)","tokens":300,"sizeBytes":372},{"name":"package.json","path":"tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/package.json","title":"Spacetimedb Skill","category":"anthropic-skill","format":"json","content":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/package.json)","tokens":300,"sizeBytes":362},{"name":"tsconfig.json","path":"tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/tsconfig.json","title":"Spacetimedb Skill","category":"anthropic-skill","format":"json","content":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/backend/spacetimedb/tsconfig.json)","tokens":300,"sizeBytes":364},{"name":"package-lock.json","path":"tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/package-lock.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/package-lock.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/package-lock.json)","tokens":300,"sizeBytes":341},{"name":"package.json","path":"tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/package.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/package.json)","tokens":300,"sizeBytes":331},{"name":"tsconfig.json","path":"tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/tsconfig.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/tsconfig.json)","tokens":300,"sizeBytes":333},{"name":"tsconfig.node.json","path":"tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/tsconfig.node.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/tsconfig.node.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/tsconfig.node.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/client/tsconfig.node.json)","tokens":300,"sizeBytes":343},{"name":"GRADING_RESULTS.md","path":"tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/GRADING_RESULTS.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/GRADING_RESULTS.md","title":"Chat-app-20260107-092240 Skill","category":"anthropic-skill","format":"markdown","content":"# Chat-app-20260107-092240 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gpt-5-2/spacetime/chat-app-20260107-092240/GRADING_RESULTS.md)","tokens":300,"sizeBytes":347},{"name":"package-lock.json","path":"tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/package-lock.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/package-lock.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/package-lock.json)","tokens":300,"sizeBytes":343},{"name":"package.json","path":"tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/package.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/package.json)","tokens":300,"sizeBytes":333},{"name":"tsconfig.json","path":"tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/tsconfig.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/tsconfig.json)","tokens":300,"sizeBytes":335},{"name":"tsconfig.node.json","path":"tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/tsconfig.node.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/tsconfig.node.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/tsconfig.node.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/client/tsconfig.node.json)","tokens":300,"sizeBytes":345},{"name":"GRADING_RESULTS.md","path":"tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/GRADING_RESULTS.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/GRADING_RESULTS.md","title":"Chat-app-20260128-112222 Skill","category":"anthropic-skill","format":"markdown","content":"# Chat-app-20260128-112222 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/GRADING_RESULTS.md)","tokens":300,"sizeBytes":349},{"name":"package-lock.json","path":"tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/package-lock.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/package-lock.json","title":"Server Skill","category":"anthropic-skill","format":"json","content":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/package-lock.json)","tokens":300,"sizeBytes":343},{"name":"package.json","path":"tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/package.json","title":"Server Skill","category":"anthropic-skill","format":"json","content":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/package.json)","tokens":300,"sizeBytes":333},{"name":"tsconfig.json","path":"tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/tsconfig.json","title":"Server Skill","category":"anthropic-skill","format":"json","content":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/server/tsconfig.json)","tokens":300,"sizeBytes":335},{"name":"package-lock.json","path":"tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/package-lock.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/package-lock.json","title":"Spacetimedb Skill","category":"anthropic-skill","format":"json","content":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/package-lock.json)","tokens":300,"sizeBytes":376},{"name":"package.json","path":"tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/package.json","title":"Spacetimedb Skill","category":"anthropic-skill","format":"json","content":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/package.json)","tokens":300,"sizeBytes":366},{"name":"tsconfig.json","path":"tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/tsconfig.json","title":"Spacetimedb Skill","category":"anthropic-skill","format":"json","content":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/backend/spacetimedb/tsconfig.json)","tokens":300,"sizeBytes":368},{"name":"package-lock.json","path":"tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/package-lock.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/package-lock.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/package-lock.json)","tokens":300,"sizeBytes":345},{"name":"package.json","path":"tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/package.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/package.json)","tokens":300,"sizeBytes":335},{"name":"tsconfig.json","path":"tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/tsconfig.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/tsconfig.json)","tokens":300,"sizeBytes":337},{"name":"tsconfig.node.json","path":"tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/tsconfig.node.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/tsconfig.node.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/tsconfig.node.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/client/tsconfig.node.json)","tokens":300,"sizeBytes":347},{"name":"GRADING_RESULTS.md","path":"tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/GRADING_RESULTS.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/GRADING_RESULTS.md","title":"Chat-app-20260107-120000 Skill","category":"anthropic-skill","format":"markdown","content":"# Chat-app-20260107-120000 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/GRADING_RESULTS.md)","tokens":300,"sizeBytes":351},{"name":"BENCHMARK_COMPARISON_REPORT.md","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/BENCHMARK_COMPARISON_REPORT.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/BENCHMARK_COMPARISON_REPORT.md","title":"Opus-4-5 Skill","category":"anthropic-skill","format":"markdown","content":"# Opus-4-5 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/BENCHMARK_COMPARISON_REPORT.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/BENCHMARK_COMPARISON_REPORT.md)","tokens":300,"sizeBytes":287},{"name":"package-lock.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/package-lock.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/package-lock.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/package-lock.json)","tokens":300,"sizeBytes":341},{"name":"package.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/package.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/package.json)","tokens":300,"sizeBytes":331},{"name":"tsconfig.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/tsconfig.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/tsconfig.json)","tokens":300,"sizeBytes":333},{"name":"tsconfig.node.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/tsconfig.node.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/tsconfig.node.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/tsconfig.node.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/client/tsconfig.node.json)","tokens":300,"sizeBytes":343},{"name":"GRADING_RESULTS.md","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/GRADING_RESULTS.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/GRADING_RESULTS.md","title":"Chat-app-20260104-120000 Skill","category":"anthropic-skill","format":"markdown","content":"# Chat-app-20260104-120000 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/GRADING_RESULTS.md)","tokens":300,"sizeBytes":347},{"name":"package-lock.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/package-lock.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/package-lock.json","title":"Server Skill","category":"anthropic-skill","format":"json","content":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/package-lock.json)","tokens":300,"sizeBytes":341},{"name":"package.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/package.json","title":"Server Skill","category":"anthropic-skill","format":"json","content":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/package.json)","tokens":300,"sizeBytes":331},{"name":"tsconfig.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/tsconfig.json","title":"Server Skill","category":"anthropic-skill","format":"json","content":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/server/tsconfig.json)","tokens":300,"sizeBytes":333},{"name":"package-lock.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/package-lock.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/package-lock.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/package-lock.json)","tokens":300,"sizeBytes":341},{"name":"package.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/package.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/package.json)","tokens":300,"sizeBytes":331},{"name":"tsconfig.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/tsconfig.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/client/tsconfig.json)","tokens":300,"sizeBytes":333},{"name":"GRADING_RESULTS.md","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/GRADING_RESULTS.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/GRADING_RESULTS.md","title":"Chat-app-20260104-160000 Skill","category":"anthropic-skill","format":"markdown","content":"# Chat-app-20260104-160000 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/GRADING_RESULTS.md)","tokens":300,"sizeBytes":347},{"name":"package.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/server/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/server/package.json","title":"Server Skill","category":"anthropic-skill","format":"json","content":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/server/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/server/package.json)","tokens":300,"sizeBytes":331},{"name":"tsconfig.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/server/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/server/tsconfig.json","title":"Server Skill","category":"anthropic-skill","format":"json","content":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/server/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/server/tsconfig.json)","tokens":300,"sizeBytes":333},{"name":"package.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/client/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/client/package.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/client/package.json)","tokens":300,"sizeBytes":331},{"name":"tsconfig.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/client/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/client/tsconfig.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/client/tsconfig.json)","tokens":300,"sizeBytes":333},{"name":"GRADING_RESULTS.md","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/GRADING_RESULTS.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/GRADING_RESULTS.md","title":"Chat-app-20260104-180000 Skill","category":"anthropic-skill","format":"markdown","content":"# Chat-app-20260104-180000 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/GRADING_RESULTS.md)","tokens":300,"sizeBytes":347},{"name":"package.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/server/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/server/package.json","title":"Server Skill","category":"anthropic-skill","format":"json","content":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/server/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/server/package.json)","tokens":300,"sizeBytes":331},{"name":"tsconfig.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/server/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/server/tsconfig.json","title":"Server Skill","category":"anthropic-skill","format":"json","content":"# Server Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/server/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/server/tsconfig.json)","tokens":300,"sizeBytes":333},{"name":"package-lock.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/package-lock.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/package-lock.json","title":"Spacetimedb Skill","category":"anthropic-skill","format":"json","content":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/package-lock.json)","tokens":300,"sizeBytes":374},{"name":"package.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/package.json","title":"Spacetimedb Skill","category":"anthropic-skill","format":"json","content":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/package.json)","tokens":300,"sizeBytes":364},{"name":"tsconfig.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/tsconfig.json","title":"Spacetimedb Skill","category":"anthropic-skill","format":"json","content":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/backend/spacetimedb/tsconfig.json)","tokens":300,"sizeBytes":366},{"name":"package-lock.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/package-lock.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/package-lock.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/package-lock.json)","tokens":300,"sizeBytes":343},{"name":"package.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/package.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/package.json)","tokens":300,"sizeBytes":333},{"name":"tsconfig.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/tsconfig.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/client/tsconfig.json)","tokens":300,"sizeBytes":335},{"name":"GRADING_RESULTS.md","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/GRADING_RESULTS.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/GRADING_RESULTS.md","title":"Chat-app-20260102-162918 Skill","category":"anthropic-skill","format":"markdown","content":"# Chat-app-20260102-162918 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/GRADING_RESULTS.md)","tokens":300,"sizeBytes":349},{"name":"package-lock.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/package-lock.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/package-lock.json","title":"Spacetimedb Skill","category":"anthropic-skill","format":"json","content":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/package-lock.json)","tokens":300,"sizeBytes":374},{"name":"package.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/package.json","title":"Spacetimedb Skill","category":"anthropic-skill","format":"json","content":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/package.json)","tokens":300,"sizeBytes":364},{"name":"tsconfig.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/tsconfig.json","title":"Spacetimedb Skill","category":"anthropic-skill","format":"json","content":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/backend/spacetimedb/tsconfig.json)","tokens":300,"sizeBytes":366},{"name":"package-lock.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/package-lock.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/package-lock.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/package-lock.json)","tokens":300,"sizeBytes":343},{"name":"package.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/package.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/package.json)","tokens":300,"sizeBytes":333},{"name":"tsconfig.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/tsconfig.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/client/tsconfig.json)","tokens":300,"sizeBytes":335},{"name":"GRADING_RESULTS.md","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/GRADING_RESULTS.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/GRADING_RESULTS.md","title":"Chat-app-20260102-170500 Skill","category":"anthropic-skill","format":"markdown","content":"# Chat-app-20260102-170500 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/GRADING_RESULTS.md)","tokens":300,"sizeBytes":349},{"name":"package-lock.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/package-lock.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/package-lock.json","title":"Spacetimedb Skill","category":"anthropic-skill","format":"json","content":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/package-lock.json)","tokens":300,"sizeBytes":374},{"name":"package.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/package.json","title":"Spacetimedb Skill","category":"anthropic-skill","format":"json","content":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/package.json)","tokens":300,"sizeBytes":364},{"name":"tsconfig.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/tsconfig.json","title":"Spacetimedb Skill","category":"anthropic-skill","format":"json","content":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/backend/spacetimedb/tsconfig.json)","tokens":300,"sizeBytes":366},{"name":"package-lock.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/package-lock.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/package-lock.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/package-lock.json)","tokens":300,"sizeBytes":343},{"name":"package.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/package.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/package.json)","tokens":300,"sizeBytes":333},{"name":"tsconfig.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/tsconfig.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/client/tsconfig.json)","tokens":300,"sizeBytes":335},{"name":"GRADING_RESULTS.md","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/GRADING_RESULTS.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/GRADING_RESULTS.md","title":"Chat-app-20260102-171317 Skill","category":"anthropic-skill","format":"markdown","content":"# Chat-app-20260102-171317 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/GRADING_RESULTS.md)","tokens":300,"sizeBytes":349},{"name":"package-lock.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/package-lock.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/package-lock.json","title":"Spacetimedb Skill","category":"anthropic-skill","format":"json","content":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/package-lock.json)","tokens":300,"sizeBytes":374},{"name":"package.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/package.json","title":"Spacetimedb Skill","category":"anthropic-skill","format":"json","content":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/package.json)","tokens":300,"sizeBytes":364},{"name":"tsconfig.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/tsconfig.json","title":"Spacetimedb Skill","category":"anthropic-skill","format":"json","content":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/backend/spacetimedb/tsconfig.json)","tokens":300,"sizeBytes":366},{"name":"package-lock.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/package-lock.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/package-lock.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/package-lock.json)","tokens":300,"sizeBytes":343},{"name":"package.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/package.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/package.json)","tokens":300,"sizeBytes":333},{"name":"tsconfig.json","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/tsconfig.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/client/tsconfig.json)","tokens":300,"sizeBytes":335},{"name":"GRADING_RESULTS.md","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/GRADING_RESULTS.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/GRADING_RESULTS.md","title":"Chat-app-20260105-180000 Skill","category":"anthropic-skill","format":"markdown","content":"# Chat-app-20260105-180000 Skill\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/GRADING_RESULTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/GRADING_RESULTS.md)","tokens":300,"sizeBytes":349},{"name":"base_postgres.md","path":"tools/llm-oneshot/apps/paint-app/prompts/base_postgres.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/base_postgres.md","title":"Prompts Skill","category":"anthropic-skill","format":"markdown","content":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/base_postgres.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/base_postgres.md)","tokens":300,"sizeBytes":236},{"name":"base_spacetime.md","path":"tools/llm-oneshot/apps/paint-app/prompts/base_spacetime.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/base_spacetime.md","title":"Prompts Skill","category":"anthropic-skill","format":"markdown","content":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/base_spacetime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/base_spacetime.md)","tokens":300,"sizeBytes":238},{"name":"01_basic.md","path":"tools/llm-oneshot/apps/paint-app/prompts/composed/01_basic.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/01_basic.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/01_basic.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/01_basic.md)","tokens":300,"sizeBytes":245},{"name":"02_shapes.md","path":"tools/llm-oneshot/apps/paint-app/prompts/composed/02_shapes.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/02_shapes.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/02_shapes.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/02_shapes.md)","tokens":300,"sizeBytes":247},{"name":"03_selection.md","path":"tools/llm-oneshot/apps/paint-app/prompts/composed/03_selection.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/03_selection.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/03_selection.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/03_selection.md)","tokens":300,"sizeBytes":253},{"name":"04_layers.md","path":"tools/llm-oneshot/apps/paint-app/prompts/composed/04_layers.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/04_layers.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/04_layers.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/04_layers.md)","tokens":300,"sizeBytes":247},{"name":"05_presence.md","path":"tools/llm-oneshot/apps/paint-app/prompts/composed/05_presence.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/05_presence.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/05_presence.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/05_presence.md)","tokens":300,"sizeBytes":251},{"name":"06_comments.md","path":"tools/llm-oneshot/apps/paint-app/prompts/composed/06_comments.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/06_comments.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/06_comments.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/06_comments.md)","tokens":300,"sizeBytes":251},{"name":"07_versions.md","path":"tools/llm-oneshot/apps/paint-app/prompts/composed/07_versions.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/07_versions.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/07_versions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/07_versions.md)","tokens":300,"sizeBytes":251},{"name":"08_permissions.md","path":"tools/llm-oneshot/apps/paint-app/prompts/composed/08_permissions.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/08_permissions.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/08_permissions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/08_permissions.md)","tokens":300,"sizeBytes":257},{"name":"09_follow.md","path":"tools/llm-oneshot/apps/paint-app/prompts/composed/09_follow.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/09_follow.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/09_follow.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/09_follow.md)","tokens":300,"sizeBytes":247},{"name":"10_activity.md","path":"tools/llm-oneshot/apps/paint-app/prompts/composed/10_activity.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/10_activity.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/10_activity.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/10_activity.md)","tokens":300,"sizeBytes":251},{"name":"11_sharing.md","path":"tools/llm-oneshot/apps/paint-app/prompts/composed/11_sharing.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/11_sharing.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/11_sharing.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/11_sharing.md)","tokens":300,"sizeBytes":249},{"name":"12_full.md","path":"tools/llm-oneshot/apps/paint-app/prompts/composed/12_full.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/12_full.md","title":"Composed Skill","category":"anthropic-skill","format":"markdown","content":"# Composed Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/composed/12_full.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/composed/12_full.md)","tokens":300,"sizeBytes":243},{"name":"01_basic.md","path":"tools/llm-oneshot/apps/paint-app/prompts/features/01_basic.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/01_basic.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/01_basic.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/01_basic.md)","tokens":300,"sizeBytes":245},{"name":"02_cursor_indicators.md","path":"tools/llm-oneshot/apps/paint-app/prompts/features/02_cursor_indicators.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/02_cursor_indicators.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/02_cursor_indicators.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/02_cursor_indicators.md)","tokens":300,"sizeBytes":269},{"name":"03_shapes.md","path":"tools/llm-oneshot/apps/paint-app/prompts/features/03_shapes.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/03_shapes.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/03_shapes.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/03_shapes.md)","tokens":300,"sizeBytes":247},{"name":"04_selection.md","path":"tools/llm-oneshot/apps/paint-app/prompts/features/04_selection.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/04_selection.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/04_selection.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/04_selection.md)","tokens":300,"sizeBytes":253},{"name":"05_layers_locking.md","path":"tools/llm-oneshot/apps/paint-app/prompts/features/05_layers_locking.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/05_layers_locking.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/05_layers_locking.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/05_layers_locking.md)","tokens":300,"sizeBytes":263},{"name":"06_presence.md","path":"tools/llm-oneshot/apps/paint-app/prompts/features/06_presence.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/06_presence.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/06_presence.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/06_presence.md)","tokens":300,"sizeBytes":251},{"name":"07_comments.md","path":"tools/llm-oneshot/apps/paint-app/prompts/features/07_comments.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/07_comments.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/07_comments.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/07_comments.md)","tokens":300,"sizeBytes":251},{"name":"08_version_history.md","path":"tools/llm-oneshot/apps/paint-app/prompts/features/08_version_history.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/08_version_history.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/08_version_history.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/08_version_history.md)","tokens":300,"sizeBytes":265},{"name":"09_realtime_permissions.md","path":"tools/llm-oneshot/apps/paint-app/prompts/features/09_realtime_permissions.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/09_realtime_permissions.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/09_realtime_permissions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/09_realtime_permissions.md)","tokens":300,"sizeBytes":275},{"name":"10_follow_mode.md","path":"tools/llm-oneshot/apps/paint-app/prompts/features/10_follow_mode.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/10_follow_mode.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/10_follow_mode.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/10_follow_mode.md)","tokens":300,"sizeBytes":257},{"name":"11_activity_feed.md","path":"tools/llm-oneshot/apps/paint-app/prompts/features/11_activity_feed.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/11_activity_feed.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/11_activity_feed.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/11_activity_feed.md)","tokens":300,"sizeBytes":261},{"name":"12_private_canvases.md","path":"tools/llm-oneshot/apps/paint-app/prompts/features/12_private_canvases.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/12_private_canvases.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/12_private_canvases.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/12_private_canvases.md)","tokens":300,"sizeBytes":267},{"name":"13_canvas_chat.md","path":"tools/llm-oneshot/apps/paint-app/prompts/features/13_canvas_chat.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/13_canvas_chat.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/13_canvas_chat.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/13_canvas_chat.md)","tokens":300,"sizeBytes":257},{"name":"14_auto_cleanup.md","path":"tools/llm-oneshot/apps/paint-app/prompts/features/14_auto_cleanup.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/14_auto_cleanup.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/14_auto_cleanup.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/14_auto_cleanup.md)","tokens":300,"sizeBytes":259},{"name":"15_text_sticky.md","path":"tools/llm-oneshot/apps/paint-app/prompts/features/15_text_sticky.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/15_text_sticky.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/15_text_sticky.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/15_text_sticky.md)","tokens":300,"sizeBytes":257},{"name":"16_keyboard_shortcuts.md","path":"tools/llm-oneshot/apps/paint-app/prompts/features/16_keyboard_shortcuts.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/16_keyboard_shortcuts.md","title":"Features Skill","category":"anthropic-skill","format":"markdown","content":"# Features Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/features/16_keyboard_shortcuts.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/features/16_keyboard_shortcuts.md)","tokens":300,"sizeBytes":271},{"name":"grading_checklist.md","path":"tools/llm-oneshot/apps/paint-app/prompts/grading_checklist.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/grading_checklist.md","title":"Prompts Skill","category":"anthropic-skill","format":"markdown","content":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/grading_checklist.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/grading_checklist.md)","tokens":300,"sizeBytes":244},{"name":"grading_rubric.md","path":"tools/llm-oneshot/apps/paint-app/prompts/grading_rubric.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/grading_rubric.md","title":"Prompts Skill","category":"anthropic-skill","format":"markdown","content":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/grading_rubric.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/grading_rubric.md)","tokens":300,"sizeBytes":238},{"name":"csharp-spacetime.md","path":"tools/llm-oneshot/apps/paint-app/prompts/language/csharp-spacetime.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/language/csharp-spacetime.md","title":"Language Skill","category":"anthropic-skill","format":"markdown","content":"# Language Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/language/csharp-spacetime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/language/csharp-spacetime.md)","tokens":300,"sizeBytes":261},{"name":"rust-spacetime.md","path":"tools/llm-oneshot/apps/paint-app/prompts/language/rust-spacetime.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/language/rust-spacetime.md","title":"Language Skill","category":"anthropic-skill","format":"markdown","content":"# Language Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/language/rust-spacetime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/language/rust-spacetime.md)","tokens":300,"sizeBytes":257},{"name":"typescript-postgres.md","path":"tools/llm-oneshot/apps/paint-app/prompts/language/typescript-postgres.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/language/typescript-postgres.md","title":"Language Skill","category":"anthropic-skill","format":"markdown","content":"# Language Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/language/typescript-postgres.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/language/typescript-postgres.md)","tokens":300,"sizeBytes":267},{"name":"typescript-spacetime.md","path":"tools/llm-oneshot/apps/paint-app/prompts/language/typescript-spacetime.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/language/typescript-spacetime.md","title":"Language Skill","category":"anthropic-skill","format":"markdown","content":"# Language Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/language/typescript-spacetime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/language/typescript-spacetime.md)","tokens":300,"sizeBytes":269},{"name":"output_instructions.md","path":"tools/llm-oneshot/apps/paint-app/prompts/output_instructions.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/output_instructions.md","title":"Prompts Skill","category":"anthropic-skill","format":"markdown","content":"# Prompts Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/output_instructions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/output_instructions.md)","tokens":300,"sizeBytes":248},{"name":"package-lock.json","path":"tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/package-lock.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/package-lock.json","title":"Spacetimedb Skill","category":"anthropic-skill","format":"json","content":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/package-lock.json)","tokens":300,"sizeBytes":378},{"name":"package.json","path":"tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/package.json","title":"Spacetimedb Skill","category":"anthropic-skill","format":"json","content":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/package.json)","tokens":300,"sizeBytes":368},{"name":"tsconfig.json","path":"tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/tsconfig.json","title":"Spacetimedb Skill","category":"anthropic-skill","format":"json","content":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/backend/spacetimedb/tsconfig.json)","tokens":300,"sizeBytes":370},{"name":"package-lock.json","path":"tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/package-lock.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/package-lock.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/package-lock.json)","tokens":300,"sizeBytes":347},{"name":"package.json","path":"tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/package.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/package.json)","tokens":300,"sizeBytes":337},{"name":"tsconfig.json","path":"tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/tsconfig.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260109-164112/client/tsconfig.json)","tokens":300,"sizeBytes":339},{"name":"package-lock.json","path":"tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/package-lock.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/package-lock.json","title":"Spacetimedb Skill","category":"anthropic-skill","format":"json","content":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/package-lock.json)","tokens":300,"sizeBytes":378},{"name":"package.json","path":"tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/package.json","title":"Spacetimedb Skill","category":"anthropic-skill","format":"json","content":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/package.json)","tokens":300,"sizeBytes":368},{"name":"tsconfig.json","path":"tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/tsconfig.json","title":"Spacetimedb Skill","category":"anthropic-skill","format":"json","content":"# Spacetimedb Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/backend/spacetimedb/tsconfig.json)","tokens":300,"sizeBytes":370},{"name":"package-lock.json","path":"tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/package-lock.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/package-lock.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/package-lock.json)","tokens":300,"sizeBytes":347},{"name":"package.json","path":"tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/package.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/package.json)","tokens":300,"sizeBytes":337},{"name":"tsconfig.json","path":"tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/tsconfig.json","title":"Client Skill","category":"anthropic-skill","format":"json","content":"# Client Skill\n\nPath: `tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/typescript/opus-4-5/spacetime/paint-app-20260112-154500/client/tsconfig.json)","tokens":300,"sizeBytes":339},{"name":"package-lock.json","path":"tools/llm-oneshot/package-lock.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/package-lock.json","title":"Llm-oneshot Skill","category":"anthropic-skill","format":"json","content":"# Llm-oneshot Skill\n\nPath: `tools/llm-oneshot/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/package-lock.json)","tokens":300,"sizeBytes":196},{"name":"package.json","path":"tools/llm-oneshot/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/package.json","title":"Llm-oneshot Skill","category":"anthropic-skill","format":"json","content":"# Llm-oneshot Skill\n\nPath: `tools/llm-oneshot/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/package.json)","tokens":300,"sizeBytes":186},{"name":"mongodb.md","path":"tools/llm-sequential-upgrade/backends/mongodb.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/backends/mongodb.md","title":"Backends Skill","category":"anthropic-skill","format":"markdown","content":"# Backends Skill\n\nPath: `tools/llm-sequential-upgrade/backends/mongodb.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/backends/mongodb.md)","tokens":300,"sizeBytes":219},{"name":"postgres.md","path":"tools/llm-sequential-upgrade/backends/postgres.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/backends/postgres.md","title":"Backends Skill","category":"anthropic-skill","format":"markdown","content":"# Backends Skill\n\nPath: `tools/llm-sequential-upgrade/backends/postgres.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/backends/postgres.md)","tokens":300,"sizeBytes":221},{"name":"spacetime-templates.md","path":"tools/llm-sequential-upgrade/backends/spacetime-templates.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/backends/spacetime-templates.md","title":"Backends Skill","category":"anthropic-skill","format":"markdown","content":"# Backends Skill\n\nPath: `tools/llm-sequential-upgrade/backends/spacetime-templates.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/backends/spacetime-templates.md)","tokens":300,"sizeBytes":243},{"name":"spacetime.md","path":"tools/llm-sequential-upgrade/backends/spacetime.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/backends/spacetime.md","title":"Backends Skill","category":"anthropic-skill","format":"markdown","content":"# Backends Skill\n\nPath: `tools/llm-sequential-upgrade/backends/spacetime.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/backends/spacetime.md)","tokens":300,"sizeBytes":223},{"name":"CLAUDE.md","path":"tools/llm-sequential-upgrade/CLAUDE.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/CLAUDE.md","title":"Llm-sequential-upgrade Skill","category":"anthropic-skill","format":"markdown","content":"# Llm-sequential-upgrade Skill\n\nPath: `tools/llm-sequential-upgrade/CLAUDE.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/CLAUDE.md)","tokens":300,"sizeBytes":213},{"name":"DEVELOP.md","path":"tools/llm-sequential-upgrade/DEVELOP.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/DEVELOP.md","title":"Llm-sequential-upgrade Skill","category":"anthropic-skill","format":"markdown","content":"# Llm-sequential-upgrade Skill\n\nPath: `tools/llm-sequential-upgrade/DEVELOP.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/DEVELOP.md)","tokens":300,"sizeBytes":215},{"name":"docker-compose.otel.yaml","path":"tools/llm-sequential-upgrade/docker-compose.otel.yaml","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/docker-compose.otel.yaml","title":"Llm-sequential-upgrade Skill","category":"anthropic-skill","format":"yaml","content":"# Llm-sequential-upgrade Skill\n\nPath: `tools/llm-sequential-upgrade/docker-compose.otel.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/docker-compose.otel.yaml)","tokens":300,"sizeBytes":243},{"name":"GRADING_WORKFLOW.md","path":"tools/llm-sequential-upgrade/GRADING_WORKFLOW.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/GRADING_WORKFLOW.md","title":"Llm-sequential-upgrade Skill","category":"anthropic-skill","format":"markdown","content":"# Llm-sequential-upgrade Skill\n\nPath: `tools/llm-sequential-upgrade/GRADING_WORKFLOW.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/GRADING_WORKFLOW.md)","tokens":300,"sizeBytes":233},{"name":"GRADING.md","path":"tools/llm-sequential-upgrade/GRADING.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/GRADING.md","title":"Llm-sequential-upgrade Skill","category":"anthropic-skill","format":"markdown","content":"# Llm-sequential-upgrade Skill\n\nPath: `tools/llm-sequential-upgrade/GRADING.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/GRADING.md)","tokens":300,"sizeBytes":215},{"name":"otel-collector-config.yaml","path":"tools/llm-sequential-upgrade/otel-collector-config.yaml","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/otel-collector-config.yaml","title":"Llm-sequential-upgrade Skill","category":"anthropic-skill","format":"yaml","content":"# Llm-sequential-upgrade Skill\n\nPath: `tools/llm-sequential-upgrade/otel-collector-config.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/otel-collector-config.yaml)","tokens":300,"sizeBytes":247},{"name":"METHODOLOGY.md","path":"tools/llm-sequential-upgrade/perf-benchmark/optimized-reference/METHODOLOGY.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/perf-benchmark/optimized-reference/METHODOLOGY.md","title":"Optimized-reference Skill","category":"anthropic-skill","format":"markdown","content":"# Optimized-reference Skill\n\nPath: `tools/llm-sequential-upgrade/perf-benchmark/optimized-reference/METHODOLOGY.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/perf-benchmark/optimized-reference/METHODOLOGY.md)","tokens":300,"sizeBytes":290},{"name":"package-lock.json","path":"tools/llm-sequential-upgrade/perf-benchmark/package-lock.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/perf-benchmark/package-lock.json","title":"Perf-benchmark Skill","category":"anthropic-skill","format":"json","content":"# Perf-benchmark Skill\n\nPath: `tools/llm-sequential-upgrade/perf-benchmark/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/perf-benchmark/package-lock.json)","tokens":300,"sizeBytes":251},{"name":"package.json","path":"tools/llm-sequential-upgrade/perf-benchmark/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/perf-benchmark/package.json","title":"Perf-benchmark Skill","category":"anthropic-skill","format":"json","content":"# Perf-benchmark Skill\n\nPath: `tools/llm-sequential-upgrade/perf-benchmark/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/perf-benchmark/package.json)","tokens":300,"sizeBytes":241},{"name":"tsconfig.json","path":"tools/llm-sequential-upgrade/perf-benchmark/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/perf-benchmark/tsconfig.json","title":"Perf-benchmark Skill","category":"anthropic-skill","format":"json","content":"# Perf-benchmark Skill\n\nPath: `tools/llm-sequential-upgrade/perf-benchmark/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/perf-benchmark/tsconfig.json)","tokens":300,"sizeBytes":243},{"name":"RUNBOOK.md","path":"tools/llm-sequential-upgrade/RUNBOOK.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/RUNBOOK.md","title":"Llm-sequential-upgrade Skill","category":"anthropic-skill","format":"markdown","content":"# Llm-sequential-upgrade Skill\n\nPath: `tools/llm-sequential-upgrade/RUNBOOK.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/RUNBOOK.md)","tokens":300,"sizeBytes":215},{"name":"BUG_REPORT.template.md","path":"tools/llm-sequential-upgrade/templates/BUG_REPORT.template.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/templates/BUG_REPORT.template.md","title":"Templates Skill","category":"anthropic-skill","format":"markdown","content":"# Templates Skill\n\nPath: `tools/llm-sequential-upgrade/templates/BUG_REPORT.template.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/templates/BUG_REPORT.template.md)","tokens":300,"sizeBytes":246},{"name":"ITERATION_LOG.template.md","path":"tools/llm-sequential-upgrade/templates/ITERATION_LOG.template.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/templates/ITERATION_LOG.template.md","title":"Templates Skill","category":"anthropic-skill","format":"markdown","content":"# Templates Skill\n\nPath: `tools/llm-sequential-upgrade/templates/ITERATION_LOG.template.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/templates/ITERATION_LOG.template.md)","tokens":300,"sizeBytes":252},{"name":"package.json","path":"tools/templates/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/templates/package.json","title":"Templates Skill","category":"anthropic-skill","format":"json","content":"# Templates Skill\n\nPath: `tools/templates/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/templates/package.json)","tokens":300,"sizeBytes":180},{"name":"global.json","path":"tools/xtask-llm-benchmark/src/templates/csharp/server/global.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/xtask-llm-benchmark/src/templates/csharp/server/global.json","title":"Server Skill","category":"anthropic-skill","format":"json","content":"# Server Skill\n\nPath: `tools/xtask-llm-benchmark/src/templates/csharp/server/global.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/xtask-llm-benchmark/src/templates/csharp/server/global.json)","tokens":300,"sizeBytes":251},{"name":"package.json","path":"tools/xtask-llm-benchmark/src/templates/typescript/server/package.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/xtask-llm-benchmark/src/templates/typescript/server/package.json","title":"Server Skill","category":"anthropic-skill","format":"json","content":"# Server Skill\n\nPath: `tools/xtask-llm-benchmark/src/templates/typescript/server/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/xtask-llm-benchmark/src/templates/typescript/server/package.json)","tokens":300,"sizeBytes":261},{"name":"tsconfig.json","path":"tools/xtask-llm-benchmark/src/templates/typescript/server/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/xtask-llm-benchmark/src/templates/typescript/server/tsconfig.json","title":"Server Skill","category":"anthropic-skill","format":"json","content":"# Server Skill\n\nPath: `tools/xtask-llm-benchmark/src/templates/typescript/server/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/xtask-llm-benchmark/src/templates/typescript/server/tsconfig.json)","tokens":300,"sizeBytes":263},{"name":"benchmark.mdc","path":"tools/llm-oneshot/.cursor/rules/benchmark.mdc","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/benchmark.mdc","title":"Cursor Rule: benchmark","category":"cursor-rule","format":"mdc","content":"# Cursor Rule: benchmark\n\nPath: `tools/llm-oneshot/.cursor/rules/benchmark.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/benchmark.mdc)","tokens":300,"sizeBytes":221},{"name":"deployment.mdc","path":"tools/llm-oneshot/.cursor/rules/deployment.mdc","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/deployment.mdc","title":"Cursor Rule: deployment","category":"cursor-rule","format":"mdc","content":"# Cursor Rule: deployment\n\nPath: `tools/llm-oneshot/.cursor/rules/deployment.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/deployment.mdc)","tokens":300,"sizeBytes":224},{"name":"frontend-csharp.mdc","path":"tools/llm-oneshot/.cursor/rules/frontend-csharp.mdc","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/frontend-csharp.mdc","title":"Cursor Rule: frontend-csharp","category":"cursor-rule","format":"mdc","content":"# Cursor Rule: frontend-csharp\n\nPath: `tools/llm-oneshot/.cursor/rules/frontend-csharp.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/frontend-csharp.mdc)","tokens":300,"sizeBytes":239},{"name":"frontend-rust.mdc","path":"tools/llm-oneshot/.cursor/rules/frontend-rust.mdc","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/frontend-rust.mdc","title":"Cursor Rule: frontend-rust","category":"cursor-rule","format":"mdc","content":"# Cursor Rule: frontend-rust\n\nPath: `tools/llm-oneshot/.cursor/rules/frontend-rust.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/frontend-rust.mdc)","tokens":300,"sizeBytes":233},{"name":"frontend-typescript.mdc","path":"tools/llm-oneshot/.cursor/rules/frontend-typescript.mdc","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/frontend-typescript.mdc","title":"Cursor Rule: frontend-typescript","category":"cursor-rule","format":"mdc","content":"# Cursor Rule: frontend-typescript\n\nPath: `tools/llm-oneshot/.cursor/rules/frontend-typescript.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/frontend-typescript.mdc)","tokens":300,"sizeBytes":251},{"name":"grading.mdc","path":"tools/llm-oneshot/.cursor/rules/grading.mdc","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/grading.mdc","title":"Cursor Rule: grading","category":"cursor-rule","format":"mdc","content":"# Cursor Rule: grading\n\nPath: `tools/llm-oneshot/.cursor/rules/grading.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/grading.mdc)","tokens":300,"sizeBytes":215},{"name":"patterns-react.mdc","path":"tools/llm-oneshot/.cursor/rules/patterns-react.mdc","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/patterns-react.mdc","title":"Cursor Rule: patterns-react","category":"cursor-rule","format":"mdc","content":"# Cursor Rule: patterns-react\n\nPath: `tools/llm-oneshot/.cursor/rules/patterns-react.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/patterns-react.mdc)","tokens":300,"sizeBytes":236},{"name":"patterns-rust.mdc","path":"tools/llm-oneshot/.cursor/rules/patterns-rust.mdc","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/patterns-rust.mdc","title":"Cursor Rule: patterns-rust","category":"cursor-rule","format":"mdc","content":"# Cursor Rule: patterns-rust\n\nPath: `tools/llm-oneshot/.cursor/rules/patterns-rust.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/patterns-rust.mdc)","tokens":300,"sizeBytes":233},{"name":"patterns-typescript.mdc","path":"tools/llm-oneshot/.cursor/rules/patterns-typescript.mdc","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/patterns-typescript.mdc","title":"Cursor Rule: patterns-typescript","category":"cursor-rule","format":"mdc","content":"# Cursor Rule: patterns-typescript\n\nPath: `tools/llm-oneshot/.cursor/rules/patterns-typescript.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/patterns-typescript.mdc)","tokens":300,"sizeBytes":251},{"name":"postgres.mdc","path":"tools/llm-oneshot/.cursor/rules/postgres.mdc","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/postgres.mdc","title":"Cursor Rule: postgres","category":"cursor-rule","format":"mdc","content":"# Cursor Rule: postgres\n\nPath: `tools/llm-oneshot/.cursor/rules/postgres.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/postgres.mdc)","tokens":300,"sizeBytes":218},{"name":"spacetimedb-styling.mdc","path":"tools/llm-oneshot/.cursor/rules/spacetimedb-styling.mdc","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/spacetimedb-styling.mdc","title":"Cursor Rule: spacetimedb-styling","category":"cursor-rule","format":"mdc","content":"# Cursor Rule: spacetimedb-styling\n\nPath: `tools/llm-oneshot/.cursor/rules/spacetimedb-styling.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/.cursor/rules/spacetimedb-styling.mdc)","tokens":300,"sizeBytes":251},{"name":"CLAUDE.md","path":"CLAUDE.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/CLAUDE.md","title":"Claude Agent Guidelines & System Prompt","category":"claude-rule","format":"markdown","content":"# Claude Agent Guidelines & System Prompt\n\nPath: `CLAUDE.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/CLAUDE.md)","tokens":300,"sizeBytes":166},{"name":"marketplace.json","path":".agents/plugins/marketplace.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/.agents/plugins/marketplace.json","title":"Claude Plugin Marketplace Catalog","category":"marketplace","format":"json","content":"# Claude Plugin Marketplace Catalog\n\nPath: `.agents/plugins/marketplace.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/.agents/plugins/marketplace.json)","tokens":300,"sizeBytes":206},{"name":"marketplace.json","path":".claude-plugin/marketplace.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/.claude-plugin/marketplace.json","title":"Claude Plugin Marketplace Catalog","category":"marketplace","format":"json","content":"# Claude Plugin Marketplace Catalog\n\nPath: `.claude-plugin/marketplace.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/.claude-plugin/marketplace.json)","tokens":300,"sizeBytes":204},{"name":"marketplace.json","path":"codex-plugin/.agents/plugins/marketplace.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/.agents/plugins/marketplace.json","title":"Claude Plugin Marketplace Catalog","category":"marketplace","format":"json","content":"# Claude Plugin Marketplace Catalog\n\nPath: `codex-plugin/.agents/plugins/marketplace.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/.agents/plugins/marketplace.json)","tokens":300,"sizeBytes":232},{"name":"plugin.json","path":"codex-plugin/plugins/spacetimedb/.codex-plugin/plugin.json","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/.codex-plugin/plugin.json","title":"codex-plugin Plugin Manifest","category":"plugin-manifest","format":"json","content":"# codex-plugin Plugin Manifest\n\nPath: `codex-plugin/plugins/spacetimedb/.codex-plugin/plugin.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/.codex-plugin/plugin.json)","tokens":300,"sizeBytes":253},{"name":"README.md","path":"tools/llm-oneshot/apps/chat-app/prompts/README.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/README.md","title":"prompts Documentation","category":"plugin-manifest","format":"markdown","content":"# prompts Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/prompts/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/prompts/README.md)","tokens":300,"sizeBytes":228},{"name":"README.md","path":"tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/README.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/README.md","title":"chat-app-20260107-120000 Documentation","category":"plugin-manifest","format":"markdown","content":"# chat-app-20260107-120000 Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/gemini-3-pro/spacetime/chat-app-20260107-120000/README.md)","tokens":300,"sizeBytes":347},{"name":"README.md","path":"tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/README.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/README.md","title":"chat-app-20260128-112222 Documentation","category":"plugin-manifest","format":"markdown","content":"# chat-app-20260128-112222 Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/postgres/chat-app-20260128-112222/README.md)","tokens":300,"sizeBytes":339},{"name":"README.md","path":"tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/README.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/README.md","title":"chat-app-20260107-120000 Documentation","category":"plugin-manifest","format":"markdown","content":"# chat-app-20260107-120000 Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/grok-code/spacetime/chat-app-20260107-120000/README.md)","tokens":300,"sizeBytes":341},{"name":"README.md","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/README.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/README.md","title":"chat-app-20260104-120000 Documentation","category":"plugin-manifest","format":"markdown","content":"# chat-app-20260104-120000 Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-120000/README.md)","tokens":300,"sizeBytes":337},{"name":"README.md","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/README.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/README.md","title":"chat-app-20260104-160000 Documentation","category":"plugin-manifest","format":"markdown","content":"# chat-app-20260104-160000 Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-160000/README.md)","tokens":300,"sizeBytes":337},{"name":"README.md","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/README.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/README.md","title":"chat-app-20260104-180000 Documentation","category":"plugin-manifest","format":"markdown","content":"# chat-app-20260104-180000 Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/postgres/chat-app-20260104-180000/README.md)","tokens":300,"sizeBytes":337},{"name":"README.md","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/README.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/README.md","title":"chat-app-20260102-162918 Documentation","category":"plugin-manifest","format":"markdown","content":"# chat-app-20260102-162918 Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-162918/README.md)","tokens":300,"sizeBytes":339},{"name":"README.md","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/README.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/README.md","title":"chat-app-20260102-170500 Documentation","category":"plugin-manifest","format":"markdown","content":"# chat-app-20260102-170500 Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-170500/README.md)","tokens":300,"sizeBytes":339},{"name":"README.md","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/README.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/README.md","title":"chat-app-20260102-171317 Documentation","category":"plugin-manifest","format":"markdown","content":"# chat-app-20260102-171317 Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260102-171317/README.md)","tokens":300,"sizeBytes":339},{"name":"README.md","path":"tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/README.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/README.md","title":"chat-app-20260105-180000 Documentation","category":"plugin-manifest","format":"markdown","content":"# chat-app-20260105-180000 Documentation\n\nPath: `tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/chat-app/typescript/opus-4-5/spacetime/chat-app-20260105-180000/README.md)","tokens":300,"sizeBytes":339},{"name":"README.md","path":"tools/llm-oneshot/apps/paint-app/prompts/README.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/README.md","title":"prompts Documentation","category":"plugin-manifest","format":"markdown","content":"# prompts Documentation\n\nPath: `tools/llm-oneshot/apps/paint-app/prompts/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/apps/paint-app/prompts/README.md)","tokens":300,"sizeBytes":230},{"name":"README.md","path":"tools/llm-oneshot/README.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/README.md","title":"llm-oneshot Documentation","category":"plugin-manifest","format":"markdown","content":"# llm-oneshot Documentation\n\nPath: `tools/llm-oneshot/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-oneshot/README.md)","tokens":300,"sizeBytes":188},{"name":"README.md","path":"tools/llm-sequential-upgrade/perf-benchmark/README.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/perf-benchmark/README.md","title":"perf-benchmark Documentation","category":"plugin-manifest","format":"markdown","content":"# perf-benchmark Documentation\n\nPath: `tools/llm-sequential-upgrade/perf-benchmark/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/perf-benchmark/README.md)","tokens":300,"sizeBytes":243},{"name":"README.md","path":"tools/llm-sequential-upgrade/README.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/README.md","title":"llm-sequential-upgrade Documentation","category":"plugin-manifest","format":"markdown","content":"# llm-sequential-upgrade Documentation\n\nPath: `tools/llm-sequential-upgrade/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/README.md)","tokens":300,"sizeBytes":221},{"name":"README.md","path":"tools/llm-sequential-upgrade/templates/README.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/templates/README.md","title":"templates Documentation","category":"plugin-manifest","format":"markdown","content":"# templates Documentation\n\nPath: `tools/llm-sequential-upgrade/templates/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/llm-sequential-upgrade/templates/README.md)","tokens":300,"sizeBytes":228},{"name":"README.md","path":"tools/release/README.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/release/README.md","title":"release Documentation","category":"plugin-manifest","format":"markdown","content":"# release Documentation\n\nPath: `tools/release/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/release/README.md)","tokens":300,"sizeBytes":176},{"name":"README.md","path":"tools/templates/README.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/templates/README.md","title":"templates Documentation","category":"plugin-manifest","format":"markdown","content":"# templates Documentation\n\nPath: `tools/templates/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/templates/README.md)","tokens":300,"sizeBytes":182},{"name":"README.md","path":"tools/xtask-llm-benchmark/README.md","rawUrl":"https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/xtask-llm-benchmark/README.md","title":"xtask-llm-benchmark Documentation","category":"plugin-manifest","format":"markdown","content":"# xtask-llm-benchmark Documentation\n\nPath: `tools/xtask-llm-benchmark/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/tools/xtask-llm-benchmark/README.md)","tokens":300,"sizeBytes":212}],"systemPromptSnippet":"<yakaai_skills repo=\"clockworklabs/SpacetimeDB\">\n<!-- File: AGENTS.md (Tokens: ~300 | Category: root-instruction) -->\n# AI Agent Protocol & Instructions\n\nPath: `AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/AGENTS.md)\n\n<!-- File: codex-plugin/plugins/spacetimedb/.mcp.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Spacetimedb Skill\n\nPath: `codex-plugin/plugins/spacetimedb/.mcp.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/.mcp.json)\n\n<!-- File: codex-plugin/plugins/spacetimedb/skills/cli/SKILL.md (Tokens: ~1214 | Category: anthropic-skill) -->\n---\nname: cli\ndescription: SpacetimeDB CLI reference for initializing projects, building modules, publishing databases, querying data, and managing servers\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: shared\n  language: all\n  cursor_globs: \"**/*\"\n  cursor_always_apply: false\ntriggers:\n  - spacetime init\n  - spacetime build\n  - spacetime publish\n  - spacetime dev\n  - spacetime sql\n  - spacetime call\n  - spacetime logs\n  - spacetime server\n  - spacetime login\n  - spacetime generate\n  - how do I use the CLI\n  - CLI command\n---\n\n# SpacetimeDB CLI\n\nUse this skill when the user needs help with the `spacetime` CLI tool - initializing projects, building modules, publishing databases, querying data, managing servers, or troubleshooting CLI issues.\n\n## Quick Reference\n\n### Project Initialization & Development\n\n```bash\n# Initialize new project\nspacetime init my-project --lang rust|csharp|typescript|cpp\nspacetime init my-project --template <template-id>\n\n# Build module\nspacetime build                    # release build\nspacetime build --debug            # faster iteration, slower runtime\n\n# Dev mode (auto-rebuild, auto-publish, generates bindings)\nspacetime dev\nspacetime dev --client-lang typescript --module-bindings-path ./client/src/module_bindings\n\n# Generate client bindings\nspacetime generate --lang typescript|csharp|rust --out-dir ./bindings --module-path ./server\nspacetime generate --lang unrealcpp --uproject-dir ./MyGame --module-path ./server --unreal-module-name MyGame\n```\n\n### Publishing & Deployment\n\n```bash\n# Publish to Maincloud (default)\nspacetime publish my-database --yes\n\n# Publish to local server\nspacetime publish my-database --server local --yes\n\n# Clear database and republish\nspacetime publish my-database --delete-data=always --yes\n```\n\n### Database Interaction\n\n```bash\n# SQL queries\nspacetime sql my-database \"SELECT * FROM users\"\nspacetime sql my-database --interactive   # REPL mode\n\n# Call reducers (each argument is a separate positional arg)\nspacetime call my-database my_reducer '\"value\"' '123'\n\n# Subscribe to changes\nspacetime subscribe my-database \"SELECT * FROM users\" --num-updates 10\n\n# View logs\nspacetime logs my-database -f              # follow logs\nspacetime logs my-database -n 100          # up to 100 log lines\n\n# Describe schema\n# (without --json, output is human-readable text)\nspacetime describe my-database --json\nspacetime describe my-database tables --json   # also views, reducers, procedures, routes, env, types\nspacetime describe my-database tables users --json\nspacetime describe my-database reducers my_reducer --json\n```\n\n### Database Management\n\n```bash\n# List databases\nspacetime list\n\n# Delete database\nspacetime delete my-database\n\n# Rename database\nspacetime rename <database-identity> --to new-name\n```\n\n### Server Management\n\n```bash\n# List configured servers\nspacetime server list\n\n# Add server\nspacetime server add local --url http://localhost:3000 --default\nspacetime server add myserver --url https://my-spacetime.example.com\n\n# Set default server\nspacetime server set-default local\n\n# Test connectivity\nspacetime server ping local\n\n# Start local instance\nspacetime start\n\n# Clear local data\nspacetime server clear\n```\n\n### Authentication\n\n```bash\n# Login (opens browser)\nspacetime login\n\n# Login with token\nspacetime login --token <token>\n\n# Show login status\nspacetime login show\n\n# Logout\nspacetime logout\n```\n\n## Default Servers\n\n| Name | URL | Description |\n|------|-----|-------------|\n| `maincloud` | `https://maincloud.spacetimedb.com` | Production cloud (default) |\n| `local` | `http://127.0.0.1:3000` | Local development server |\n\n## Common Flags\n\n| Flag | Short | Description |\n|------|-------|-------------|\n| `--server` | `-s` | Target server (nickname, hostname, or URL) |\n| `--yes` | `-y` | Non-interactive mode (skip confirmations) |\n| `--anonymous` | | Use anonymous identity |\n| `--module-path` | `-p` | Path to module project |\n| `--no-config` | | Ignore `spacetime.json` project configuration |\n\n## Troubleshooting\n\n### \"Not logged in\"\n```bash\nspacetime login\n# Or use --anonymous for public operations\n```\n\n### \"Server not responding\"\n```bash\nspacetime server ping <server>\n# For local: ensure spacetime start is running\n```\n\n### \"Schema conflict\"\n```bash\n# Clear data and republish\nspacetime publish my-db --delete-data=always --yes\n```\n\n### \"Build failed\"\n```bash\n# Check Rust/C# toolchain\nrustup show\n# For Rust modules, ensure wasm32-unknown-unknown target\nrustup target add wasm32-unknown-unknown\n```\n\n## Module Languages\n\n**Server-side (modules):** Rust, C#, TypeScript, C++\n**Client SDKs:** TypeScript, C#, Rust, Unreal Engine\n**CLI `generate` targets:** TypeScript, C#, Rust, Unreal C++\n\n<!-- File: codex-plugin/plugins/spacetimedb/skills/concepts/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# concepts\n\nPath: `codex-plugin/plugins/spacetimedb/skills/concepts/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/concepts/SKILL.md)\n\n<!-- File: codex-plugin/plugins/spacetimedb/skills/cpp-server/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# cpp-server\n\nPath: `codex-plugin/plugins/spacetimedb/skills/cpp-server/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/cpp-server/SKILL.md)\n\n<!-- File: codex-plugin/plugins/spacetimedb/skills/csharp-client/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# csharp-client\n\nPath: `codex-plugin/plugins/spacetimedb/skills/csharp-client/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/csharp-client/SKILL.md)\n\n<!-- File: codex-plugin/plugins/spacetimedb/skills/csharp-server/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# csharp-server\n\nPath: `codex-plugin/plugins/spacetimedb/skills/csharp-server/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/csharp-server/SKILL.md)\n\n<!-- File: codex-plugin/plugins/spacetimedb/skills/mcp/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# mcp\n\nPath: `codex-plugin/plugins/spacetimedb/skills/mcp/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/mcp/SKILL.md)\n\n<!-- File: codex-plugin/plugins/spacetimedb/skills/rust-server/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# rust-server\n\nPath: `codex-plugin/plugins/spacetimedb/skills/rust-server/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/rust-server/SKILL.md)\n\n<!-- File: codex-plugin/plugins/spacetimedb/skills/typescript-client/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# typescript-client\n\nPath: `codex-plugin/plugins/spacetimedb/skills/typescript-client/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/typescript-client/SKILL.md)\n\n<!-- File: codex-plugin/plugins/spacetimedb/skills/typescript-server/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# typescript-server\n\nPath: `codex-plugin/plugins/spacetimedb/skills/typescript-server/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/typescript-server/SKILL.md)\n\n<!-- File: codex-plugin/plugins/spacetimedb/skills/unity/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# unity\n\nPath: `codex-plugin/plugins/spacetimedb/skills/unity/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/unity/SKILL.md)\n\n<!-- File: codex-plugin/plugins/spacetimedb/skills/unreal/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# unreal\n\nPath: `codex-plugin/plugins/spacetimedb/skills/unreal/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/codex-plugin/plugins/spacetimedb/skills/unreal/SKILL.md)\n\n<!-- File: demo/Blackholio/client-unity/Packages/manifest.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Packages Skill\n\nPath: `demo/Blackholio/client-unity/Packages/manifest.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/demo/Blackholio/client-unity/Packages/manifest.json)\n\n<!-- File: demo/Blackholio/client-unity/Packages/packages-lock.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Packages Skill\n\nPath: `demo/Blackholio/client-unity/Packages/packages-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/demo/Blackholio/client-unity/Packages/packages-lock.json)\n\n<!-- File: demo/Blackholio/client-unity/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Com.unity.testtools.codecoverage Skill\n\nPath: `demo/Blackholio/client-unity/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/demo/Blackholio/client-unity/ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json)\n\n<!-- File: skills/cli/README.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Cli Skill\n\nPath: `skills/cli/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/cli/README.md)\n\n<!-- File: skills/cli/SKILL.md (Tokens: ~1214 | Category: anthropic-skill) -->\n---\nname: cli\ndescription: SpacetimeDB CLI reference for initializing projects, building modules, publishing databases, querying data, and managing servers\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: shared\n  language: all\n  cursor_globs: \"**/*\"\n  cursor_always_apply: false\ntriggers:\n  - spacetime init\n  - spacetime build\n  - spacetime publish\n  - spacetime dev\n  - spacetime sql\n  - spacetime call\n  - spacetime logs\n  - spacetime server\n  - spacetime login\n  - spacetime generate\n  - how do I use the CLI\n  - CLI command\n---\n\n# SpacetimeDB CLI\n\nUse this skill when the user needs help with the `spacetime` CLI tool - initializing projects, building modules, publishing databases, querying data, managing servers, or troubleshooting CLI issues.\n\n## Quick Reference\n\n### Project Initialization & Development\n\n```bash\n# Initialize new project\nspacetime init my-project --lang rust|csharp|typescript|cpp\nspacetime init my-project --template <template-id>\n\n# Build module\nspacetime build                    # release build\nspacetime build --debug            # faster iteration, slower runtime\n\n# Dev mode (auto-rebuild, auto-publish, generates bindings)\nspacetime dev\nspacetime dev --client-lang typescript --module-bindings-path ./client/src/module_bindings\n\n# Generate client bindings\nspacetime generate --lang typescript|csharp|rust --out-dir ./bindings --module-path ./server\nspacetime generate --lang unrealcpp --uproject-dir ./MyGame --module-path ./server --unreal-module-name MyGame\n```\n\n### Publishing & Deployment\n\n```bash\n# Publish to Maincloud (default)\nspacetime publish my-database --yes\n\n# Publish to local server\nspacetime publish my-database --server local --yes\n\n# Clear database and republish\nspacetime publish my-database --delete-data=always --yes\n```\n\n### Database Interaction\n\n```bash\n# SQL queries\nspacetime sql my-database \"SELECT * FROM users\"\nspacetime sql my-database --interactive   # REPL mode\n\n# Call reducers (each argument is a separate positional arg)\nspacetime call my-database my_reducer '\"value\"' '123'\n\n# Subscribe to changes\nspacetime subscribe my-database \"SELECT * FROM users\" --num-updates 10\n\n# View logs\nspacetime logs my-database -f              # follow logs\nspacetime logs my-database -n 100          # up to 100 log lines\n\n# Describe schema\n# (without --json, output is human-readable text)\nspacetime describe my-database --json\nspacetime describe my-database tables --json   # also views, reducers, procedures, routes, env, types\nspacetime describe my-database tables users --json\nspacetime describe my-database reducers my_reducer --json\n```\n\n### Database Management\n\n```bash\n# List databases\nspacetime list\n\n# Delete database\nspacetime delete my-database\n\n# Rename database\nspacetime rename <database-identity> --to new-name\n```\n\n### Server Management\n\n```bash\n# List configured servers\nspacetime server list\n\n# Add server\nspacetime server add local --url http://localhost:3000 --default\nspacetime server add myserver --url https://my-spacetime.example.com\n\n# Set default server\nspacetime server set-default local\n\n# Test connectivity\nspacetime server ping local\n\n# Start local instance\nspacetime start\n\n# Clear local data\nspacetime server clear\n```\n\n### Authentication\n\n```bash\n# Login (opens browser)\nspacetime login\n\n# Login with token\nspacetime login --token <token>\n\n# Show login status\nspacetime login show\n\n# Logout\nspacetime logout\n```\n\n## Default Servers\n\n| Name | URL | Description |\n|------|-----|-------------|\n| `maincloud` | `https://maincloud.spacetimedb.com` | Production cloud (default) |\n| `local` | `http://127.0.0.1:3000` | Local development server |\n\n## Common Flags\n\n| Flag | Short | Description |\n|------|-------|-------------|\n| `--server` | `-s` | Target server (nickname, hostname, or URL) |\n| `--yes` | `-y` | Non-interactive mode (skip confirmations) |\n| `--anonymous` | | Use anonymous identity |\n| `--module-path` | `-p` | Path to module project |\n| `--no-config` | | Ignore `spacetime.json` project configuration |\n\n## Troubleshooting\n\n### \"Not logged in\"\n```bash\nspacetime login\n# Or use --anonymous for public operations\n```\n\n### \"Server not responding\"\n```bash\nspacetime server ping <server>\n# For local: ensure spacetime start is running\n```\n\n### \"Schema conflict\"\n```bash\n# Clear data and republish\nspacetime publish my-db --delete-data=always --yes\n```\n\n### \"Build failed\"\n```bash\n# Check Rust/C# toolchain\nrustup show\n# For Rust modules, ensure wasm32-unknown-unknown target\nrustup target add wasm32-unknown-unknown\n```\n\n## Module Languages\n\n**Server-side (modules):** Rust, C#, TypeScript, C++\n**Client SDKs:** TypeScript, C#, Rust, Unreal Engine\n**CLI `generate` targets:** TypeScript, C#, Rust, Unreal C++\n\n<!-- File: skills/concepts/README.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Concepts Skill\n\nPath: `skills/concepts/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/concepts/README.md)\n\n<!-- File: skills/concepts/SKILL.md (Tokens: ~941 | Category: anthropic-skill) -->\n---\nname: concepts\ndescription: Understand SpacetimeDB architecture and core concepts. Use when learning SpacetimeDB or making architectural decisions.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: shared\n  language: all\n  cursor_globs: \"**/*\"\n  cursor_always_apply: true\n---\n\n# SpacetimeDB Core Concepts\n\nSpacetimeDB is a relational database that is also a server. It lets you upload application logic directly into the database as modules, eliminating the traditional web/game server layer entirely. Rust, C#, and C++ modules compile to WebAssembly, while TypeScript modules run on V8.\n\n---\n\n## Critical Rules\n\n1. **Reducers are transactional.** They do not return data to callers. Use subscriptions to read data.\n2. **Reducers must be deterministic.** Do not use filesystem, network, external clocks, or external random sources in reducers. Use the reducer context (`ctx`) for SpacetimeDB-provided timestamp and deterministic random values.\n3. **Read data via tables/subscriptions**, not reducer return values. Clients get data through subscribed queries.\n4. **Auto-increment IDs are not sequential.** Gaps are normal, do not use for ordering. Use timestamps or explicit sequence columns.\n5. **`ctx.sender` is the authenticated principal.** Never trust identity passed as arguments.\n\n---\n\n## Feature Implementation Checklist\n\n1. **Backend:** Define table(s) to store the data\n2. **Backend:** Define reducer(s) to mutate the data\n3. **Client:** Subscribe to the table(s)\n4. **Client:** Call the reducer(s) from UI\n5. **Client:** Render the data from the table(s)\n\n---\n\n## Debugging Checklist\n\n1. Is SpacetimeDB server running? (`spacetime start`)\n2. Is the module published? (`spacetime publish`)\n3. Are client bindings generated? (`spacetime generate`)\n4. Check server logs for errors (`spacetime logs <db-name>`)\n5. Is the reducer actually being called from the client?\n\n---\n\n## Tables\n\n- **Private tables** (default): Only accessible by reducers and the database owner.\n- **Public tables**: Exposed for client read access through subscriptions. Writes still require reducers.\n\nOrganize data by access pattern, not by entity:\n\n```\nPlayer          PlayerState         PlayerStats\nid         <--  player_id           player_id\nname            position_x          total_kills\n                position_y          total_deaths\n                velocity_x          play_time\n```\n\n## Reducers\n\nReducers are transactional functions that modify database state. They run atomically, cannot interact with the outside world, and do not return data to callers. See the language-specific server skills for syntax.\n\n## Event Tables\n\nEvent tables broadcast reducer-specific data to clients. Rows are never stored in the client cache (`count()` returns 0, `iter()` yields nothing); only `onInsert` callbacks fire.\n\n## Subscriptions\n\nSubscriptions replicate database rows to clients in real-time.\n\n1. **Subscribe**: Register SQL queries describing needed data\n2. **Receive initial data**: All matching rows are sent immediately\n3. **Receive updates**: Real-time updates when subscribed rows change\n4. **React to changes**: Use callbacks (`onInsert`, `onDelete`, `onUpdate`)\n\nBest practices:\n- Group subscriptions by lifetime\n- Subscribe before unsubscribing when updating subscriptions\n- Avoid overlapping queries\n- Use indexes for efficient queries\n\n## Modules\n\nModules contain application logic that runs inside the database.\n\n- **Tables**: Define the data schema\n- **Reducers**: Define callable functions that modify state\n- **Event Tables**: Broadcast reducer-specific data to clients\n- **Views**: Read-only functions that expose computed subsets of data to clients\n- **Procedures**: (Unstable) Functions that can have side effects (HTTP requests, `ctx.withTx`)\n\nServer-side modules can be written in: Rust, C#, TypeScript, C++\n\nLifecycle: Write → Compile → Publish (`spacetime publish`) → Hot-swap (republish without disconnecting clients)\n\n## Identity\n\n- **Identity**: A long-lived, globally unique identifier for a user.\n- **ConnectionId**: Identifies a specific client connection.\n- Always use `ctx.sender` / `ctx.Sender` / `ctx.sender()` for authorization.\n\nSpacetimeDB works with many OIDC providers, including SpacetimeAuth (built-in), Auth0, Clerk, Keycloak, Google, and GitHub.\n\n<!-- File: skills/cpp-server/README.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Cpp-server Skill\n\nPath: `skills/cpp-server/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/cpp-server/README.md)\n\n<!-- File: skills/cpp-server/SKILL.md (Tokens: ~2094 | Category: anthropic-skill) -->\n---\nname: cpp-server\ndescription: SpacetimeDB C++ server module SDK reference. Use when writing tables, reducers, or module logic in C++.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: server\n  language: cpp\n  cursor_globs: \"**/*.cpp,**/*.h,**/*.hpp\"\n  cursor_always_apply: true\n---\n\n# SpacetimeDB C++ SDK Reference\n\n## Imports\n\n```cpp\n#include <spacetimedb.h>\nusing namespace SpacetimeDB;\n```\n\n## Tables\n\nRegister structs with macros, then declare as tables:\n\n```cpp\nstruct Entity {\n    uint64_t id;\n    Identity owner;\n    std::string name;\n    bool active;\n};\nSPACETIMEDB_STRUCT(Entity, id, owner, name, active)\nSPACETIMEDB_TABLE(Entity, entity, Public)\nFIELD_PrimaryKeyAutoInc(entity, id)\nFIELD_Index(entity, name)\n```\n\nOptions:\n- `SPACETIMEDB_TABLE(Type, accessor, Public|Private)`: regular table\n- `SPACETIMEDB_TABLE(Type, accessor, Public|Private, true)`: event table\n\nField constraints:\n- `FIELD_PrimaryKey(accessor, field)`: primary key\n- `FIELD_PrimaryKeyAutoInc(accessor, field)`: primary key with auto-increment (use 0 on insert)\n- `FIELD_Unique(accessor, field)`: unique constraint\n- `FIELD_Index(accessor, field)`: btree index (enables `.filter()`)\n\n## Column Types\n\n| C++ type | Notes |\n|----------|-------|\n| `uint8_t` / `uint16_t` / `uint32_t` / `uint64_t` | unsigned integers |\n| `SpacetimeDB::u128` / `SpacetimeDB::u256` | large unsigned integers |\n| `int8_t` / `int16_t` / `int32_t` / `int64_t` | signed integers |\n| `SpacetimeDB::i128` / `SpacetimeDB::i256` | large signed integers |\n| `float` / `double` | floats |\n| `bool` | boolean |\n| `std::string` | text |\n| `std::vector<T>` | list/array |\n| `std::optional<T>` | nullable column |\n| `Identity` | user identity |\n| `ConnectionId` | connection handle |\n| `Timestamp` | server timestamp (microseconds since epoch) |\n| `TimeDuration` | duration in microseconds |\n| `ScheduleAt` | for scheduled tables |\n\n## Indexes\n\n```cpp\n// Single-column:\nFIELD_Index(entity, name)\n// Access: ctx.db[entity_name].filter(\"Alice\")\n\n// Multi-column:\nFIELD_NamedMultiColumnIndex(score, by_player_and_level, player_id, level)\n```\n\nRange queries (included by `spacetimedb.h`; include `<spacetimedb/range_queries.h>` directly only when not using the umbrella header):\n```cpp\nctx.db[user_age].filter(range_inclusive(uint8_t(18), uint8_t(65)));\nctx.db[user_age].filter(range_from(uint8_t(18)));\n```\n\n## Reducers\n\nAll reducers return `ReducerResult`. Use `Ok()` or `Err(message)`:\n\n```cpp\nSPACETIMEDB_REDUCER(create_entity, ReducerContext ctx, std::string name) {\n    if (name.empty()) {\n        return Err(\"Name cannot be empty\");\n    }\n    ctx.db[entity].insert(Entity{0, ctx.sender(), name, true});\n    return Ok();\n}\n```\n\n## DB Operations\n\n```cpp\nctx.db[entity].insert(Entity{0, owner, \"Sample\", true});     // Insert (0 for autoInc)\nctx.db[entity_id].find(entityId);                             // Find by PK → std::optional\nctx.db[entity_identity].find(ctx.sender());                   // Find by unique column\nctx.db[entity_name].filter(\"Alice\");                          // Filter by index → iterable\nctx.db[entity];                                               // All rows → iterable (range-for)\nctx.db[entity].count();                                       // Count rows\n\n// Update: find, mutate, update\nif (auto e = ctx.db[entity_id].find(entityId)) {\n    e->name = \"New Name\";\n    ctx.db[entity_id].update(*e);\n}\n\n// Delete by primary key\nctx.db[entity_id].delete_by_key(entityId);\n```\n\nNote: Bracket notation `ctx.db[accessor]` is used for all table access. The accessor name comes from `SPACETIMEDB_TABLE` and `FIELD_*` macros.\n\n## Lifecycle Hooks\n\n```cpp\nSPACETIMEDB_INIT(init, ReducerContext ctx) {\n    LOG_INFO(\"Database initializing...\");\n    return Ok();\n}\n\nSPACETIMEDB_CLIENT_CONNECTED(on_connect, ReducerContext ctx) {\n    LOG_INFO(\"Connected: \" + ctx.sender().to_string());\n    return Ok();\n}\n\nSPACETIMEDB_CLIENT_DISCONNECTED(on_disconnect, ReducerContext ctx) {\n    LOG_INFO(\"Disconnected: \" + ctx.sender().to_string());\n    return Ok();\n}\n```\n\n## Authentication & Timestamps\n\n```cpp\n// Auth: ctx.sender() is the caller's Identity\nif (row.owner != ctx.sender()) {\n    return Err(\"unauthorized\");\n}\n\n// Server timestamps\nctx.db[item].insert(Item{0, ctx.sender(), ctx.timestamp});\n\n// Timestamp arithmetic\nTimestamp later = ctx.timestamp + TimeDuration::from_seconds(10);\n```\n\n## Reducer Context\n\n`ReducerContext` is the single source of sender identity, deterministic time, and deterministic randomness inside a reducer. Always go through `ctx` for these. Standard library clocks and random sources are not available in modules.\n\n```cpp\nctx.db[table]          // Table access (bracket notation)\nctx.sender()           // Caller's Identity\nctx.timestamp          // Invocation timestamp\nctx.connection_id      // std::optional<ConnectionId>\nctx.identity()         // Module's own identity\nctx.rng()              // Deterministic RNG\nctx.sender_auth()      // AuthCtx with JWT claims\n```\n\n## Scheduled Tables\n\n```cpp\nstruct Reminder {\n    uint64_t scheduled_id;\n    ScheduleAt scheduled_at;\n    std::string message;\n};\nSPACETIMEDB_STRUCT(Reminder, scheduled_id, scheduled_at, message)\nSPACETIMEDB_TABLE(Reminder, reminder, Public)\nFIELD_PrimaryKeyAutoInc(reminder, scheduled_id)\nSPACETIMEDB_SCHEDULE(reminder, 1, send_reminder)  // 1 = scheduled_at field index (0-based)\n\nSPACETIMEDB_REDUCER(send_reminder, ReducerContext ctx, Reminder arg) {\n    LOG_INFO(\"Reminder: \" + arg.message);\n    return Ok();\n}\n\n// One-time: fires at a specific time\nctx.db[reminder].insert(Reminder{0, ScheduleAt::time(ctx.timestamp + TimeDuration::from_seconds(10)), \"msg\"});\n// Repeating: fires on an interval\nctx.db[reminder].insert(Reminder{0, ScheduleAt::interval(TimeDuration::from_seconds(5)), \"msg\"});\n```\n\n## Custom Types\n\n```cpp\n// Struct (product type):\nstruct Point { float x; float y; };\nSPACETIMEDB_STRUCT(Point, x, y)\n\n// Enum (sum type):\nSPACETIMEDB_UNIT_TYPE(Active)\nSPACETIMEDB_UNIT_TYPE(Inactive)\nSPACETIMEDB_ENUM(PlayerStatus,\n    (Active, Active),\n    (Inactive, Inactive),\n    (Suspended, std::string)\n)\n```\n\n## Logging\n\n```cpp\nLOG_INFO(\"Message: \" + msg);\nLOG_WARN(\"Warning: \" + msg);\nLOG_ERROR(\"Error: \" + msg);\nLOG_DEBUG(\"Debug: \" + msg);\nLOG_PANIC(\"Fatal: \" + msg);   // terminates reducer\n```\n\n## Complete Example\n\n```cpp\n#include <spacetimedb.h>\nusing namespace SpacetimeDB;\n\nstruct Entity {\n    Identity identity;\n    std::string name;\n    bool active;\n};\nSPACETIMEDB_STRUCT(Entity, identity, name, active)\nSPACETIMEDB_TABLE(Entity, entity, Public)\nFIELD_PrimaryKey(entity, identity)\n\nstruct Record {\n    uint64_t id;\n    Identity owner;\n    uint32_t value;\n    Timestamp created_at;\n};\nSPACETIMEDB_STRUCT(Record, id, owner, value, created_at)\nSPACETIMEDB_TABLE(Record, record, Public)\nFIELD_PrimaryKeyAutoInc(record, id)\n\nSPACETIMEDB_CLIENT_CONNECTED(on_connect, ReducerContext ctx) {\n    if (auto existing = ctx.db[entity_identity].find(ctx.sender())) {\n        existing->active = true;\n        ctx.db[entity_identity].update(*existing);\n    }\n    return Ok();\n}\n\nSPACETIMEDB_CLIENT_DISCONNECTED(on_disconnect, ReducerContext ctx) {\n    if (auto existing = ctx.db[entity_identity].find(ctx.sender())) {\n        existing->active = false;\n        ctx.db[entity_identity].update(*existing);\n    }\n    return Ok();\n}\n\nSPACETIMEDB_REDUCER(create_entity, ReducerContext ctx, std::string name) {\n    if (ctx.db[entity_identity].find(ctx.sender())) {\n        return Err(\"already exists\");\n    }\n    ctx.db[entity].insert(Entity{ctx.sender(), name, true});\n    return Ok();\n}\n\nSPACETIMEDB_REDUCER(add_record, ReducerContext ctx, uint32_t value) {\n    if (!ctx.db[entity_identity].find(ctx.sender())) {\n        return Err(\"not found\");\n    }\n    ctx.db[record].insert(Record{0, ctx.sender(), value, ctx.timestamp});\n    return Ok();\n}\n```\n\n<!-- File: skills/csharp-client/README.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Csharp-client Skill\n\nPath: `skills/csharp-client/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/csharp-client/README.md)\n\n<!-- File: skills/csharp-client/SKILL.md (Tokens: ~1605 | Category: anthropic-skill) -->\n---\nname: csharp-client\ndescription: SpacetimeDB C#/.NET client SDK reference. Use when building C# clients that connect to SpacetimeDB (console, desktop, or any .NET app).\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: client\n  language: csharp\n  cursor_globs: \"**/*.cs\"\n  cursor_always_apply: true\n---\n\n# SpacetimeDB C# Client\n\nInstall: `dotnet add package SpacetimeDB.ClientSDK`\n\nGenerated bindings convert snake_case names to PascalCase, including row fields: a server column `trip_id` is `TripId` on client rows.\n\n## Connection\n\n```csharp\nusing SpacetimeDB;\nusing SpacetimeDB.Types;\n\nvar conn = DbConnection.Builder()\n    .WithUri(\"http://localhost:3000\")\n    .WithDatabaseName(\"my-database\")\n    .WithToken(savedToken)\n    .WithCompression(Compression.Brotli) // optional; this is the default\n    .OnConnect((conn, identity, token) =>\n    {\n        Console.WriteLine($\"Connected as: {identity}\");\n        // Save token for reconnection\n        File.WriteAllText(\"auth_token.txt\", token);\n\n        conn.SubscriptionBuilder()\n            .OnApplied(OnSubscriptionApplied)\n            .SubscribeToAllTables();\n    })\n    .OnConnectError(err => Console.Error.WriteLine($\"Connection failed: {err}\"))\n    .OnDisconnect((conn, err) =>\n    {\n        if (err != null) Console.Error.WriteLine($\"Disconnected: {err}\");\n    })\n    .Build();\n```\n\nCompression options are `Compression.Brotli`, `Compression.Gzip`, and `Compression.None`. The SDK uses Brotli when `WithCompression` is omitted.\n\n## Automatic Reconnect and Token Refresh\n\nAutomatic reconnect is opt-in: add `.WithAutomaticReconnect()` to the builder. Initial connection failures do not retry. After an established connection is lost, the SDK retries with exponential backoff and jitter from `MinDelay` (default 1 s) up to `MaxDelay` (default 30 s); tune them with `.WithAutomaticReconnect(new AutomaticReconnectOptions { MinDelay = ..., MaxDelay = ... })`. Values below the 500 ms and 1 s floors are raised with a warning, so that retrying clients cannot overwhelm the database. `Disconnect()` permanently stops recovery.\n\nKeep calling `FrameTick()` while `IsActive` is false. `IsReconnecting` is true while recovering before the next handshake. Use `.OnDisconnect((conn, error, next) => ...)` and `.OnConnectError((error, next) => ...)` to inspect `NextReconnect?`: a non-null value provides `Attempt` and `Delay`; null means no retry is scheduled. Existing callback overloads still work.\n\n`OnConnect` runs on every successful reconnect, so create the subscription in the example above only on the first connection, or move it after `Build()`. Register row callbacks once as well. The same connection, identity, table handles, and subscriptions survive; each attempt gets a fresh `ConnectionId`. Cached rows stay readable but stale during outages. The SDK replays subscriptions in one batch and emits only net row changes. Subscription `OnApplied` runs again after replay; use it to mark data ready, not for repeated one-time setup.\n\nFor expiring credentials, combine `.WithToken(initialToken)` with `.WithTokenProvider(() => RefreshTokenAsync())`, where your provider returns `Task<string>` for the same identity. The provider is not called for the initial connection. Before retries, it is called when remaining validity is at most 30 seconds or 5% of the token lifetime, whichever is greater, when expiry cannot be read, or after a reused token is rejected. Provider failures retry; rejection of a freshly provided token is terminal. No periodic refresh runs while connected. Disconnecting ignores a pending provider result but does not cancel the provider's own work.\n\nCalls made while disconnected fail immediately. Pending reducer calls receive `Status.UnknownResult`; pending procedures and one-off queries fail with `UnknownResultException`. These calls may already have executed and are never replayed. Regenerate bindings so unhandled unknown reducer outcomes reach `OnUnhandledReducerError`.\n\n## Event Loop (Critical)\n\n**`FrameTick()` must be called in your main loop.** The SDK queues all network messages and only processes them when you call `FrameTick()`. Without it, no callbacks fire.\n\n```csharp\nwhile (running)\n{\n    conn.FrameTick();\n    // Your application logic...\n    Thread.Sleep(16); // ~60fps\n}\n```\n\n**Thread safety**: `FrameTick()` processes messages on the calling thread. Do NOT call it from a background thread. Do NOT access `conn.Db` from background threads.\n\n## Subscriptions\n\n```csharp\n// Subscribe to all tables\nconn.SubscriptionBuilder()\n    .OnApplied(ctx => Console.WriteLine(\"Subscription ready\"))\n    .SubscribeToAllTables();\n\n// Subscribe with typed query builder (recommended)\nconn.SubscriptionBuilder()\n    .OnApplied(OnSubscriptionApplied)\n    .AddQuery(q => q.From.Player().Where(p => p.Level.Gte(5u)))\n    .AddQuery(q => q.From.GameState())\n    .Subscribe();\n\n// Or with raw SQL strings\nconn.SubscriptionBuilder()\n    .OnApplied(OnSubscriptionApplied)\n    .Subscribe(new[] {\n        \"SELECT * FROM player WHERE level >= 5\",\n        \"SELECT * FROM game_state\"\n    });\n```\n\n## Row Callbacks\n\n```csharp\nconn.Db.Player.OnInsert += (EventContext ctx, Player player) =>\n{\n    Console.WriteLine($\"Player joined: {player.Name}\");\n};\n\nconn.Db.Player.OnDelete += (EventContext ctx, Player player) =>\n{\n    Console.WriteLine($\"Player left: {player.Name}\");\n};\n\nconn.Db.Player.OnUpdate += (EventContext ctx, Player oldPlayer, Player newPlayer) =>\n{\n    Console.WriteLine($\"Player updated: {newPlayer.Name}\");\n};\n```\n\n## Reading the Client Cache\n\n```csharp\n// Find by primary key\nif (conn.Db.Player.Id.Find(playerId) is Player player)\n{\n    Console.WriteLine($\"Player: {player.Name}\");\n}\n\n// Find by unique column\nvar me = conn.Db.Player.Identity.Find(myIdentity);\n\n// Filter by indexed column\nforeach (var p in conn.Db.Player.Level.Filter(5))\n{\n    Console.WriteLine($\"Level 5: {p.Name}\");\n}\n\n// Iterate all rows\nforeach (var p in conn.Db.Player.Iter())\n{\n    Console.WriteLine(p.Name);\n}\n\n// Count\nint total = conn.Db.Player.Count;\n```\n\n## Calling Reducers\n\n```csharp\nconn.Reducers.CreatePlayer(\"Alice\");\nconn.Reducers.MovePlayer(10.0f, 20.0f);\nconn.Reducers.SendMessage(\"Hello!\");\n```\n\nReducer calls return `void`; observe failures via the reducer callbacks below (`Status.Failed`).\n\n## Reducer Callbacks\n\n```csharp\nconn.Reducers.OnSendMessage += (ReducerEventContext ctx, string text) =>\n{\n    if (ctx.Event.Status is Status.Committed)\n        Console.WriteLine($\"Message sent: {text}\");\n    else if (ctx.Event.Status is Status.Failed(var reason))\n        Console.Error.WriteLine($\"Send failed: {reason}\");\n    else if (ctx.Event.Status is Status.UnknownResult)\n        Console.Error.WriteLine(\"Connection lost before the result arrived; the message may have been sent.\");\n};\n```\n\n## Identity\n\n```csharp\n// Identities from OnConnect callback\nIdentity myIdentity;\n\n// Compare identities\nif (player.Owner == myIdentity) { /* it's me */ }\n\n// Display\nConsole.WriteLine($\"Identity: {identity}\");\n```\n\n<!-- File: skills/csharp-server/README.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Csharp-server Skill\n\nPath: `skills/csharp-server/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/csharp-server/README.md)\n\n<!-- File: skills/csharp-server/SKILL.md (Tokens: ~3171 | Category: anthropic-skill) -->\n---\nname: csharp-server\ndescription: SpacetimeDB C# server module SDK reference. Use when writing tables, reducers, or module logic in C#.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: server\n  language: csharp\n  cursor_globs: \"**/*.cs\"\n  cursor_always_apply: true\n---\n\n# SpacetimeDB C# SDK Reference\n\n## Module Structure\n\nReducers are static methods in a `static partial class`; tables are `public partial struct`s. This reference keeps everything in one `public static partial class Module`, which needs only `using SpacetimeDB;`:\n\nMethods exported through SpacetimeDB attributes, including reducers, procedures, views, HTTP handlers, and routers, must be `public static`; generated bindings invoke them from another class.\n\n```csharp\nusing SpacetimeDB;\n\npublic static partial class Module\n{\n    [SpacetimeDB.Table(Accessor = \"ScoreRecord\", Public = true)]\n    public partial struct ScoreRecord\n    {\n        [PrimaryKey]\n        [AutoInc]\n        public ulong Id;\n        public Identity Owner;\n        public uint Value;\n    }\n\n    [SpacetimeDB.Reducer]\n    public static void AddRecord(ReducerContext ctx, uint value)\n    {\n        ctx.Db.ScoreRecord.Insert(new ScoreRecord { Id = 0, Owner = ctx.Sender, Value = value });\n    }\n}\n```\n\n## Tables\n\n`[SpacetimeDB.Table(...)]` on a `public partial struct`. `Accessor` should be PascalCase:\n\n```csharp\n[SpacetimeDB.Table(Accessor = \"Entity\", Public = true)]\npublic partial struct Entity\n{\n    [PrimaryKey]\n    [AutoInc]\n    public ulong Id;\n    [SpacetimeDB.Index.BTree]\n    public Identity Owner;\n    public string Name;\n    [SpacetimeDB.Index.BTree]\n    public bool Active;\n}\n```\n\nOptions: `Accessor = \"PascalCase\"` (recommended), `Public = true`, `Scheduled = nameof(ReducerFn)`, `ScheduledAt = nameof(field)`, `Event = true`\n\n`ctx.Db` accessors use the `Accessor` name: `ctx.Db.Entity`, `ctx.Db.ScoreRecord`.\n\n## Column Types\n\n| C# type | Notes |\n|---------|-------|\n| `byte` / `ushort` / `uint` / `ulong` | unsigned integers |\n| `U128` / `U256` | large unsigned integers (SpacetimeDB types) |\n| `sbyte` / `short` / `int` / `long` | signed integers |\n| `I128` / `I256` | large signed integers (SpacetimeDB types) |\n| `float` / `double` | floats |\n| `bool` | boolean |\n| `string` | text |\n| `List<T>` | list/array |\n| `Identity` | user identity |\n| `ConnectionId` | connection handle |\n| `Timestamp` | server timestamp (microseconds since epoch) |\n| `TimeDuration` | duration in microseconds |\n| `Uuid` | UUID |\n\nOptional columns: nullable types (`string? Nickname`, `uint? HighScore`)\n\n## Column Attributes\n\nThe complete set of column attributes:\n\n```csharp\n[PrimaryKey]          // primary key\n[AutoInc]             // auto-increment (use 0 as placeholder on insert)\n[Unique]              // unique constraint; indexes the column, enables .Find()\n[SpacetimeDB.Index.BTree]  // btree index (enables .Filter() on this column)\n[Default(true)]       // migration-safe default for a newly appended field\n```\n\nDefaults support compatible addition of a newly appended field. Do not apply `[Default(...)]` to primary-key, unique, or auto-increment fields.\n\n## Indexes\n\nWrite the index attribute fully qualified: `[SpacetimeDB.Index.BTree]`. Prefer inline for single-column; multi-column uses struct-level:\n\n```csharp\n// Inline (preferred for single-column):\n[SpacetimeDB.Index.BTree]\npublic ulong AuthorId;\n// Access: ctx.Db.Post.AuthorId.Filter(authorId)\n\n// Multi-column (struct-level):\n[SpacetimeDB.Table(Accessor = \"Membership\")]\n[SpacetimeDB.Index.BTree(Accessor = \"ByGroupUser\", Columns = new[] { nameof(GroupId), nameof(UserId) })]\npublic partial struct Membership { public ulong GroupId; public Identity UserId; ... }\n```\n\nPrefer a multi-column index over filtering by one column and looping.\n\n## Reducers\n\n```csharp\n[SpacetimeDB.Reducer]\npublic static void CreateEntity(ReducerContext ctx, string name, int age)\n{\n    ctx.Db.Entity.Insert(new Entity { Owner = ctx.Sender, Name = name, Age = age, Active = true });\n}\n\n// No arguments:\n[SpacetimeDB.Reducer]\npublic static void DoReset(ReducerContext ctx) { ... }\n```\n\n## DB Operations\n\n```csharp\nvar row = ctx.Db.Entity.Insert(new Entity { Name = \"Sample\" });   // Insert; returns the row with AutoInc fields assigned\nctx.Db.Entity.Id.Find(entityId);                                  // Find by PK → Entity? (nullable)\nctx.Db.Entity.Identity.Find(ctx.Sender);                          // Find by unique column → Entity?\nif (ctx.Db.Entity.Id.Find(entityId) is { } entity) { ... }        // unwrap Entity? before member access\nctx.Db.Item.AuthorId.Filter(authorId);                            // Filter by index → IEnumerable<Item>\nctx.Db.Entity.Iter();                                             // All rows → IEnumerable<Entity>\nctx.Db.Entity.Count;                                              // Count rows\nctx.Db.Entity.Id.Update(existing with { Name = newName });        // Update by PK\nctx.Db.Entity.Id.Delete(entityId);                                // Delete by PK\n```\n\nNote: Filter/Iter return enumerables. Use `.ToList()` if you need to sort or mutate.\n\nThe pattern is `ctx.Db.{Accessor}.{ColumnName}.{Method}(value)` for all indexed column operations.\n\n## Lifecycle Hooks\n\n```csharp\n[SpacetimeDB.Reducer(ReducerKind.Init)]\npublic static void OnInit(ReducerContext ctx) { ... }\n\n[SpacetimeDB.Reducer(ReducerKind.ClientConnected)]\npublic static void OnConnect(ReducerContext ctx) { ... }\n\n[SpacetimeDB.Reducer(ReducerKind.ClientDisconnected)]\npublic static void OnDisconnect(ReducerContext ctx) { ... }\n```\n\n`ctx.ConnectionId` is `ConnectionId?`, including in connection lifecycle reducers. Check or unwrap it before storing it in a non-nullable column or passing it to an index accessor.\n\n## Views\n\n```csharp\n// Anonymous view (same result for all clients):\n[SpacetimeDB.View(Accessor = \"ActiveUsers\", Public = true)]\npublic static List<Entity> ActiveUsers(AnonymousViewContext ctx)\n{\n    return ctx.Db.Entity.Active.Filter(true).ToList();\n}\n\n// Per-user view:\n[SpacetimeDB.View(Accessor = \"MyEntities\", Public = true)]\npublic static List<Entity> MyEntities(ViewContext ctx)\n{\n    return ctx.Db.Entity.Owner.Filter(ctx.Sender).ToList();\n}\n```\n\nView contexts expose read-only table handles. These support `Count` plus `Find`/`Filter` on declared indexes, but not full-table `Iter()`. Start procedural view traversal from an indexed lookup or filter.\n\nQuery-builder views use `ViewContext`, `ctx.From`, and return `IQuery<T>` directly. Use `Where` for predicates and `RightSemijoin` when the result should contain right-side rows that have a matching left-side row:\n\n```csharp\nctx.From.Article().Where(article => article.Published.Eq(true));\nctx.From.Subscription().RightSemijoin(\n    ctx.From.Account(),\n    (subscription, account) => subscription.AccountId.Eq(account.Id)\n);\n```\n\nDeclare a procedural view primary key in its attribute: `[SpacetimeDB.View(Accessor = \"CatalogEntry\", Public = true, PrimaryKey = nameof(CatalogRow.Sku))]`.\n\nProcedural-view primary keys are explicit schema metadata. Add one only when the view itself is required to expose a primary key; a source table's primary key is not inherited by the view.\n\nInclusive btree ranges use tuples, for example `ctx.Db.Shipment.DeliverBy.Filter((new Timestamp(1_000), new Timestamp(2_000)))`.\n\n## Client Visibility Filters\n\n```csharp\n[ClientVisibilityFilter]\npublic static readonly Filter PrivateNoteFilter = new Filter.Sql(\n    \"SELECT * FROM OwnedRow WHERE Owner = :sender\"\n);\n```\n\n## Reducer Context API\n\n`ReducerContext` (`ctx`) is the only source of sender identity, time, and randomness; stdlib clocks and RNG are unavailable in modules.\n\n```csharp\n// Auth: ctx.Sender is the caller's Identity\nif (row.Owner != ctx.Sender)\n    throw new Exception(\"unauthorized\");\n\n// Server timestamp (deterministic per reducer call)\nctx.Db.Item.Insert(new Item { CreatedAt = ctx.Timestamp, .. });\n\n// Timestamp arithmetic\nvar expiry = ctx.Timestamp + new TimeDuration(delayMicros);\n\n// Deterministic RNG\nint roll = ctx.Rng.Next(1, 7);          // [1, 7): inclusive 1, exclusive 7\ndouble f = ctx.Rng.NextDouble();        // [0.0, 1.0)\n\n// Timestamp → milliseconds since epoch\ntimestamp.MicrosecondsSinceUnixEpoch / 1000\n```\n\n## Scheduled Tables\n\nDeclare the scheduled table and its reducer in the same `Module` class so `nameof(...)` resolves:\n\n```csharp\n[SpacetimeDB.Table(\n    Accessor = \"TickTimer\",\n    Scheduled = nameof(Tick),\n    ScheduledAt = nameof(ScheduledAt),\n    Public = true\n)]\npublic partial struct TickTimer\n{\n    [PrimaryKey]\n    [AutoInc]\n    public ulong ScheduledId;\n    public ScheduleAt ScheduledAt;\n}\n\n[SpacetimeDB.Reducer]\npublic static void Tick(ReducerContext ctx, TickTimer timer)\n{\n    // timer row is auto-deleted after this reducer runs\n}\n\n// One-time: fires once at a specific time\nvar at = new ScheduleAt.Time(ctx.Timestamp + new TimeDuration(10_000_000));\n// Repeating: fires on an interval\nvar at = new ScheduleAt.Interval(TimeSpan.FromSeconds(5));\n\nctx.Db.TickTimer.Insert(new TickTimer { ScheduledId = 0, ScheduledAt = at });\n```\n\nScheduled reducer callbacks use the ordinary `[SpacetimeDB.Reducer]` attribute. There is no `ReducerKind.Scheduled`; the table's `Scheduled` option associates the callback.\n\nTo construct a `ConnectionId` from a 128-bit numeric representation, encode it as exactly 16 little-endian bytes and call `ConnectionId.From(bytes)`. The result is nullable and must be checked before use.\n\n## Procedures and HTTP\n\nProcedures are unstable APIs, so modules using them should include `#pragma warning disable STDB_UNSTABLE`. They receive `ProcedureContext` and may return `[SpacetimeDB.Type]` values:\n\n```csharp\n[SpacetimeDB.Type]\npublic partial struct ResultValue { public string Value; }\n\n[SpacetimeDB.Procedure]\npublic static ResultValue Inspect(ProcedureContext ctx, string input) =>\n    new() { Value = input };\n```\n\nOutbound HTTP is available through `ctx.Http`; handle its success/error result before using the response. Open short database transactions with `ctx.WithTx`. Perform network I/O before opening the transaction, and keep only database work inside its callback.\n\n```csharp\nvar result = ctx.Http.Get(uri);\nvar text = result.Match(\n    response => response.Body.ToStringUtf8Lossy(),\n    error => throw new Exception(error.Message)\n);\n\nctx.WithTx(tx =>\n{\n    tx.Db.ScoreRecord.Insert(new ScoreRecord { Id = 0, Owner = ctx.Sender, Value = 1 });\n    return 0;\n});\n```\n\n`WithTx` is generic: its callback must return a value (use `return 0;` when no result is needed). The callback's generated `tx.Db` exposes module table accessors; `ProcedureContext` and `HandlerContext` do not expose tables directly.\n\nFor non-GET requests, construct and send an `HttpRequest` directly:\n\n```csharp\nvar result = ctx.Http.Send(new HttpRequest\n{\n    Uri = uri,\n    Method = SpacetimeDB.HttpMethod.Post,\n    Headers = new() { new HttpHeader(\"content-type\", \"text/plain\") },\n    Body = HttpBody.FromString(payload),\n});\n```\n\n`HttpResponse.StatusCode` is `ushort`. HTTP headers are `HttpHeader` values, not tuples, and each header's `Value` is `byte[]`; decode text values with `System.Text.Encoding.UTF8.GetString(header.Value)`. Treat bodies as bytes: use `HttpBody.FromString(...)` to create text, `new HttpBody(bytes)` to supply raw bytes, `ToBytes()` to read raw bytes, and `ToStringUtf8Lossy()` to read text. There is no `HttpBody.FromBytes`, and `ToString()` does not return body contents. Qualify `SpacetimeDB.HttpMethod` when .NET's implicit `System.Net.Http` imports could make the name ambiguous.\n\nScheduled procedures use the ordinary scheduled-table shape. Its `Scheduled` name refers to a `[SpacetimeDB.Procedure]` method taking `ProcedureContext` plus the scheduled row, and database access inside that procedure goes through `ctx.WithTx`.\n\nInbound HTTP uses handler attributes and one router. Handler database access also goes through `ctx.WithTx`:\n\n```csharp\n[SpacetimeDB.HttpHandler]\npublic static HttpResponse Health(HandlerContext ctx, HttpRequest request) => new(\n    200, HttpVersion.Http11, new(), HttpBody.FromString(\"ok\")\n);\n\n[SpacetimeDB.HttpRouter]\npublic static Router Routes() => SpacetimeDB.Router.New().Get(\"/health\", Handlers.Health);\n```\n\n`Handlers` is generated from methods marked `[SpacetimeDB.HttpHandler]`; do not declare it yourself. Reference an attributed method in a router as `Handlers.MethodName`.\n\n## Custom Types\n\n```csharp\n[SpacetimeDB.Type]\npublic enum Status { Online, Away, Offline }\n\n[SpacetimeDB.Type]\npublic partial struct Point { public float X; public float Y; }\n```\n\nTagged enums (discriminated unions): a `partial record` with empty body and no constructor parameters. Payloads are `[Type] partial struct`s:\n\n```csharp\n[SpacetimeDB.Type]\npublic partial struct Circle { public int Radius; }\n\n[SpacetimeDB.Type]\npublic partial struct Rectangle { public int Width; public int Height; }\n\n[SpacetimeDB.Type]\npublic partial record Shape : SpacetimeDB.TaggedEnum<(Circle Circle, Rectangle Rectangle)> { }\n\n// Construct variants via the generated nested constructors:\nvar a = new Shape.Circle(new Circle { Radius = 10 });\nvar b = new Shape.Rectangle(new Rectangle { Width = 4, Height = 6 });\n```\n\n<!-- File: skills/mcp/README.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Mcp Skill\n\nPath: `skills/mcp/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/mcp/README.md)\n\n<!-- File: skills/mcp/SKILL.md (Tokens: ~1330 | Category: anthropic-skill) -->\n---\nname: mcp\ndescription: Operate a running SpacetimeDB database through MCP tools rather than the CLI - list databases, read schemas, run SQL, and call reducers. Use when the client exposes spacetimedb MCP tools and the task is to inspect or change data in a live database.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: shared\n  language: all\n  cursor_globs: \"**/*\"\n  cursor_always_apply: false\ntriggers:\n  - inspect the database\n  - query the database\n  - list my databases\n  - read the schema\n  - call a reducer\n  - use the MCP server\n  - spacetimedb MCP\n---\n\n# SpacetimeDB over MCP\n\nA SpacetimeDB host speaks MCP, so an MCP-aware client can operate a live database with tool calls\ninstead of shell commands. If the client exposes `spacetimedb` tools, use them for anything that\nreads or changes a running database.\n\nCheck the tool list before deciding they are missing. The tools are passive: they appear as\n`spacetimedb.list_databases`, `spacetimedb.get_schema`, `spacetimedb.sql`, `spacetimedb.call`, and\n`spacetimedb.ping`, and nothing announces them.\n\n## Which to reach for\n\n| Task | Use |\n| --- | --- |\n| List databases, read a schema, run SQL, call a reducer | **MCP tools** |\n| init, build, publish, generate, start, logs | **`spacetime` CLI** (see the `cli` skill) |\n\nThe MCP tools only operate a database that already exists. They cannot scaffold a project, compile a\nmodule, publish, or generate bindings, so the two are complementary rather than alternatives. Prefer\nthe tools when they are present: they are typed, they return JSON, and the client can gate the\ndestructive ones. When no MCP client is attached, the equivalent CLI commands are correct.\n\n## The tools\n\n| Tool | Arguments | Returns |\n| --- | --- | --- |\n| `list_databases` | none | the databases **you own**, with identity and names |\n| `get_schema` | `database` | tables and reducers as JSON |\n| `sql` | `database`, `sql`, optional `confirmed` | rows as JSON |\n| `call` | `database`, `reducer`, optional `args` (JSON array) | the reducer outcome |\n| `ping` | optional `message` | a health check |\n\n`list_databases` lists only your own databases, so it is empty for an anonymous identity. Start there\nwhen you do not know the database name.\n\n## Two shapes, so read `tools/list` first\n\nA server is either host-wide or scoped to one database. Do not assume which:\n\n**Host-wide** (`spacetime mcp` with no database, or `POST /v1/mcp`). Every data tool takes a required\n`database` argument, a name or an identity, and `list_databases` is offered:\n\n```json\n{ \"name\": \"sql\", \"arguments\": { \"database\": \"mydb\", \"sql\": \"SELECT * FROM message\" } }\n```\n\n**Scoped** (`spacetime mcp <database>`, or `POST /v1/database/<db>/mcp`). The connection fixes the\ndatabase, so there is no `database` argument and no `list_databases`:\n\n```json\n{ \"name\": \"sql\", \"arguments\": { \"sql\": \"SELECT * FROM message\" } }\n```\n\nWhen `spacetime mcp` runs inside a project with a `spacetime.json` that has a single unambiguous\n`server`, it uses that server unless `--server` or `--no-config` is passed. It does not infer a\ndatabase from the config; omitting the database argument still means host-wide mode.\n\n## Rules that do not change\n\nThe tools run with your identity, exactly as the HTTP API does. The model is the same as everywhere\nelse, so the `concepts` skill still governs:\n\n1. **Reducers are the write path.** Use `call` to change data. It runs in a transaction that either\n   fully commits or fully rolls back.\n2. **SQL writes require ownership.** `sql` reads public tables; writing through it needs you to own\n   the database. Prefer `call`.\n3. **Private tables are not client-readable.** `get_schema` still shows a private table's\n   declaration, so a `no such table` error from `sql` usually means the table is private rather than\n   missing. Access depends on your identity, so do not assume a private table is readable.\n4. **Tool errors come back in band.** A failed reducer or a bad query returns a result with\n   `isError: true` and the message as text, not a transport failure. Read the text before retrying.\n\n## Inspecting a database\n\n```\nlist_databases {}\nget_schema     { \"database\": \"mydb\" }\nsql            { \"database\": \"mydb\", \"sql\": \"SELECT * FROM message\" }\ncall           { \"database\": \"mydb\", \"reducer\": \"send_message\", \"args\": [\"hello\"] }\n```\n\nPass `\"confirmed\": true` to `sql` to wait for a durably confirmed read.\n\n## Troubleshooting\n\n| Message | Meaning |\n| --- | --- |\n| `database argument must be a string` | The server is host-wide and you omitted `database` |\n| `unknown tool: list_databases` | The server is scoped to one database already |\n| `` `x` not found `` | No such database on this server, or a name where an identity was meant |\n| `no such table: x` | The table is private, or you are querying the wrong database |\n| No `spacetimedb` tools at all | No MCP server is connected. Use the CLI instead (`cli` skill) |\n\n`spacetime mcp` is UNSTABLE and subject to breaking changes. If a client cannot start it, fall back\nto the CLI commands in the `cli` skill.\n\nReference: https://spacetimedb.com/docs\n\n<!-- File: skills/rust-server/README.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Rust-server Skill\n\nPath: `skills/rust-server/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/clockworklabs/SpacetimeDB/HEAD/skills/rust-server/README.md)\n\n<!-- File: skills/rust-server/SKILL.md (Tokens: ~3304 | Category: anthropic-skill) -->\n---\nname: rust-server\ndescription: SpacetimeDB Rust server module SDK reference. Use when writing tables, reducers, or module logic in Rust.\nlicense: Apache-2.0\nmetadata:\n  author: clockworklabs\n  version: \"2.0\"\n  role: server\n  language: rust\n  cursor_globs: \"**/*.rs\"\n  cursor_always_apply: true\n---\n\n# SpacetimeDB Rust SDK Reference\n\n## Imports\n\n```rust\nuse spacetimedb::{\n    procedure, reducer, table, Filter, Identity, ProcedureContext, Query,\n    ReducerContext, SpacetimeType, Table, ConnectionId, ScheduleAt,\n    TimeDuration, Timestamp, Uuid,\n};\n```\n\n**`Table` is required.** Without it, `ctx.db.*.insert()`, `.iter()`, `.find()` etc. won't compile (`no method named 'insert' found`).\n\n## Tables\n\n`#[spacetimedb::table(...)]` on a `pub struct`. `accessor` must be snake_case:\n\n```rust\n#[spacetimedb::table(accessor = entity, public)]\npub struct Entity {\n    #[primary_key]\n    #[auto_inc]\n    pub id: u64,\n    pub owner: Identity,\n    pub name: String,\n    #[index(btree)]\n    pub active: bool,\n}\n```\n\nOptions: `accessor = snake_case` (required), `public`, `scheduled(reducer_fn)`, `index(...)`\n\n`ctx.db` accessors use the `accessor` name (snake_case).\n\n## Column Types\n\n| Rust type | Notes |\n|-----------|-------|\n| `u8` / `u16` / `u32` / `u64` / `u128` | unsigned integers |\n| `i8` / `i16` / `i32` / `i64` / `i128` | signed integers |\n| `spacetimedb::sats::u256` / `spacetimedb::sats::i256` | 256-bit integers |\n| `f32` / `f64` | floats |\n| `bool` | boolean |\n| `String` | text |\n| `Vec<T>` | list/array |\n| `Identity` | user identity |\n| `ConnectionId` | connection handle |\n| `Timestamp` | server timestamp (microseconds since epoch) |\n| `TimeDuration` | duration in microseconds |\n| `Uuid` | UUID |\n| `Option<T>` | nullable column |\n\n## Column Attributes\n\n```rust\n#[primary_key]          // primary key\n#[auto_inc]             // auto-increment (use 0 as placeholder on insert)\n#[unique]               // unique constraint\n#[index(btree)]         // btree index (enables .filter() on this column)\n#[default(true)]        // migration-safe default for a newly appended column\n```\n\nDefaults support compatible addition of a newly appended field. Do not place `#[default(...)]` on primary-key, unique, or auto-increment columns.\n\n## Indexes\n\nPrefer `#[index(btree)]` inline for single-column. Multi-column uses table-level:\n\n```rust\n// Inline (preferred for single-column):\n#[index(btree)]\npub author_id: u64,\n// Access: ctx.db.post().author_id().filter(author_id)\n\n// Multi-column (table-level):\n#[spacetimedb::table(accessor = membership, public,\n    index(accessor = by_group_user, btree(columns = [group_id, user_id]))\n)]\npub struct Membership { pub group_id: u64, pub user_id: Identity, ... }\n// Access: ctx.db.membership().by_group_user().filter((group_id, &user_id))\n```\n\nWhen you frequently look up rows by multiple columns, prefer a multi-column index over filtering by one column and looping over the results.\n\n## Reducers\n\n```rust\n#[spacetimedb::reducer]\npub fn create_entity(ctx: &ReducerContext, name: String) {\n    ctx.db.entity().insert(Entity { id: 0, owner: ctx.sender(), name, active: true });\n}\n\n// Reducers can return Result<(), String> or Result<(), E> where E: Display\n#[spacetimedb::reducer]\npub fn validate_entity(ctx: &ReducerContext, name: String) -> Result<(), String> {\n    if name.is_empty() {\n        return Err(\"Name cannot be empty\".to_string());\n    }\n    ctx.db.entity().try_insert(Entity { id: 0, owner: ctx.sender(), name, active: true })?;\n    Ok(())\n}\n```\n\nNote: `insert()` panics on constraint violations. Use `try_insert()` with `?` when returning `Result`.\n\n## DB Operations\n\n```rust\nctx.db.entity().insert(Entity { id: 0, name: \"Sample\".into() });  // Insert (0 for autoInc)\nctx.db.entity().id().find(entity_id);                              // Find by PK → Option<Entity>\nctx.db.entity().identity().find(ctx.sender());                     // Find by unique column → Option<Entity>\nctx.db.item().author_id().filter(author_id);                       // Filter by index → iterator\nctx.db.entity().iter();                                            // All rows → iterator\nctx.db.entity().count();                                           // Count rows\nctx.db.entity().id().update(Entity { name: new_name, ..existing }); // Update (override + spread)\nctx.db.entity().id().delete(entity_id);                            // Delete by PK\nctx.db.entity().name().delete(\"Alice\".to_string());                // Delete by indexed String column\n```\n\nNote: `iter()` and `filter()` return iterators. Collect to Vec if you need `.sort()`, `.filter()`, `.map()`.\n\nRange queries on btree indexes: `filter(18..=65)`, `filter(18..)`, `filter(..18)`.\n\nString column accessors operate on the column's owned `String` type, not `&str`. Pass a `String` or `&String` to `find` and `delete`; index filters borrow the key, as in `ctx.db.product().category().filter(&\"hardware\".to_string())`.\n\n## Lifecycle Hooks\n\n```rust\n#[spacetimedb::reducer(init)]\npub fn init(ctx: &ReducerContext) { ... }\n\n#[spacetimedb::reducer(client_connected)]\npub fn on_connect(ctx: &ReducerContext) { ... }\n\n#[spacetimedb::reducer(client_disconnected)]\npub fn on_disconnect(ctx: &ReducerContext) { ... }\n```\n\nThe current connection ID is available through `ctx.connection_id()` (not a public field) and may be absent outside connection-scoped calls.\n\n## Views\n\n```rust\n// Anonymous view (same result for all clients):\nuse spacetimedb::{view, AnonymousViewContext};\n\n#[view(accessor = active_users, public)]\nfn active_users(ctx: &AnonymousViewContext) -> Vec<Entity> {\n    ctx.db.entity().active().filter(true).collect()\n}\n\n// Per-user view (result varies by sender):\nuse spacetimedb::{view, ViewContext};\n\n#[view(accessor = my_profile, public)]\nfn my_profile(ctx: &ViewContext) -> Option<Entity> {\n    ctx.db.entity().identity().find(ctx.sender())\n}\n```\n\nProcedural-view table handles support indexed `find` and `filter` access, but not full-table `iter()`. Start a procedural view from an appropriate table index.\n\nDeclare a procedural view primary key in the view attribute:\n\n```rust\n#[view(accessor = catalog_entry, public, primary_key = sku)]\nfn catalog_entry(ctx: &AnonymousViewContext) -> Vec<CatalogEntry> { ... }\n```\n\nProcedural-view primary keys are explicit schema metadata. Add one only when the view itself is required to expose a primary key; a source table's primary key is not inherited by the view.\n\nQuery-builder views use `ViewContext`, `ctx.from`, and return `impl Query<Row>`. Use `filter` for predicates and `right_semijoin` when the result should contain right-side rows that have a matching left-side row:\n\n```rust\nctx.from.article().filter(|article| article.published.eq(true))\nctx.from.subscription().right_semijoin(\n    ctx.from.account(),\n    |subscription, account| subscription.account_id.eq(account.id),\n)\n```\n\nQuery-builder comparisons against a `String` column take an owned `String`, for example `row.label.eq(\"active\".to_string())`.\n\n## Client Visibility Filters\n\n```rust\nuse spacetimedb::Filter;\n\n#[spacetimedb::client_visibility_filter]\nconst PRIVATE_NOTE_FILTER: Filter =\n    Filter::Sql(\"SELECT * FROM owned_row WHERE owner = :sender\");\n```\n\n## Reducer Context API\n\n`ReducerContext` (`ctx`) is the only source of sender identity, time, and randomness; stdlib clocks and RNG are unavailable in modules.\n\n```rust\n// Auth: ctx.sender() is the caller's Identity\nif row.owner != ctx.sender() {\n    panic!(\"unauthorized\");\n    // or: return Err(anyhow::anyhow!(\"unauthorized\"));\n}\n\n// Server timestamp (deterministic per reducer call)\nctx.db.item().insert(Item { id: 0, owner: ctx.sender(), created_at: ctx.timestamp, .. });\n\n// Timestamp arithmetic\nlet expiry = ctx.timestamp + TimeDuration::from_micros(delay_micros);\n\n// Deterministic RNG: ctx.random() for a single value, ctx.rng() for the rand::Rng trait\nuse spacetimedb::rand::Rng;\nlet n: u32 = ctx.random();                    // random u32\nlet roll: u32 = ctx.rng().gen_range(1..=6);   // any rand::Rng method\n\n// Client: Timestamp → milliseconds since epoch\ntimestamp.to_micros_since_unix_epoch() / 1000\n```\n\n## Scheduled Tables\n\n```rust\n#[spacetimedb::table(accessor = tick_timer, scheduled(tick), public)]\npub struct TickTimer {\n    #[primary_key]\n    #[auto_inc]\n    scheduled_id: u64,\n    scheduled_at: spacetimedb::ScheduleAt,\n}\n\n#[spacetimedb::reducer]\npub fn tick(ctx: &ReducerContext, timer: TickTimer) {\n    // timer row is auto-deleted after this reducer runs\n}\n\n// One-time: fires once at a specific time\nlet at = ScheduleAt::Time(ctx.timestamp + std::time::Duration::from_secs(10));\n// Repeating: fires on an interval\nlet at = ScheduleAt::Interval(std::time::Duration::from_secs(5).into());\n\nctx.db.tick_timer().insert(TickTimer { scheduled_id: 0, scheduled_at: at });\n```\n\nConstruct a connection ID from a numeric representation with `ConnectionId::from_u128(value)`.\n\n## Procedures and HTTP\n\nProcedures use `&mut ProcedureContext` and may return typed values:\n\n```rust\nuse spacetimedb::{procedure, ProcedureContext, SpacetimeType};\n\n#[derive(SpacetimeType)]\npub struct ResultValue { pub value: String }\n\n#[procedure]\npub fn inspect(_ctx: &mut ProcedureContext, input: String) -> ResultValue {\n    ResultValue { value: input }\n}\n```\n\nOutbound HTTP is available through `ctx.http`. Convenience methods such as `get` return a response, and other methods use `Request::builder()` with `ctx.http.send(request)`. `response.status()` returns a `StatusCode`; use `is_success()` to test it or `as_u16()` when a numeric status is needed. Responses are not cloneable, so inspect status and headers before consuming the body with `response.into_body().into_string_lossy()`. Header values use the fallible `to_str()` conversion; they do not provide `as_str()`.\n\nOpen short database transactions with `ctx.with_tx(|tx| ...)`. Access tables inside the callback through `tx.db`, not directly on `tx`. It returns the callback's value directly, so do not call `unwrap` or `expect` on the result unless the callback itself returns a `Result`. The callback implements `Fn`, so clone captured owned values when storing them rather than moving them out of the closure. Perform network I/O before opening the transaction.\n\nFor an outbound request without a convenience method:\n\n```rust\nlet request = Request::builder()\n    .method(\"POST\")\n    .uri(url)\n    .body(Body::from_bytes(data))\n    .unwrap();\nlet response = ctx.http.send(request).expect(\"request failed\");\n```\n\nScheduled procedures use the ordinary scheduled-table shape, but the scheduled function is marked `#[procedure]` and receives `&mut ProcedureContext` plus the scheduled row.\n\nInbound HTTP uses handler functions and one router:\n\n```rust\nuse spacetimedb::http::{handler, router, Body, HandlerContext, Request, Response, Router};\n\n#[handler]\nfn health(_ctx: &mut HandlerContext, _request: Request) -> Response {\n    Response::builder().status(200).body(Body::from_bytes(\"ok\")).unwrap()\n}\n\n#[router]\nfn routes() -> Router { Router::new().get(\"/health\", health) }\n```\n\n`HandlerContext` does not expose `db`; open database access with `ctx.with_tx(|tx| ...)`. HTTP response bodies must own their data or borrow `'static` data, so convert dynamic borrowed text to an owned `String` before passing it to `Body::from_bytes`.\n\n## Logging\n\n```rust\nlog::info!(\"Player connected: {:?}\", ctx.sender());\nlog::warn!(\"Low health: {}\", hp);\nlog::error!(\"Failed to find entity\");\n```\n\n## Custom Types\n\n```rust\n#[derive(SpacetimeType)]\npub enum Status { Online, Away, Offline }\n\n#[derive(SpacetimeType)]\npub struct Point { x: f32, y: f32 }\n```\n\n## Complete Example\n\n```rust\n// src/lib.rs\nuse spacetimedb::{Identity, ReducerContext, SpacetimeType, Table, Timestamp};\n\n#[spacetimedb::table(accessor = entity, public)]\npub struct Entity {\n    #[primary_key]\n    pub identity: Identity,\n    pub name: String,\n    pub active: bool,\n}\n\n#[spacetimedb::table(accessor = record, public)]\npub struct Record {\n    #[primary_key]\n    #[auto_inc]\n    pub id: u64,\n    pub owner: Identity,\n    pub value: u32,\n    pub created_at: Timestamp,\n}\n\n#[spacetimedb::reducer(client_connected)]\npub fn on_connect(ctx: &ReducerContext) {\n    if let Some(existing) = ctx.db.entity().identity().find(ctx.sender()) {\n        ctx.db.entity().identity().update(Entity { active: true, ..existing });\n    }\n}\n\n#[spacetimedb::reducer(client_disconnected)]\npub fn on_disconnect(ctx: &ReducerContext) {\n    if let Some(existing) = ctx.db.entity().identity().find(ctx.sender()) {\n        ctx.db.entity().identity().update(Entity { active: false, ..existing });\n    }\n}\n\n#[spacetimedb::reducer]\npub fn create_entity(ctx: &ReducerContext, name: String) {\n    if ctx.db.entity().identity().find(ctx.sender()).is_some() {\n        panic!(\"already exists\");\n    }\n    ctx.db.entity().insert(Entity { identity: ctx.sender(), name, active: true });\n}\n\n#[spacetimedb::reducer]\npub fn add_record(ctx: &ReducerContext, value: u32) {\n    if ctx.db.entity().identity().find(ctx.sender()).is_none() {\n        panic!(\"not found\");\n    }\n    ctx.db.record().insert(Record {\n        id: 0,\n        owner: ctx.sender(),\n        value,\n        created_at: ctx.timestamp,\n    });\n}\n```\n\n<!-- ... +258 more modular skills available via /api/skills/clockworklabs/SpacetimeDB?path={path} -->\n</yakaai_skills>"}