convex-advisor

작성자: get-convex

Convex 배포의 72시간 인사이트(읽기 제한, OCC 경합)를 읽고, 각 이벤트를 코드에서 근본 원인을 분석하며, 증거 기반의 성능/비용 결과와 수정 사항을 보고합니다.

npx skills add https://github.com/get-convex/agent-skills --skill convex-advisor

Live-deployment advisor

Static review guesses; the deployment KNOWS. The official Convex MCP ships an insights tool with typed 72h health events per function — documentsReadLimit / bytesReadLimit (hard limit hits), documentsReadThreshold / bytesReadThreshold (approaching), occFailedPermanently / occRetried (write contention) — each carrying evidence (table_name, bytes_read, documents_read, occ document id + retry count). The advisor turns each event into a root-caused finding by reading the flagged function's actual code, and emits findings on the findings bus (specs/finding.schema.json) so fixers can be dispatched and launch-readiness can score.

Workflow

  1. GUARD: run deploy-guard step 0-1 — identify + announce the deployment being read. Reading insights/logs on prod is allowed read-only; never enable mutating prod access for an advisory pass.
  2. GATHER (deterministic, via the official Convex MCP): status → deployment selector; insights → the typed 72h events; tables → schema + row counts; functionSpec → the public/internal surface. The insights tool is only available on cloud dev/prod deployments when logged in as a user (not on previews or deploy-key-scoped contexts) and needs ~72h of traffic; if it returns nothing or is unavailable, say so and fall back to offering convex-reviewer — do NOT invent findings.
  3. ROOT-CAUSE each insight event by reading the flagged function's code:
    • bytesReadThreshold/Limit or documentsReadThreshold/Limit → look for .collect() / unindexed .filter() / missing pagination on the named table; the fix is an index + .withIndex, .take(n), or .paginate (convex-expert patterns), or an aggregate component for counting shapes.
    • occRetried / occFailedPermanently → look for read-modify-write hotspots on the named document (shared counters, status toggles); the fix is @convex-dev/sharded-counter, narrowing the read set, or moving contention to a workpool.
    • repeated failures in logs (status: failure) → classify: crash loop in a cron, validator rejections, unhandled error shapes.
  4. EMIT findings per specs/finding.schema.json: class perf/correctness/cost, severity from the insight kind (limit hits = high, thresholds = med, retried = med, permanent OCC failure = high), locus {kind: deployment, functionId, tableName}, evidence {kind: insight-event, detail: the raw event}, confidence: confirmed (the event happened — it is not a hypothesis), fixCapability + autofixable where the repair is mechanical.
  5. REPORT: findings ranked by severity, each with (a) the runtime evidence in one line ('messages:list read 4.2MB from messages 31× yesterday'), (b) the code-level root cause with file:line, (c) the concrete fix and which capability applies it. Offer to apply fixes; apply only on confirmation, then re-run insights after traffic to verify the trend, or re-run the static check immediately.
  6. Scope discipline: this is a health/perf/cost pass. Route authz findings to convex-authz, code-idiom findings to convex-reviewer, error triage to sentinel — emit a pointer finding rather than duplicating their work.

Rules

  • Evidence-not-vibes: every finding cites a real insight event, log line, or table stat — if the deployment has no evidence, the advisor has no findings (offer convex-reviewer instead).
  • Read-only by construction: an advisory pass never mutates any deployment and never enables prod mutation flags (deploy-guard discipline applies).
  • Root-cause in the code before reporting: an insight event names the symptom; the finding must name the line and the mechanism.
  • Emit on the findings bus (specs/finding.schema.json), confidence: confirmed — runtime events are facts, not hypotheses.
  • Severity from the event kind: limit-hit / permanent-OCC-failure = high; threshold / retried = med.
  • Stay in lane: perf/cost/health only — hand authz to convex-authz, style to convex-reviewer, error triage to sentinel.
  • Prefer component fixes over hand-rolls when they match (sharded-counter for OCC on counters, aggregate for count scans) — same bias as suggest.

get-convex의 다른 스킬

convex-performance-audit
get-convex
Convex 성능을 읽기, 구독, 쓰기 경합 및 함수 제한 측면에서 감사합니다. 느린 기능, 인사이트 발견, OCC 충돌 또는 읽기 증폭에 사용하세요.
developmentdatabasedata-analysis
convex
get-convex
일반적인 Convex 요청을 올바른 프로젝트 스킬로 라우팅합니다. 사용자가 어떤 Convex 스킬을 사용할지 묻거나 불완전하게 지정된 Convex 앱 작업을 제공할 때 사용하세요.
developmentdatabase
convex-setup-auth
get-convex
Convex 인증, 신원 매핑 및 접근 제어를 설정합니다. Convex 앱에서 로그인, 인증 제공자, 사용자 테이블, 보호된 함수 또는 역할에 사용하세요.
developmentdatabaseapi
convex-quickstart
get-convex
앱에 Convex를 생성하거나 추가합니다. 새 Convex 프로젝트, npm create convex@latest, 프론트엔드 설정, 환경 변수, 또는 첫 npx convex dev 실행에 사용합니다.
developmentdatabase
convex-migration-helper
get-convex
Convex 스키마 및 데이터 마이그레이션을 widen-migrate-narrow와 @convex-dev/migrations로 계획합니다. 스키마 변경, 백필, 테이블 재구성 또는 무중단 롤아웃에 사용하세요.
developmentdatabase
convex-create-component
get-convex
재사용 가능한 Convex 컴포넌트를 구축하며, 격리된 테이블과 앱 지향 API를 제공합니다. 새 컴포넌트, 재사용 가능한 백엔드 모듈, 통합 또는 컴포넌트 경계 작업에 사용하세요.
developmentdatabase
convex-migrate
get-convex
배포된 Convex 앱에서 @convex-dev/migrations를 사용하여 스키마를 마이그레이션하고 데이터를 백필합니다.
developmentdatabase
convex-optimize
get-convex
기존 Convex 앱을 감사하고 최적화합니다: 보안, 확장, 업그레이드, 관찰 가능성.