Agent skill

Convex Create Component

by spokvulcan in spokvulcan/poker-planning

Builds reusable Convex components with isolated tables and app-facing APIs.

MITAuto-check passedProduct & Project Management

Install Convex Create Component

skills CLI
$ npx skills add spokvulcan/poker-planning --skill convex-create-component -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install spokvulcan/poker-planning convex-create-component --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/spokvulcan/poker-planning.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/convex-create-component .claude/skills/convex-create-component && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
convex-create-component
GitHub stars
114
Used in
8 other repos
Token cost
~2.6k tokens
SKILL.md length
802 words
Files
7 (incl. references, assets)
Skills in repo
6
Repo updated
First seen
Licence
MIT

At a glance

Builds reusable Convex components with isolated tables and app-facing APIs.

  • Works in 10 steps: Ask the user what they are building and… → Choose the shape using the decision tree… → Decide whether a component is justified.… → …
  • Reusable backend modules
  • SKILL.md covers When to Use, When Not to Use, Workflow and Choose the Shape, plus 7 more sections
  • Calls npx; needs OPENAI_API_KEY

What it does

Convex Create Component is an agent skill from spokvulcan/poker-planning. Builds reusable Convex components with isolated tables and app-facing APIs. Use for new components, reusable backend modules, integrations, or component boundary work.

Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 9 other files, including reference files and assets (for example `agents/openai.yaml`, `references/advanced-patterns.md` and `references/hybrid-components.md`).

It sits in Product & Project Management, covering Sprint planning and agile. The repository describes itself as: Free open-source planning poker for Scrum teams. No registration required. Real-time estimation for remote agile teams. The licence is MIT.

When your agent uses it

  • Reusable backend modules
  • Component boundary work

Example prompts

  • “Use the convex-create-component skill to build reusable Convex components with isolated tables and app-facing APIs”
  • “/convex-create-component”

Requirements

  • Node.js
  • A credential in OPENAI_API_KEY

Workflow steps

10 steps, taken from the first numbered list in SKILL.md.

  1. Ask the user what they are building and what the end goal is. If the repo
  2. Choose the shape using the decision tree below and read the matching
  3. Decide whether a component is justified. Prefer normal app code or a regular
  4. Make a short plan for
  5. Create the component structure with convex.config.ts, schema.ts, and
  6. Implement functions using the component's own ./_generated/server imports,
  7. Wire the component into the app with app.use(...). If the app does not
  8. Call the component from the app through components. using
  9. If React clients, HTTP callers, or public APIs need access, create wrapper
  10. Run npx convex dev and fix codegen, type, or boundary issues before

What it can do on your machine

Read from SKILL.md and the folder at commit 665a13f. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • npx

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • docs.convex.dev

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • OPENAI_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Convex Create Component loads about 2.6k tokens when it runs, and up to ~4.5k if it reads all its reference files. Until then it costs about 48 tokens; SKILL.md has 802 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~48
When it runs · the whole SKILL.md, loaded when a task matches
~2.6k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~4.5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from spokvulcan/poker-planning at commit 665a13f, republished under its MIT licence (© spokvulcan). 802 words, ~2,610 tokens.

Download SKILL.mdSave it as .claude/skills/convex-create-component/SKILL.md (or your agent's skills folder). This skill also uses 6 other files; get the full folder from GitHub.
name
convex-create-component
description
Builds reusable Convex components with isolated tables and app-facing APIs. Use for new components, reusable backend modules, integrations, or component boundary work.

Convex Create Component

Create reusable Convex components with clear boundaries and a small app-facing API.

When to Use

  • Creating a new Convex component in an existing app
  • Extracting reusable backend logic into a component
  • Building a third-party integration that should own its own tables and workflows
  • Packaging Convex functionality for reuse across multiple apps

When Not to Use

  • One-off business logic that belongs in the main app
  • Thin utilities that do not need Convex tables or functions
  • App-level orchestration that should stay in convex/
  • Cases where a normal TypeScript library is enough

Workflow

  1. Ask the user what they are building and what the end goal is. If the repo already makes the answer obvious, say so and confirm before proceeding.
  2. Choose the shape using the decision tree below and read the matching reference file.
  3. Decide whether a component is justified. Prefer normal app code or a regular library if the feature does not need isolated tables, backend functions, or reusable persistent state.
  4. Make a short plan for:
    • what tables the component owns
    • what public functions it exposes
    • what data must be passed in from the app (auth, env vars, parent IDs)
    • what stays in the app as wrappers or HTTP mounts
  5. Create the component structure with convex.config.ts, schema.ts, and function files.
  6. Implement functions using the component's own ./_generated/server imports, not the app's generated files.
  7. Wire the component into the app with app.use(...). If the app does not already have convex/convex.config.ts, create it.
  8. Call the component from the app through components.<name> using ctx.runQuery, ctx.runMutation, or ctx.runAction.
  9. If React clients, HTTP callers, or public APIs need access, create wrapper functions in the app instead of exposing component functions directly.
  10. Run npx convex dev and fix codegen, type, or boundary issues before finishing.

Choose the Shape

Ask the user, then pick one path:

GoalShapeReference
Component for this app onlyLocalreferences/local-components.md
Publish or share across appsPackagedreferences/packaged-components.md
User explicitly needs local + shared library codeHybridreferences/hybrid-components.md
Not sureDefault to localreferences/local-components.md

Read exactly one reference file before proceeding.

Default Approach

Unless the user explicitly wants an npm package, default to a local component:

  • Put it under convex/components/<componentName>/
  • Define it with defineComponent(...) in its own convex.config.ts
  • Install it from the app's convex/convex.config.ts with app.use(...)
  • Let npx convex dev generate the component's own _generated/ files

Component Skeleton

A minimal local component with a table and two functions, plus the app wiring.

ts
// convex/components/notifications/convex.config.ts
import { defineComponent } from "convex/server";

export default defineComponent("notifications");
ts
// convex/components/notifications/schema.ts
import { defineSchema, defineTable } from "convex/server";
import { v } from "convex/values";

export default defineSchema({
  notifications: defineTable({
    userId: v.string(),
    message: v.string(),
    read: v.boolean(),
  }).index("by_user", ["userId"]),
});
ts
// convex/components/notifications/lib.ts
import { v } from "convex/values";
import { mutation, query } from "./_generated/server.js";

export const send = mutation({
  args: { userId: v.string(), message: v.string() },
  returns: v.id("notifications"),
  handler: async (ctx, args) => {
    return await ctx.db.insert("notifications", {
      userId: args.userId,
      message: args.message,
      read: false,
    });
  },
});

export const listUnread = query({
  args: { userId: v.string() },
  returns: v.array(
    v.object({
      _id: v.id("notifications"),
      _creationTime: v.number(),
      userId: v.string(),
      message: v.string(),
      read: v.boolean(),
    }),
  ),
  handler: async (ctx, args) => {
    return await ctx.db
      .query("notifications")
      .withIndex("by_user", (q) => q.eq("userId", args.userId))
      .filter((q) => q.eq(q.field("read"), false))
      .collect();
  },
});
ts
// convex/convex.config.ts
import { defineApp } from "convex/server";
import notifications from "./components/notifications/convex.config.js";

const app = defineApp();
app.use(notifications);

export default app;
ts
// convex/notifications.ts  (app-side wrapper)
import { v } from "convex/values";
import { mutation, query } from "./_generated/server";
import { components } from "./_generated/api";
import { getAuthUserId } from "@convex-dev/auth/server";

export const sendNotification = mutation({
  args: { message: v.string() },
  returns: v.null(),
  handler: async (ctx, args) => {
    const userId = await getAuthUserId(ctx);
    if (!userId) throw new Error("Not authenticated");

    await ctx.runMutation(components.notifications.lib.send, {
      userId,
      message: args.message,
    });
    return null;
  },
});

export const myUnread = query({
  args: {},
  handler: async (ctx) => {
    const userId = await getAuthUserId(ctx);
    if (!userId) throw new Error("Not authenticated");

    return await ctx.runQuery(components.notifications.lib.listUnread, {
      userId,
    });
  },
});

Note the reference path shape: a function in convex/components/notifications/lib.ts is called as components.notifications.lib.send from the app.

Show full SKILL.md (376 more words)Show less

Critical Rules

  • Keep authentication in the app, because ctx.auth is not available inside components.
  • Keep environment access in the app, because component functions cannot read process.env.
  • Pass parent app IDs across the boundary as strings, because Id types become plain strings in the app-facing ComponentApi.
  • Do not use v.id("parentTable") for app-owned tables inside component args or schema, because the component has no access to the app's table namespace.
  • Import query, mutation, and action from the component's own ./_generated/server, not the app's generated files.
  • Do not expose component functions directly to clients. Create app wrappers when client access is needed, because components are internal and need auth/env wiring the app provides.
  • If the component defines HTTP handlers, mount the routes in the app's convex/http.ts, because components cannot register their own HTTP routes.
  • If the component needs pagination, use paginator from convex-helpers instead of built-in .paginate(), because .paginate() does not work across the component boundary.
  • Add args and returns validators to all public component functions, because the component boundary requires explicit type contracts.

Patterns

Authentication and environment access
ts
// Bad: component code cannot rely on app auth or env
const identity = await ctx.auth.getUserIdentity();
const apiKey = process.env.OPENAI_API_KEY;
ts
// Good: the app resolves auth and env, then passes explicit values
const userId = await getAuthUserId(ctx);
if (!userId) throw new Error("Not authenticated");

await ctx.runAction(components.translator.translate, {
  userId,
  apiKey: process.env.OPENAI_API_KEY,
  text: args.text,
});
Client-facing API
ts
// Bad: assuming a component function is directly callable by clients
export const send = components.notifications.send;
ts
// Good: re-export through an app mutation or query
export const sendNotification = mutation({
  args: { message: v.string() },
  returns: v.null(),
  handler: async (ctx, args) => {
    const userId = await getAuthUserId(ctx);
    if (!userId) throw new Error("Not authenticated");

    await ctx.runMutation(components.notifications.lib.send, {
      userId,
      message: args.message,
    });
    return null;
  },
});
IDs across the boundary
ts
// Bad: parent app table IDs are not valid component validators
args: {
  userId: v.id("users");
}
ts
// Good: treat parent-owned IDs as strings at the boundary
args: {
  userId: v.string();
}
Advanced Patterns

For additional patterns including function handles for callbacks, deriving validators from schema, static configuration with a globals table, and class-based client wrappers, see references/advanced-patterns.md.

Validation

Try validation in this order:

  1. npx convex codegen --component-dir convex/components/<name>
  2. npx convex codegen
  3. npx convex dev

Important:

  • Fresh repos may fail these commands until CONVEX_DEPLOYMENT is configured.
  • Until codegen runs, component-local ./_generated/* imports and app-side components.<name>... references will not typecheck.
  • If validation blocks on Convex login or deployment setup, stop and ask the user for that exact step instead of guessing.

Reference Files

Read exactly one of these after the user confirms the goal:

  • references/local-components.md
  • references/packaged-components.md
  • references/hybrid-components.md

Official docs: Authoring Components

Checklist

  • Asked the user what they want to build and confirmed the shape
  • Read the matching reference file
  • Confirmed a component is the right abstraction
  • Planned tables, public API, boundaries, and app wrappers
  • Component lives under convex/components/<name>/ (or package layout if publishing)
  • Component imports from its own ./_generated/server
  • Auth, env access, and HTTP routes stay in the app
  • Parent app IDs cross the boundary as v.string()
  • Public functions have args and returns validators
  • Ran npx convex dev and fixed codegen or type issues

© spokvulcan, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 6 other files (references, assets) in .agents/skills/convex-create-component of spokvulcan/poker-planning.

  • SKILL.md
  • agents/openai.yaml
  • assets/icon.svg
  • references/advanced-patterns.md
  • references/hybrid-components.md
  • references/local-components.md
  • references/packaged-components.md

Open the folder on GitHubat commit 665a13f

Used in 8 other repositories

We found 9 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 8 other GitHub owners. This page covers the copy in spokvulcan/poker-planning, which our catalogue first saw on October 7, 2026.

Compare with similar skills

Convex Create Component next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Convex Create Component compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Convex Create Component this skillspokvulcan/poker-planning1148 repos~2.6kAutomated safety check: PassMIT
Agile Product Owneralirezarezvani/claude-skills28k3 repos~3.2kAutomated safety check: PassMIT
Walking Skeleton Roadmap Scopingprime-radiant-inc/iterative-development181—~1.7kAutomated safety check: PassApache-2.0
Triagejoa23/linear-cli144—~699Automated safety check: PassMIT
Tapd Iteration PlanTencentBlueKing/bk-bcs840—~1.6kAutomated safety check: PassCustom licence
Track Backlogcdiggins/plato106—~1kAutomated safety check: PassMIT

Similar skills

  • Agile Product Owner

    alirezarezvani/claude-skills

    Writes INVEST-checked user stories with acceptance criteria, splits epics, plans sprints from velocity and ranks the backlog with a weighted score.

    28k GitHub starsUsed in 3 repos~3.2k tokens
    Product & Project ManagementAuto-check passed
  • Walking Skeleton Roadmap Scoping

    prime-radiant-inc/iterative-development

    Turns extracted requirements into a roadmap by choosing a walking skeleton iteration with its first journey scenario and ordering the remaining work into follow-on iterations.

    181 GitHub stars~1.7k tokensUpdated 4 mo ago
    Product & Project ManagementAuto-check passed
  • Triage

    joa23/linear-cli

    Triage and prioritize Linear backlog issues using the linear CLI.

    144 GitHub stars~699 tokensUpdated 24 days ago
    Product & Project ManagementAuto-check passed
  • Tapd Iteration Plan

    TencentBlueKing/bk-bcs

    TAPD 迭代规划技能。基于"approved"状态的需求池,结合需求依赖关系、size 规模、 优先级进行全局编排,将合适规模的需求规划进入指定迭代。支持新建迭代和已有迭代 重入两种模式,自动控制迭代总规模上限(默认 1000),通过有向无环图(DAG)分析 保证依赖需求优先入迭代。

    840 GitHub stars~1.6k tokensUpdated today
    Product & Project ManagementAuto-check passed
  • Track Backlog

    cdiggins/plato

    View and manage the tracker backlog — show in-progress work, current priorities, sprint contents; triage untriaged items; promote ideas to ready; plan a sprint (big rocks + little rocks…

    106 GitHub stars~1k tokensUpdated 11 days ago
    Product & Project ManagementAuto-check passed
  • Bmad Agent Sm

    paulpreibisch/AgentVibes

    Scrum master for sprint planning and story preparation. An agent skill from paulpreibisch/AgentVibes.

    155 GitHub starsUsed in 1 repo~769 tokens
    Product & Project ManagementAuto-check passed

More from spokvulcan/poker-planning

  • Convex Migration Helper

    spokvulcan/poker-planning

    Plans Convex schema and data migrations with widen-migrate-narrow and @convex-dev/migrations.

    114 GitHub starsUsed in 8 repos~1.4k tokens
    Auto-check passed
  • Convex Setup Auth

    spokvulcan/poker-planning

    Sets up Convex auth, identity mapping, and access control. An agent skill from spokvulcan/poker-planning.

    114 GitHub starsUsed in 8 repos~1.8k tokens
    Auto-check passed
  • Convex Quickstart

    spokvulcan/poker-planning

    Creates or adds Convex to an app. An agent skill from spokvulcan/poker-planning.

    114 GitHub starsUsed in 6 repos~3.5k tokens
    Auto-check: notes
  • Convex Performance Audit

    spokvulcan/poker-planning

    Audits Convex performance for reads, subscriptions, write contention, and function limits.

    114 GitHub starsUsed in 7 repos~1.9k tokens
    Auto-check passed
  • Convex

    spokvulcan/poker-planning

    Routes general Convex requests to the right project skill. An agent skill from spokvulcan/poker-planning.

    114 GitHub starsUsed in 6 repos~399 tokens
    Auto-check passed

Questions about Convex Create Component

What does Convex Create Component do?

Builds reusable Convex components with isolated tables and app-facing APIs. Convex Create Component is an agent skill from spokvulcan/poker-planning. Builds reusable Convex components with isolated tables and app-facing APIs.

When should I use Convex Create Component?

Convex Create Component fits situations like: reusable backend modules; component boundary work.

How do I install Convex Create Component in Claude Code?

Run `npx skills add spokvulcan/poker-planning --skill convex-create-component -a claude-code`. Or copy the skill folder (.agents/skills/convex-create-component in spokvulcan/poker-planning) into .claude/skills/convex-create-component in your project. Claude Code loads it when a task matches its description.

How do I install Convex Create Component in Codex?

Run `npx skills add spokvulcan/poker-planning --skill convex-create-component -a codex`. Or copy the skill folder (.agents/skills/convex-create-component in spokvulcan/poker-planning) into .agents/skills/convex-create-component in your project. Codex loads it when a task matches its description.

Can I use Convex Create Component in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add spokvulcan/poker-planning --skill convex-create-component -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/convex-create-component, .gemini/skills/convex-create-component, .github/skills/convex-create-component and .opencode/skills/convex-create-component in your project.

What does Convex Create Component need to run?

Going by SKILL.md and its folder, Convex Create Component needs the command-line tools its instructions call (npx) and credentials named OPENAI_API_KEY. Our summary lists: Node.js; A credential in OPENAI_API_KEY.

Does Convex Create Component access the network?

SKILL.md names 1 domain. As links in the text: docs.convex.dev. This is read from the text; nothing was executed.

Is Convex Create Component safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Convex Create Component use?

Convex Create Component is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Convex Create Component use?

About 2.6k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.9k tokens, read only when the agent opens those files.

What are the alternatives to Convex Create Component?

Skills that share tags, products or a category with Convex Create Component: Agile Product Owner (alirezarezvani/claude-skills, 28k stars), Walking Skeleton Roadmap Scoping (prime-radiant-inc/iterative-development, 181 stars), Triage (joa23/linear-cli, 144 stars) and Tapd Iteration Plan (TencentBlueKing/bk-bcs, 840 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Convex Create Component?

spokvulcan (a GitHub user) maintains it in spokvulcan/poker-planning, which has 114 GitHub stars. The repository holds 6 skills in this directory. The repository was last updated on October 4, 2026.

Source: spokvulcan/poker-planning on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.