Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/tomevault-io/skills-registry --skill ventyd명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SKILL.md 표시 중
SOC 직업 분류 기준
| name | ventyd |
| description | > Use when this capability is needed. |
Build event-sourced applications with Ventyd. This skill teaches you how to find current documentation and write correct ventyd code.
Everything you know about ventyd is likely outdated or wrong. Never rely on memory. Your training data may contain obsolete APIs. Always verify against the documentation referenced in this skill.
Before writing code, verify package installation:
ls node_modules/ventyd/
references/quick-start.md, or use remote docs| Question | Resource | Purpose |
|---|---|---|
| Project setup / installation | references/quick-start.md | Installation and first entity guide |
| API usage / type signatures | references/embedded-docs.md | Look up via installed package type declarations |
| Usage without packages | references/remote-docs.md | Fetch from https://ventyd.com/docs/ |
| Error resolution | references/common-errors.md | Troubleshooting solutions |
Embedded docs (if packages installed)
node_modules/ventyd/dist/types/*.d.mtsSource code (if packages installed)
node_modules/ventyd/dist/index.mjsRemote docs (if packages not installed)
https://ventyd.com/docs/Ventyd follows a four-building-block pattern:
Schema → Reducer → Entity → Repository
(events (state (business (persistence
+ state) from logic) + plugins)
events)
Data flow:
1. Entity.create() or mutation()
2. → dispatch(eventName, body)
3. → event validated against schema
4. → reducer computes new state
5. → repository.commit() persists events via adapter
6. → plugins run side effects (parallel, non-blocking)
import * as v from "valibot";
import { defineSchema, defineReducer, Entity, mutation, createRepository } from "ventyd";
import { valibot } from "ventyd/valibot";
import type { Adapter } from "ventyd";
// 1. Define schema
const userSchema = defineSchema("user", {
schema: valibot({
event: {
created: v.object({
nickname: v.string(),
email: v.pipe(v.string(), v.email()),
}),
profile_updated: v.object({
nickname: v.optional(v.string()),
bio: v.optional(v.string()),
}),
deleted: v.object({
reason: v.optional(v.string()),
}),
restored: v.object({}),
},
state: v.object({
nickname: v.string(),
: v.(v.(), v.()),
: v.(v.()),
: v.(v.(v.())),
}),
}),
: ,
});
userReducer = (userSchema, {
(event.) {
:
{
: event..,
: event..,
: ,
: ,
};
:
{
...prevState,
...(event.. && { : event.. }),
...(event.. !== && { : event.. }),
};
:
{ ...prevState, : event. };
:
{ ...prevState, : };
:
prevState;
}
});
(userSchema, userReducer) {
() { ..; }
() { ..; }
() { .. !== ; }
updateProfile = (
,
{
(.) {
();
}
(, updates);
},
);
= (, {
(.) ();
(, { reason });
});
restore = (, {
(!.) ();
(, {});
});
}
userRepository = (, {
: myAdapter,
: [],
});
user = .({
: { : , : },
});
user.({ : });
userRepository.(user);
loaded = userRepository.({ : user. });
.(loaded?..);
created, profile_updated, deletedcreated → user:createdinitialEventName must be fully qualified: "user:created" (not "created")default case returning prevStateprevState — return a new objectevent.body for event data, event.eventCreatedAt for timestampsdispatch()mutation(this, fn) helper — not raw $$dispatch()Entity.load() returns readonly entities — mutations are stripped at the type levelcreateRepository(Entity, { adapter, plugins?, onPluginError?, migrate?, snapshot? })findOne({ entityId }) returns mutable entity or nullcommit(entity) persists pending events// Core
import { defineSchema, defineReducer, Entity, mutation, createRepository } from "ventyd";
import type { Adapter, Plugin, Repository, Schema, ReadonlyEntity } from "ventyd";
// Validation libraries (pick one)
import { valibot, v } from "ventyd/valibot";
import { zod, z } from "ventyd/zod";
import { arktype, type } from "ventyd/arktype";
import { typebox, Type } from "ventyd/typebox";
import { standard } from "ventyd/standard"; // generic Standard Schema
// Adapters
import { prismaAdapter } from "ventyd/adapter/prisma";
Type errors often signal outdated knowledge. Common indicators include "Property X does not exist," module not found, and constructor parameter errors.
Response approach:
references/common-errors.mdSource: daangn/ventyd — distributed by TomeVault.