Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/nikolaj-lat/World-Puppeteer --skill traits명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SKILL.md 표시 중
SOC 직업 분류 기준
| name | traits |
| description | Schema and rules for creating traits |
| context | fork |
| agent | traits |
Edit tabs/traits.json.
Traits must be organized into categories in tabs/traits.json under traitCategories.
| Field | Description |
|---|---|
name | Display name for the category |
maxSelections | How many traits player can pick. 0 means none can be picked — don't use it |
traits | Array of trait keys in this category |
Category patterns:
maxSelections: 1maxSelections: 1maxSelections: 3Category selection at character creation ignores requirements, unlockedBy, and excludedBy — those only affect level-up trait picks (see below).
| Field | Requirement |
|---|---|
name | Must match object key exactly |
description | What the trait is — shown to players at character creation (full paragraph) |
traitNarrativeEffects | The narrator's reference for portraying the trait. Usually the same as description; elaborate further or add hidden aspects the player shouldn't see |
attributes | Array of attribute modifiers (can be empty []) |
skills | Array of skill modifiers (can be empty []) |
resources | Array of resource modifiers (can be empty []) |
startingItems | Array of items granted (can be empty []) |
abilities | Array of ability names granted (can be empty []) |
requirements | Array of requirement objects (can be empty []). Only gates level-up trait picks — ignored at character creation |
unlockedBy | Trait prerequisites (OR logic). Only affects level-up trait picks — ignored at character creation |
excludedBy | Trait conflicts. Only affects level-up trait picks — ignored at character creation |
For non-species traits:
description and traitNarrativeEffects carry the same content — write both as full paragraphs.description is shown to players at character creation. traitNarrativeEffects is the narrator's reference during play.traitNarrativeEffects is the elaborated, fuller version.Older configs used a field named quirk for this; it is auto-migrated to traitNarrativeEffects verbatim. Always write traitNarrativeEffects in new configs.
For species traits, see the Species Traits section below.
| Field | When to Include |
|---|---|
attributes (non-empty) | Class/background traits that affect core stats |
skills (non-empty) | Traits that grant expertise or training |
resources (non-empty) | Traits that affect resource pools |
startingItems (non-empty) | Class/background traits with signature equipment |
abilities (non-empty) | Traits that unlock special perks or powers |
requirements (non-empty) | Traits in the level-up pool that should be gated behind stats, skills, other traits, or character level |
vulnerabilities / resistances / immunities | Traits that should change how much typed damage the player takes in combat (e.g. a fire-elemental species immune to fire). Values must match combatSettings.damageTypes |
Traits can be offered as level-up rewards via progressionSettings.levelUpTraitPool in tabs/settings.json (default cadence: 1 pick every 10 levels). When a pick is pending, the player chooses from pool traits they don't already have whose unlockedBy/excludedBy conditions pass and whose requirements are met; the chosen trait applies immediately, exactly like a starting trait. An empty pool means no picks are ever granted.
Gotcha: requirements, unlockedBy, and excludedBy do nothing at character creation — they only filter the level-up pick list. To keep a trait out of starting selection, leave it out of every trait category.
All modifiers use the same structure:
{ attribute: string, modifier: number } // For attributes
{ skill: string, modifier: number } // For skills
{ resource: string, modifier: number } // For resources
The modifier is an additive value (positive or negative). Multiple traits stack.
Traits should be balanced around a point budget. Use these guidelines:
| Modifier Type | Point Cost |
|---|---|
| Attribute | 1 point |
| Skill at modifier 0 | 1 point |
| Resource per 10 | 1 point |
| Starting item | 1 point |
| Ability | 1 points |
Every trait within a single traitCategory should be roughly equal.
Target values:
isHealth resource should be set at roughly 100.{ item: string, quantity: number }
The item must reference a valid item key from tabs/items.json.
Array of prerequisite checks. All must be met for the trait to appear as a level-up pick. Same format as ability requirements.
{ type: 'skill', variable: 'skill name', amount: 3 } // Skill level >= 3
{ type: 'attribute', variable: 'strength', amount: 14 } // Attribute value >= 14
{ type: 'characterLevel', amount: 5 } // Character level >= 5 (no variable)
{ type: 'resource', variable: 'mana', amount: 50 } // Resource max >= 50
{ type: 'trait', variable: 'fire affinity', amount: 1 } // Has trait (amount ignored)
interface TraitCategory {
name: string
maxSelections: number
traits: string[]
}
interface Trait {
name: string
description: string
traitNarrativeEffects: string
attributes: Array<{attribute: string, modifier: number}>
skills: Array<{skill: string, modifier: number}>
resources: Array<{resource: string, modifier: number}>
startingItems: Array<{item: string, quantity: number}>
abilities: string[]
requirements: TraitRequirement[]
unlockedBy: string[]
excludedBy: string[]
vulnerabilities?: string[]
resistances?: string[]
immunities?: string[]
}
=
| { : | | | ; : ; : }
| { : ; : }
When creating a trait that represents a species (playable race):
description contains lore paragraphs + skill blocks separated by \n\ntraitNarrativeEffects contains lore paragraphs only (no skills)description, Trait description, and Trait traitNarrativeEffectsSee Species Consistency Rules for the full requirements.
For detailed documentation, see traits-reference.md.