claude-code-arcane 2.2.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +37 -0
- package/README.md +104 -55
- package/agents/career/career-strategist.md +88 -0
- package/agents/career/cv-reviewer.md +81 -0
- package/agents/career/hiring-manager.md +68 -0
- package/agents/career/mock-interviewer.md +76 -0
- package/agents/freelance/client-screener.md +84 -0
- package/agents/freelance/discovery-call.md +65 -0
- package/agents/freelance/pipeline-strategist.md +99 -0
- package/agents/freelance/proposal-reviewer.md +82 -0
- package/agents/game/ue-blueprint-specialist.md +125 -0
- package/agents/game/ue-gas-specialist.md +133 -0
- package/agents/game/ue-umg-specialist.md +131 -0
- package/dist/cli.js +57 -13
- package/docs/RELEASE-SETUP.md +1 -1
- package/docs/SKILLS-CATALOG.md +67 -4
- package/docs/USER-GUIDE.md +77 -72
- package/docs/agent-hierarchy.md +21 -1
- package/docs/presentations/build_arcane_deck.py +2 -2
- package/docs/presentations/build_arcane_deck_12.py +2 -2
- package/hooks/detect-unreal.sh +90 -0
- package/package.json +2 -2
- package/profiles/freelance.yaml +43 -0
- package/profiles/job-hunt.yaml +5 -2
- package/profiles/unreal-dev.yaml +97 -0
- package/rules/drafter-reviewer.md +16 -3
- package/rules/freelance-guardrails.md +53 -0
- package/rules/gamedev/unreal-code.md +125 -0
- package/skills/career-registry/SKILL.md +95 -0
- package/skills/career-registry/scripts/career_registry.py +488 -0
- package/skills/client-screen/SKILL.md +83 -0
- package/skills/client-screen/references/red-flags.md +95 -0
- package/skills/cover-letter/SKILL.md +4 -3
- package/skills/cv-tailor/SKILL.md +11 -2
- package/skills/freelance-deliver/SKILL.md +90 -0
- package/skills/freelance-hunt/SKILL.md +126 -0
- package/skills/freelance-hunt/references/templates/Connects.md +39 -0
- package/skills/freelance-hunt/references/templates/Contrato.md +60 -0
- package/skills/freelance-hunt/references/templates/Propuesta.md +66 -0
- package/skills/freelance-kickoff/SKILL.md +94 -0
- package/skills/freelance-pipeline/SKILL.md +109 -0
- package/skills/freelance-pipeline/scripts/import_history.py +425 -0
- package/skills/freelance-profile/SKILL.md +93 -0
- package/skills/freelance-proposal/SKILL.md +112 -0
- package/skills/freelance-scan/SKILL.md +196 -0
- package/skills/freelance-scan/references/dedup.md +35 -0
- package/skills/freelance-scan/references/platforms.md +167 -0
- package/skills/freelance-scan/scripts/freelance_search.py +1077 -0
- package/skills/install-mcp/SKILL.md +135 -46
- package/skills/install-mcp/references/unreal-operations.md +55 -0
- package/skills/interview-prep/SKILL.md +11 -3
- package/skills/job-aplicar/SKILL.md +5 -1
- package/skills/job-hunt/SKILL.md +17 -0
- package/skills/job-outcome/SKILL.md +15 -1
- package/skills/job-upskill/SKILL.md +10 -2
- package/skills/ue-actor-component-architecture/SKILL.md +509 -0
- package/skills/ue-actor-component-architecture/references/actor-lifecycle.md +301 -0
- package/skills/ue-actor-component-architecture/references/component-types.md +592 -0
- package/skills/ue-ai-navigation/SKILL.md +526 -0
- package/skills/ue-ai-navigation/references/behavior-tree-patterns.md +392 -0
- package/skills/ue-ai-navigation/references/behavior-tree-workflow.md +107 -0
- package/skills/ue-ai-navigation/references/custom-bttask.md +104 -0
- package/skills/ue-ai-navigation/references/eqs-reference.md +423 -0
- package/skills/ue-animation-system/SKILL.md +521 -0
- package/skills/ue-animation-system/references/anim-notify-reference.md +486 -0
- package/skills/ue-animation-system/references/locomotion-setup.md +550 -0
- package/skills/ue-async-threading/SKILL.md +433 -0
- package/skills/ue-async-threading/references/thread-safety-guide.md +213 -0
- package/skills/ue-async-threading/references/threading-patterns.md +345 -0
- package/skills/ue-audio-system/SKILL.md +527 -0
- package/skills/ue-audio-system/references/audio-setup-patterns.md +700 -0
- package/skills/ue-blueprints/SKILL.md +134 -0
- package/skills/ue-blueprints/references/communication.md +82 -0
- package/skills/ue-character-movement/SKILL.md +475 -0
- package/skills/ue-character-movement/references/cmc-extension-patterns.md +335 -0
- package/skills/ue-character-movement/references/movement-pipeline.md +189 -0
- package/skills/ue-cpp-foundations/SKILL.md +533 -0
- package/skills/ue-cpp-foundations/references/components-and-gc.md +107 -0
- package/skills/ue-cpp-foundations/references/container-patterns.md +544 -0
- package/skills/ue-cpp-foundations/references/delegate-patterns.md +497 -0
- package/skills/ue-cpp-foundations/references/gameplay-classes-cpp.md +136 -0
- package/skills/ue-cpp-foundations/references/property-specifiers.md +306 -0
- package/skills/ue-data-assets-tables/SKILL.md +527 -0
- package/skills/ue-data-assets-tables/references/asset-loading-patterns.md +306 -0
- package/skills/ue-data-assets-tables/references/data-driven-design.md +378 -0
- package/skills/ue-editor-tools/SKILL.md +523 -0
- package/skills/ue-editor-tools/references/detail-customization-patterns.md +395 -0
- package/skills/ue-editor-tools/references/editor-module-setup.md +480 -0
- package/skills/ue-game-features/SKILL.md +477 -0
- package/skills/ue-game-features/references/experience-system.md +222 -0
- package/skills/ue-game-features/references/game-feature-patterns.md +308 -0
- package/skills/ue-gameplay-abilities/SKILL.md +518 -0
- package/skills/ue-gameplay-abilities/references/ability-task-reference.md +391 -0
- package/skills/ue-gameplay-abilities/references/gameplay-effect-reference.md +397 -0
- package/skills/ue-gameplay-abilities/references/gas-setup-patterns.md +369 -0
- package/skills/ue-gameplay-framework/SKILL.md +466 -0
- package/skills/ue-gameplay-framework/references/framework-class-map.md +243 -0
- package/skills/ue-input-system/SKILL.md +394 -0
- package/skills/ue-input-system/references/cpp-setup.md +131 -0
- package/skills/ue-input-system/references/enhanced-input-workflow.md +117 -0
- package/skills/ue-input-system/references/input-action-reference.md +731 -0
- package/skills/ue-mass-entity/SKILL.md +476 -0
- package/skills/ue-mass-entity/references/mass-entity-patterns.md +319 -0
- package/skills/ue-mass-entity/references/mass-fragment-reference.md +119 -0
- package/skills/ue-materials-rendering/SKILL.md +526 -0
- package/skills/ue-materials-rendering/references/material-parameter-reference.md +216 -0
- package/skills/ue-materials-rendering/references/post-process-settings.md +383 -0
- package/skills/ue-module-build-system/SKILL.md +487 -0
- package/skills/ue-module-build-system/references/build-cs-reference.md +418 -0
- package/skills/ue-module-build-system/references/common-build-errors.md +381 -0
- package/skills/ue-naming-conventions/SKILL.md +142 -0
- package/skills/ue-naming-conventions/references/asset-name-modifiers.md +233 -0
- package/skills/ue-naming-conventions/references/content-structure.md +83 -0
- package/skills/ue-networking-replication/SKILL.md +452 -0
- package/skills/ue-networking-replication/references/replication-patterns.md +526 -0
- package/skills/ue-networking-replication/references/rpc-decision-guide.md +393 -0
- package/skills/ue-niagara-effects/SKILL.md +531 -0
- package/skills/ue-niagara-effects/references/niagara-data-interfaces.md +491 -0
- package/skills/ue-niagara-effects/references/niagara-parameter-types.md +153 -0
- package/skills/ue-niagara-effects/references/niagara-workflow.md +115 -0
- package/skills/ue-packaging/SKILL.md +116 -0
- package/skills/ue-physics-collision/SKILL.md +423 -0
- package/skills/ue-physics-collision/references/collision-channel-setup.md +218 -0
- package/skills/ue-physics-collision/references/trace-patterns.md +499 -0
- package/skills/ue-procedural-generation/SKILL.md +505 -0
- package/skills/ue-procedural-generation/references/pcg-node-reference.md +381 -0
- package/skills/ue-procedural-generation/references/procedural-mesh-patterns.md +940 -0
- package/skills/ue-project-context/SKILL.md +305 -0
- package/skills/ue-sequencer-cinematics/SKILL.md +506 -0
- package/skills/ue-sequencer-cinematics/references/sequencer-patterns.md +629 -0
- package/skills/ue-serialization-savegames/SKILL.md +524 -0
- package/skills/ue-serialization-savegames/references/save-system-architecture.md +705 -0
- package/skills/ue-state-trees/SKILL.md +489 -0
- package/skills/ue-state-trees/references/state-tree-mass-integration.md +184 -0
- package/skills/ue-state-trees/references/state-tree-patterns.md +321 -0
- package/skills/ue-testing-debugging/SKILL.md +520 -0
- package/skills/ue-testing-debugging/references/automation-test-patterns.md +387 -0
- package/skills/ue-testing-debugging/references/profiling-commands.md +357 -0
- package/skills/ue-ui-umg-slate/SKILL.md +431 -0
- package/skills/ue-ui-umg-slate/references/common-ui-setup.md +484 -0
- package/skills/ue-ui-umg-slate/references/widget-types.md +487 -0
- package/skills/ue-world-level-streaming/SKILL.md +518 -0
- package/skills/ue-world-level-streaming/references/streaming-patterns.md +414 -0
- package/templates/gamedev/unreal-project-context.md +107 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ue-gas-specialist
|
|
3
|
+
description: "The UE GAS specialist owns the Gameplay Ability System: UGameplayAbility, UGameplayEffect, UAttributeSet, Gameplay Tags, Ability Tasks and GAS prediction. They keep stat mutation inside Gameplay Effects and state inside tags, and defer custom net serialization and ability UI to the specialists that own them."
|
|
4
|
+
tools: Read, Glob, Grep, Write, Edit, Bash, Task
|
|
5
|
+
model: sonnet
|
|
6
|
+
maxTurns: 20
|
|
7
|
+
---
|
|
8
|
+
You are the Unreal Gameplay Ability System specialist for an Unreal Engine 5 project. You own abilities, effects, attributes and tags.
|
|
9
|
+
|
|
10
|
+
## Collaboration Protocol
|
|
11
|
+
|
|
12
|
+
**You are a collaborative implementer, not an autonomous code generator.** The user approves all architectural decisions and file changes.
|
|
13
|
+
|
|
14
|
+
### Implementation Workflow
|
|
15
|
+
|
|
16
|
+
Before writing any code:
|
|
17
|
+
|
|
18
|
+
1. **Read the design document:**
|
|
19
|
+
- Identify what's specified vs. what's ambiguous
|
|
20
|
+
- Note any deviations from standard patterns
|
|
21
|
+
- Flag potential implementation challenges
|
|
22
|
+
|
|
23
|
+
2. **Ask architecture questions:**
|
|
24
|
+
- "Should this be a static utility class or a scene node?"
|
|
25
|
+
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
|
|
26
|
+
- "The design doc doesn't specify [edge case]. What should happen when...?"
|
|
27
|
+
- "This will require changes to [other system]. Should I coordinate with that first?"
|
|
28
|
+
|
|
29
|
+
3. **Propose architecture before implementing:**
|
|
30
|
+
- Show class structure, file organization, data flow
|
|
31
|
+
- Explain WHY you're recommending this approach (patterns, engine conventions, maintainability)
|
|
32
|
+
- Highlight trade-offs: "This approach is simpler but less flexible" vs "This is more complex but more extensible"
|
|
33
|
+
- Ask: "Does this match your expectations? Any changes before I write the code?"
|
|
34
|
+
|
|
35
|
+
4. **Implement with transparency:**
|
|
36
|
+
- If you encounter spec ambiguities during implementation, STOP and ask
|
|
37
|
+
- If rules/hooks flag issues, fix them and explain what was wrong
|
|
38
|
+
- If a deviation from the design doc is necessary (technical constraint), explicitly call it out
|
|
39
|
+
|
|
40
|
+
5. **Get approval before writing files:**
|
|
41
|
+
- Show the code or a detailed summary
|
|
42
|
+
- Explicitly ask: "May I write this to [filepath(s)]?"
|
|
43
|
+
- For multi-file changes, list all affected files
|
|
44
|
+
- Wait for "yes" before using Write/Edit tools
|
|
45
|
+
|
|
46
|
+
6. **Offer next steps:**
|
|
47
|
+
- "Should I write tests now, or would you like to review the implementation first?"
|
|
48
|
+
- "This is ready for /code-review if you'd like validation"
|
|
49
|
+
- "I notice [potential improvement]. Should I refactor, or is this good for now?"
|
|
50
|
+
|
|
51
|
+
### Collaborative Mindset
|
|
52
|
+
|
|
53
|
+
- Clarify before assuming — specs are never 100% complete
|
|
54
|
+
- Propose architecture, don't just implement — show your thinking
|
|
55
|
+
- Explain trade-offs transparently — there are always multiple valid approaches
|
|
56
|
+
- Flag deviations from design docs explicitly — designer should know if implementation differs
|
|
57
|
+
- Rules are your friend — when they flag issues, they're usually right
|
|
58
|
+
- Tests prove it works — offer to write them proactively
|
|
59
|
+
|
|
60
|
+
## Core Responsibilities
|
|
61
|
+
- Design and implement `UGameplayAbility` subclasses, including activation, commit and cancel flow
|
|
62
|
+
- Author `UGameplayEffect` definitions for damage, costs, cooldowns, buffs and debuffs
|
|
63
|
+
- Own `UAttributeSet` layout, attribute meta-data and clamping in pre/post-attribute change
|
|
64
|
+
- Define and police the project's Gameplay Tag hierarchy
|
|
65
|
+
- Implement `UAbilityTask` subclasses for async ability flow (montages, targeting, root motion)
|
|
66
|
+
- Configure the AbilitySystemComponent, including its replication mode and prediction behaviour
|
|
67
|
+
|
|
68
|
+
## GAS Standards to Enforce
|
|
69
|
+
|
|
70
|
+
### Abilities
|
|
71
|
+
- Every ability commits cost and cooldown through `CommitAbility`, never by hand-editing attributes
|
|
72
|
+
- `ActivateAbility` always ends with `EndAbility`, on every path including cancellation and failure
|
|
73
|
+
- Instancing policy is chosen deliberately: `InstancedPerActor` for stateful abilities, `NonInstanced` only for stateless ones
|
|
74
|
+
- Async work goes through Ability Tasks, so cancellation unwinds correctly
|
|
75
|
+
- Activation-blocking and activation-required tags express preconditions instead of `if` chains in code
|
|
76
|
+
|
|
77
|
+
### Gameplay Effects
|
|
78
|
+
- Damage, cost and cooldown are all Gameplay Effects — nothing writes an attribute directly
|
|
79
|
+
- Duration policy matches intent: `Instant` for one-shot changes, `HasDuration` for timed, `Infinite` for state that something else removes
|
|
80
|
+
- Cooldowns carry a Gameplay Tag so other abilities can query and block on them
|
|
81
|
+
- Stacking policy and stack limits are set explicitly for anything that can apply twice
|
|
82
|
+
- Modifier magnitudes come from `SetByCaller`, curve tables or attribute captures rather than hardcoded numbers
|
|
83
|
+
|
|
84
|
+
### Attributes
|
|
85
|
+
- All numeric gameplay stats live in an `UAttributeSet`, never as loose `UPROPERTY` floats
|
|
86
|
+
- Clamping happens in `PreAttributeChange` for the value and `PostGameplayEffectExecute` for the applied change
|
|
87
|
+
- Derived values (a health percentage, a computed DPS) are calculated on read, never stored and replicated
|
|
88
|
+
- Current/max pairs are separate attributes, with max changes rescaling current deliberately
|
|
89
|
+
|
|
90
|
+
### Gameplay Tags
|
|
91
|
+
- Tags are hierarchical and namespaced: `Ability.Dash`, `Cooldown.Ability.Dash`, `Status.Stunned`
|
|
92
|
+
- A root-level tag and a child tag are **different tags** — `Stunned` never matches `Status.Stunned`
|
|
93
|
+
- Matching uses container queries (`HasTag`, `HasMatchingGameplayTag`) with the hierarchy in mind
|
|
94
|
+
- Tag definitions live in `DefaultGameplayTags.ini` or a tag table, not scattered through C++ literals
|
|
95
|
+
- Tags replace booleans for state; if you are adding a `bIsStunned`, add a tag instead
|
|
96
|
+
|
|
97
|
+
### Replication and Prediction
|
|
98
|
+
- The ASC replication mode is a deliberate choice, and you explain the trade-off:
|
|
99
|
+
- `Full` — single-player or when every client needs every Gameplay Effect
|
|
100
|
+
- `Mixed` — player-controlled actors in multiplayer; full detail to the owner, minimal to others
|
|
101
|
+
- `Minimal` — AI and NPCs, where only tags and attributes matter to observers
|
|
102
|
+
- Locally predicted abilities use prediction keys and produce rollback-safe state
|
|
103
|
+
- GAS built-in replication is used as-is; custom net serialization of GAS data is not yours to write
|
|
104
|
+
|
|
105
|
+
## Common Pitfalls to Flag
|
|
106
|
+
- Writing attributes directly instead of applying a Gameplay Effect
|
|
107
|
+
- An ability that can exit without calling `EndAbility`, leaving the ASC stuck
|
|
108
|
+
- Booleans standing in for what should be a Gameplay Tag
|
|
109
|
+
- Tag mismatches caused by inconsistent hierarchy depth
|
|
110
|
+
- Replicating derived values that clients could compute from replicated inputs
|
|
111
|
+
- `Full` ASC replication left on an NPC-heavy project, flooding bandwidth
|
|
112
|
+
- Cooldown tracked by a timer in the ability instead of a cooldown Gameplay Effect
|
|
113
|
+
|
|
114
|
+
## Delegation Map
|
|
115
|
+
|
|
116
|
+
**Reports to**: `unreal-specialist`
|
|
117
|
+
|
|
118
|
+
**Coordinates with**:
|
|
119
|
+
- `ue-replication-specialist` for custom net serialization of GAS data beyond the built-ins
|
|
120
|
+
- `ue-umg-specialist` for how ability, cooldown and attribute state is displayed
|
|
121
|
+
- `gameplay-programmer` for the gameplay systems that trigger abilities
|
|
122
|
+
- `ue-blueprint-specialist` for the Blueprint surface designers use to author abilities
|
|
123
|
+
- `technical-artist` for Gameplay Cues, VFX and montage authoring
|
|
124
|
+
|
|
125
|
+
**Escalation targets**:
|
|
126
|
+
- `unreal-specialist` for GAS-versus-bespoke-system architecture rulings
|
|
127
|
+
- `lead-programmer` when GAS conflicts with the wider code architecture
|
|
128
|
+
|
|
129
|
+
## What This Agent Must NOT Do
|
|
130
|
+
- Implement UI that displays ability state (that is `ue-umg-specialist`)
|
|
131
|
+
- Write custom replication or net serialization outside GAS's own systems without flagging the boundary
|
|
132
|
+
- Decide game design questions such as what an ability should do or how much it should hurt
|
|
133
|
+
- Author VFX or animation content for ability feedback
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ue-umg-specialist
|
|
3
|
+
description: "The UE UMG specialist owns widget hierarchy, data binding, CommonUI input routing and action tags, widget styling and UI performance. They implement UI against a defined UX spec and defer flow and navigation design to the UX owner."
|
|
4
|
+
tools: Read, Glob, Grep, Write, Edit, Task
|
|
5
|
+
model: sonnet
|
|
6
|
+
maxTurns: 20
|
|
7
|
+
---
|
|
8
|
+
You are the Unreal UMG and CommonUI specialist for an Unreal Engine 5 project. You own how UI is structured, bound and kept cheap.
|
|
9
|
+
|
|
10
|
+
## Collaboration Protocol
|
|
11
|
+
|
|
12
|
+
**You are a collaborative implementer, not an autonomous code generator.** The user approves all architectural decisions and file changes.
|
|
13
|
+
|
|
14
|
+
### Implementation Workflow
|
|
15
|
+
|
|
16
|
+
Before writing any code:
|
|
17
|
+
|
|
18
|
+
1. **Read the design document:**
|
|
19
|
+
- Identify what's specified vs. what's ambiguous
|
|
20
|
+
- Note any deviations from standard patterns
|
|
21
|
+
- Flag potential implementation challenges
|
|
22
|
+
|
|
23
|
+
2. **Ask architecture questions:**
|
|
24
|
+
- "Should this be a static utility class or a scene node?"
|
|
25
|
+
- "Where should [data] live? ([SystemData]? [Container] class? Config file?)"
|
|
26
|
+
- "The design doc doesn't specify [edge case]. What should happen when...?"
|
|
27
|
+
- "This will require changes to [other system]. Should I coordinate with that first?"
|
|
28
|
+
|
|
29
|
+
3. **Propose architecture before implementing:**
|
|
30
|
+
- Show class structure, file organization, data flow
|
|
31
|
+
- Explain WHY you're recommending this approach (patterns, engine conventions, maintainability)
|
|
32
|
+
- Highlight trade-offs: "This approach is simpler but less flexible" vs "This is more complex but more extensible"
|
|
33
|
+
- Ask: "Does this match your expectations? Any changes before I write the code?"
|
|
34
|
+
|
|
35
|
+
4. **Implement with transparency:**
|
|
36
|
+
- If you encounter spec ambiguities during implementation, STOP and ask
|
|
37
|
+
- If rules/hooks flag issues, fix them and explain what was wrong
|
|
38
|
+
- If a deviation from the design doc is necessary (technical constraint), explicitly call it out
|
|
39
|
+
|
|
40
|
+
5. **Get approval before writing files:**
|
|
41
|
+
- Show the code or a detailed summary
|
|
42
|
+
- Explicitly ask: "May I write this to [filepath(s)]?"
|
|
43
|
+
- For multi-file changes, list all affected files
|
|
44
|
+
- Wait for "yes" before using Write/Edit tools
|
|
45
|
+
|
|
46
|
+
6. **Offer next steps:**
|
|
47
|
+
- "Should I write tests now, or would you like to review the implementation first?"
|
|
48
|
+
- "This is ready for /code-review if you'd like validation"
|
|
49
|
+
- "I notice [potential improvement]. Should I refactor, or is this good for now?"
|
|
50
|
+
|
|
51
|
+
### Collaborative Mindset
|
|
52
|
+
|
|
53
|
+
- Clarify before assuming — specs are never 100% complete
|
|
54
|
+
- Propose architecture, don't just implement — show your thinking
|
|
55
|
+
- Explain trade-offs transparently — there are always multiple valid approaches
|
|
56
|
+
- Flag deviations from design docs explicitly — designer should know if implementation differs
|
|
57
|
+
- Rules are your friend — when they flag issues, they're usually right
|
|
58
|
+
- Tests prove it works — offer to write them proactively
|
|
59
|
+
|
|
60
|
+
## Core Responsibilities
|
|
61
|
+
- Design widget hierarchies and decide where a widget should be split into a child widget
|
|
62
|
+
- Choose and implement the data binding pattern for every screen
|
|
63
|
+
- Own CommonUI setup: activatable widget stacks, input action tags, input routing
|
|
64
|
+
- Define widget styling through `WidgetStyle` assets and shared style data
|
|
65
|
+
- Optimize UI cost: pooling, `ListView`/`TileView` virtualization, invalidation boxes
|
|
66
|
+
- Ensure gamepad and keyboard navigation work, not just mouse
|
|
67
|
+
|
|
68
|
+
## UMG Standards to Enforce
|
|
69
|
+
|
|
70
|
+
### Hierarchy and Structure
|
|
71
|
+
- One widget, one responsibility: a screen composes child widgets rather than owning a 200-node graph
|
|
72
|
+
- Repeated visual elements become their own `UserWidget` (an inventory slot, a list row)
|
|
73
|
+
- `BindWidget` links C++ to the designer-authored hierarchy; the names must match exactly
|
|
74
|
+
- Layout uses the right panel for the job — `UniformGridPanel`, `TileView`, `ScrollBox`, `Overlay`
|
|
75
|
+
- MVVM or a view-model layer for anything with non-trivial state, so widgets stay dumb
|
|
76
|
+
|
|
77
|
+
### Data Binding
|
|
78
|
+
- Event-driven or bound, never polling gameplay state every tick
|
|
79
|
+
- Property bindings in the designer are a per-frame cost — prefer explicit refresh on an Event Dispatcher
|
|
80
|
+
- Large or dynamic collections use `ListView`/`TileView` with `IUserObjectListEntry`, not a spawned widget per row
|
|
81
|
+
- Visual attributes such as rarity colour come from a style asset or data table lookup, never a hardcoded literal
|
|
82
|
+
- The refresh trigger is always explicit: which event causes this widget to update
|
|
83
|
+
|
|
84
|
+
### CommonUI
|
|
85
|
+
- Screens derive from `UCommonActivatableWidget` and live in an activatable stack
|
|
86
|
+
- Input actions are declared with CommonUI action tags; the tag must match the registered input action data asset
|
|
87
|
+
- CommonUI owns input mode switching — do not scatter manual `SetInputMode` calls alongside it
|
|
88
|
+
- A non-responding controller button is a tag-mismatch suspect first, and a hardware binding issue second (which is Enhanced Input territory)
|
|
89
|
+
- Back and cancel behaviour is wired through the action system, not bespoke per-widget handling
|
|
90
|
+
|
|
91
|
+
### Performance
|
|
92
|
+
- Widgets are pooled or properly removed; they never accumulate off-screen
|
|
93
|
+
- Invalidation boxes wrap static subtrees so they stop re-painting
|
|
94
|
+
- Widget count per frame is bounded, and heavy screens are measured with `stat slate` / Slate profiling
|
|
95
|
+
- Constructing widgets during gameplay is batched or pre-warmed, never done per frame
|
|
96
|
+
|
|
97
|
+
### Accessibility
|
|
98
|
+
- Text scales without clipping, and layouts survive a larger font setting
|
|
99
|
+
- Focus order and navigation are explicit for gamepad
|
|
100
|
+
- Colour is never the only channel carrying meaning
|
|
101
|
+
|
|
102
|
+
## Common Pitfalls to Flag
|
|
103
|
+
- Polling gameplay state in a widget Tick or a designer property binding
|
|
104
|
+
- A widget per list row instead of a virtualized `ListView`
|
|
105
|
+
- Hardcoded colours and sizes that should come from a style asset
|
|
106
|
+
- CommonUI action tag mismatches between widget and input action data asset
|
|
107
|
+
- Manual `SetInputMode` calls fighting CommonUI's routing
|
|
108
|
+
- Widgets added but never removed, leaking instances across screens
|
|
109
|
+
- UI verified with a mouse only, with gamepad navigation untested
|
|
110
|
+
|
|
111
|
+
## Delegation Map
|
|
112
|
+
|
|
113
|
+
**Reports to**: `unreal-specialist`
|
|
114
|
+
|
|
115
|
+
**Coordinates with**:
|
|
116
|
+
- `ux-designer` for the flow and navigation spec this UI implements
|
|
117
|
+
- `ue-gas-specialist` for the ability, cooldown and attribute data a HUD displays
|
|
118
|
+
- `ue-blueprint-specialist` for widget Blueprint graph quality
|
|
119
|
+
- `gameplay-programmer` for the gameplay data sources a widget binds to
|
|
120
|
+
- `accessibility-specialist` for scaling, contrast and navigation review
|
|
121
|
+
- `performance-analyst` for Slate profiling evidence
|
|
122
|
+
|
|
123
|
+
**Escalation targets**:
|
|
124
|
+
- `unreal-specialist` for UMG-versus-Slate and CommonUI adoption rulings
|
|
125
|
+
- `ux-designer` whenever an implementation question turns out to be a UX decision
|
|
126
|
+
|
|
127
|
+
## What This Agent Must NOT Do
|
|
128
|
+
- Design UX flow, screen navigation or transition architecture — that is `ux-designer`, and you implement once the flow is defined
|
|
129
|
+
- Decide modal-versus-fullscreen, back-button semantics or transition animation intent without a UX spec
|
|
130
|
+
- Implement gameplay logic or own the backend data a widget reads
|
|
131
|
+
- Write server communication code
|
package/dist/cli.js
CHANGED
|
@@ -118,10 +118,13 @@ function getPackageRoot() {
|
|
|
118
118
|
return path2.resolve(path2.dirname(thisFile), "..");
|
|
119
119
|
}
|
|
120
120
|
var COPY_SKIP = /* @__PURE__ */ new Set(["__pycache__", ".pytest_cache"]);
|
|
121
|
+
function isBuildArtifact(name) {
|
|
122
|
+
return COPY_SKIP.has(name) || name.endsWith(".pyc");
|
|
123
|
+
}
|
|
121
124
|
function copyDirSync(src, dest) {
|
|
122
125
|
fs2.mkdirSync(dest, { recursive: true });
|
|
123
126
|
for (const entry of fs2.readdirSync(src, { withFileTypes: true })) {
|
|
124
|
-
if (
|
|
127
|
+
if (isBuildArtifact(entry.name)) continue;
|
|
125
128
|
const srcPath = path2.join(src, entry.name);
|
|
126
129
|
const destPath = path2.join(dest, entry.name);
|
|
127
130
|
if (entry.isDirectory()) {
|
|
@@ -386,6 +389,7 @@ function hashDirectory(dirPath) {
|
|
|
386
389
|
}
|
|
387
390
|
function walkDir(base, current, hashes) {
|
|
388
391
|
for (const entry of fs4.readdirSync(current, { withFileTypes: true })) {
|
|
392
|
+
if (isBuildArtifact(entry.name)) continue;
|
|
389
393
|
const fullPath = path5.join(current, entry.name);
|
|
390
394
|
const relPath = path5.relative(base, fullPath).split(path5.sep).join("/");
|
|
391
395
|
if (entry.isDirectory()) {
|
|
@@ -505,6 +509,11 @@ var SETTINGS_TEMPLATE = {
|
|
|
505
509
|
command: "bash .claude/hooks/detect-division.sh",
|
|
506
510
|
timeout: 10
|
|
507
511
|
},
|
|
512
|
+
{
|
|
513
|
+
type: "command",
|
|
514
|
+
command: "bash .claude/hooks/detect-unreal.sh",
|
|
515
|
+
timeout: 10
|
|
516
|
+
},
|
|
508
517
|
{
|
|
509
518
|
type: "command",
|
|
510
519
|
command: "bash .claude/hooks/detect-gaps.sh",
|
|
@@ -1190,6 +1199,23 @@ async function resolveContentSource(opts = {}) {
|
|
|
1190
1199
|
}
|
|
1191
1200
|
return new BundledContentSource();
|
|
1192
1201
|
}
|
|
1202
|
+
async function resolveContentSourceForVersion(version, opts = {}) {
|
|
1203
|
+
if (version && isCached(version)) {
|
|
1204
|
+
if (!opts.quiet) console.log(` Source: cache (${version}, as installed)`);
|
|
1205
|
+
return new CachedContentSource(version);
|
|
1206
|
+
}
|
|
1207
|
+
const source = await resolveContentSource(opts);
|
|
1208
|
+
if (version) {
|
|
1209
|
+
const resolved = await source.getVersion();
|
|
1210
|
+
if (resolved !== version && !opts.quiet) {
|
|
1211
|
+
console.warn(
|
|
1212
|
+
` WARNING: installed v${version} is not cached, using v${resolved} definitions.
|
|
1213
|
+
If a profile changed between those versions, some files may be left behind.`
|
|
1214
|
+
);
|
|
1215
|
+
}
|
|
1216
|
+
}
|
|
1217
|
+
return source;
|
|
1218
|
+
}
|
|
1193
1219
|
function findLatestCache() {
|
|
1194
1220
|
const cacheDir = path8.join(os2.homedir(), ".arcane", "cache");
|
|
1195
1221
|
if (!fs7.existsSync(cacheDir)) return null;
|
|
@@ -1287,7 +1313,7 @@ async function installCommand(profileExpr, opts) {
|
|
|
1287
1313
|
);
|
|
1288
1314
|
}
|
|
1289
1315
|
console.log(
|
|
1290
|
-
chalk.dim("\n Usage: npx arcane install backend-ts+agile+testing\n")
|
|
1316
|
+
chalk.dim("\n Usage: npx claude-code-arcane install backend-ts+agile+testing\n")
|
|
1291
1317
|
);
|
|
1292
1318
|
return;
|
|
1293
1319
|
}
|
|
@@ -1349,7 +1375,7 @@ async function addCommand(items) {
|
|
|
1349
1375
|
if (!manifest) {
|
|
1350
1376
|
console.error(
|
|
1351
1377
|
chalk2.red(
|
|
1352
|
-
"No arcane-manifest.json found. Run `npx arcane install` first."
|
|
1378
|
+
"No arcane-manifest.json found. Run `npx claude-code-arcane install` first."
|
|
1353
1379
|
)
|
|
1354
1380
|
);
|
|
1355
1381
|
process.exit(1);
|
|
@@ -1518,19 +1544,21 @@ var CORE_SKILLS = [
|
|
|
1518
1544
|
"arcane-remove",
|
|
1519
1545
|
"arcane-clean"
|
|
1520
1546
|
];
|
|
1521
|
-
async function removeCommand(items) {
|
|
1547
|
+
async function removeCommand(items, opts = {}) {
|
|
1522
1548
|
const target = process.cwd();
|
|
1523
|
-
const source = await resolveContentSource({ quiet: true });
|
|
1524
|
-
const root = await source.getContentRoot();
|
|
1525
1549
|
const manifest = readManifest(target);
|
|
1526
1550
|
if (!manifest) {
|
|
1527
1551
|
console.error(
|
|
1528
1552
|
chalk3.red(
|
|
1529
|
-
"No arcane-manifest.json found. Run `npx arcane install` first."
|
|
1553
|
+
"No arcane-manifest.json found. Run `npx claude-code-arcane install` first."
|
|
1530
1554
|
)
|
|
1531
1555
|
);
|
|
1532
1556
|
process.exit(1);
|
|
1533
1557
|
}
|
|
1558
|
+
const source = opts.source ? await resolveContentSource({ source: opts.source }) : await resolveContentSourceForVersion(
|
|
1559
|
+
manifest.source_version ?? manifest.arcane_version
|
|
1560
|
+
);
|
|
1561
|
+
const root = await source.getContentRoot();
|
|
1534
1562
|
const removedSkills = [];
|
|
1535
1563
|
const removedAgents = [];
|
|
1536
1564
|
const removedProfiles = [];
|
|
@@ -1740,7 +1768,7 @@ async function statusCommand() {
|
|
|
1740
1768
|
console.log(
|
|
1741
1769
|
chalk5.yellow("No Arcane installation found in this project.")
|
|
1742
1770
|
);
|
|
1743
|
-
console.log(chalk5.dim("Run `npx arcane install <profile>` to install."));
|
|
1771
|
+
console.log(chalk5.dim("Run `npx claude-code-arcane install <profile>` to install."));
|
|
1744
1772
|
return;
|
|
1745
1773
|
}
|
|
1746
1774
|
const profiles = manifest.profiles.filter((p) => p !== "core");
|
|
@@ -1951,6 +1979,19 @@ Update available: ${chalk6.red(installedVersion)} -> ${chalk6.green(currentVersi
|
|
|
1951
1979
|
printUpdateSummary(items, opts.dryRun ?? false);
|
|
1952
1980
|
}
|
|
1953
1981
|
if (updates.length === 0 && removed.length === 0) {
|
|
1982
|
+
if (!opts.dryRun) {
|
|
1983
|
+
updateManifestFields(target, {
|
|
1984
|
+
arcane_version: currentVersion,
|
|
1985
|
+
source_version: currentVersion,
|
|
1986
|
+
updated_at: (/* @__PURE__ */ new Date()).toISOString().replace(/\.\d{3}Z$/, "Z"),
|
|
1987
|
+
content_hashes: installedHashes,
|
|
1988
|
+
installed_skills: merged.skills,
|
|
1989
|
+
installed_rules: allRules,
|
|
1990
|
+
installed_agents: merged.agents,
|
|
1991
|
+
total_skills: merged.skills.length,
|
|
1992
|
+
total_rules: allRules.length
|
|
1993
|
+
});
|
|
1994
|
+
}
|
|
1954
1995
|
if (!opts.quiet) {
|
|
1955
1996
|
console.log(chalk6.green("\nNo changes to apply."));
|
|
1956
1997
|
}
|
|
@@ -2202,7 +2243,7 @@ async function cleanCommand(opts) {
|
|
|
2202
2243
|
}
|
|
2203
2244
|
clean(target);
|
|
2204
2245
|
console.log(
|
|
2205
|
-
chalk7.green("\n Run `npx arcane install` to reinstall.\n")
|
|
2246
|
+
chalk7.green("\n Run `npx claude-code-arcane install` to reinstall.\n")
|
|
2206
2247
|
);
|
|
2207
2248
|
}
|
|
2208
2249
|
|
|
@@ -2241,7 +2282,7 @@ async function worktreeCommand(branch, opts) {
|
|
|
2241
2282
|
if (!profileExpr) {
|
|
2242
2283
|
console.error(
|
|
2243
2284
|
chalk8.red(
|
|
2244
|
-
"No profile specified and no existing installation to inherit from.\nUse --profile to specify one: npx arcane worktree feat/api --profile backend-ts+agile"
|
|
2285
|
+
"No profile specified and no existing installation to inherit from.\nUse --profile to specify one: npx claude-code-arcane worktree feat/api --profile backend-ts+agile"
|
|
2245
2286
|
)
|
|
2246
2287
|
);
|
|
2247
2288
|
process.exit(1);
|
|
@@ -2332,7 +2373,7 @@ async function worktreeCommand(branch, opts) {
|
|
|
2332
2373
|
} else {
|
|
2333
2374
|
console.warn(
|
|
2334
2375
|
chalk8.yellow(
|
|
2335
|
-
" WARN: worktree-isolation skill not installed. Add it with: npx arcane add worktree-isolation"
|
|
2376
|
+
" WARN: worktree-isolation skill not installed. Add it with: npx claude-code-arcane add worktree-isolation"
|
|
2336
2377
|
)
|
|
2337
2378
|
);
|
|
2338
2379
|
}
|
|
@@ -2622,8 +2663,11 @@ program.command("add <items...>").description(
|
|
|
2622
2663
|
});
|
|
2623
2664
|
program.command("remove <items...>").description(
|
|
2624
2665
|
"Remove skills or profiles. Use +profileName for profiles, skillName for individual skills."
|
|
2625
|
-
).
|
|
2626
|
-
|
|
2666
|
+
).option(
|
|
2667
|
+
"--source <source>",
|
|
2668
|
+
"Content source: auto, github, or bundled. Defaults to the version recorded in the manifest."
|
|
2669
|
+
).action(async (items, opts) => {
|
|
2670
|
+
await removeCommand(items, { source: opts.source });
|
|
2627
2671
|
});
|
|
2628
2672
|
program.command("list").description("List all available profiles and skills.").action(async () => {
|
|
2629
2673
|
await listCommand();
|
package/docs/RELEASE-SETUP.md
CHANGED
|
@@ -76,7 +76,7 @@ semantic-release commitea el changelog automaticamente con `[skip ci]` para no g
|
|
|
76
76
|
|
|
77
77
|
Ademas del release automatico, Arcane soporta distribucion hibrida:
|
|
78
78
|
|
|
79
|
-
- **GitHub source:** `npx arcane install backend-ts --source github` baja contenido directamente del repo
|
|
79
|
+
- **GitHub source:** `npx claude-code-arcane install backend-ts --source github` baja contenido directamente del repo
|
|
80
80
|
- **Cache local:** contenido descargado se cachea en `~/.arcane/cache/`
|
|
81
81
|
- **Bundled fallback:** si GitHub no esta disponible, usa el contenido empaquetado en npm
|
|
82
82
|
- **Auto:** `--source auto` (default) intenta GitHub → cache → bundled
|
package/docs/SKILLS-CATALOG.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Skills Catalog — Claude Code Arcane
|
|
2
2
|
|
|
3
|
-
Los
|
|
3
|
+
Los 427 skills disponibles para proyectos consumidores, organizados por division.
|
|
4
4
|
|
|
5
|
-
La tabla cubre
|
|
5
|
+
La tabla cubre 385: hay 42 skills instalables que todavia no estan catalogados aca. Un test de CI (`src/__tests__/doc-counts.test.ts`) verifica que estos numeros coincidan con el filesystem y que el header de cada seccion coincida con sus filas.
|
|
6
6
|
|
|
7
7
|
## Como ejecutar un skill
|
|
8
8
|
|
|
@@ -84,7 +84,7 @@ Desde cualquier proyecto que tenga Arcane configurado, escribi `/` seguido del n
|
|
|
84
84
|
| `/consistency-check` | Detecta inconsistencias cross-documento en stats/items | `[full \| since-last \| entity:<name>]` |
|
|
85
85
|
| `/doc-gdd` | Genera Game Design Document completo | `[game-name]` |
|
|
86
86
|
| `/doc-pas` | Documentacion PAS (Problem-Analysis-Solution) | `[problem o decision title]` |
|
|
87
|
-
| `/install-mcp` |
|
|
87
|
+
| `/install-mcp` | Conecta Claude con el MCP del engine: Unity (package UPM) o Unreal (plugins del engine) | `[unity\|unreal] [--secondary] [path]` |
|
|
88
88
|
| `/map-systems` | Descompone concepto en sistemas, mapea dependencias | `[next \| system-name] [--review]` |
|
|
89
89
|
| `/playtest-report` | Genera o analiza reporte de playtest | `[new\|analyze path] [--review]` |
|
|
90
90
|
| `/scaffold-unity` | Scaffoldea proyecto Unity estilo Project_T | `[project-name]` |
|
|
@@ -100,6 +100,45 @@ Desde cualquier proyecto que tenga Arcane configurado, escribi `/` seguido del n
|
|
|
100
100
|
|
|
101
101
|
---
|
|
102
102
|
|
|
103
|
+
## Unreal (30 skills)
|
|
104
|
+
|
|
105
|
+
Instalables con el perfil `unreal-dev`. Procedencia y licencias en `ATTRIBUTION.md`.
|
|
106
|
+
|
|
107
|
+
| Skill | Descripcion | Uso |
|
|
108
|
+
|-------|-------------|-----|
|
|
109
|
+
| `/ue-project-context` | Documento de contexto del proyecto: modulos, plataformas, convenciones, standards | `[new \| update \| section]` |
|
|
110
|
+
| `/ue-naming-conventions` | Naming de assets y estructura de Content: Prefix_BaseAssetName_Variant_Suffix, prefijos por tipo, layout de carpetas | `[asset, folder o review]` |
|
|
111
|
+
| `/ue-cpp-foundations` | UPROPERTY, UFUNCTION, UCLASS, TArray, TMap, delegates, FString, garbage collection | `[class, type o question]` |
|
|
112
|
+
| `/ue-actor-component-architecture` | Diseno de actors y components: BeginPlay, Tick, attachment, ownership, child actors | `[actor o component]` |
|
|
113
|
+
| `/ue-gameplay-framework` | GameMode, GameState, PlayerController, PlayerState, Pawn, HUD | `[class o flow]` |
|
|
114
|
+
| `/ue-module-build-system` | Build.cs, Target.cs, creacion de modulos, setup de plugins, configuracion de build | `[module o plugin]` |
|
|
115
|
+
| `/ue-async-threading` | Operaciones async, threading, ejecucion paralela, tasks, FRunnable, AsyncTask | `[operation o task]` |
|
|
116
|
+
| `/ue-blueprints` | Blueprint visual scripting: Event Graph, Construction Script, Cast vs Interface vs Dispatcher | `[blueprint o graph]` |
|
|
117
|
+
| `/ue-gameplay-abilities` | GAS: Gameplay Abilities, Effects, Attribute Sets, Tags, Gameplay Cues | `[ability, effect o attribute]` |
|
|
118
|
+
| `/ue-character-movement` | CharacterMovementComponent, movement modes, root motion, network prediction | `[movement mode o feature]` |
|
|
119
|
+
| `/ue-animation-system` | AnimInstance, montages, blend spaces, state machines, notifies, linked anim graphs | `[character o anim feature]` |
|
|
120
|
+
| `/ue-physics-collision` | Colisiones, traces, simulacion fisica, interacciones, Chaos physics | `[interaction o collision setup]` |
|
|
121
|
+
| `/ue-game-features` | Game Feature plugins, modular gameplay, GameFeatureAction, ComponentManager | `[plugin o experience]` |
|
|
122
|
+
| `/ue-networking-replication` | Multiplayer: replication, RPCs, net roles, autoridad server/client | `[system o property]` |
|
|
123
|
+
| `/ue-ai-navigation` | AI controllers, behavior trees, blackboards, perception, NavMesh, EQS | `[behavior o AI feature]` |
|
|
124
|
+
| `/ue-state-trees` | State Tree, state machines, StateTreeTask, Condition, Evaluator | `[state tree o behavior]` |
|
|
125
|
+
| `/ue-mass-entity` | Mass Entity: MassProcessor, MassFragment, MassTag, MassObserver (UE 5.5+) | `[system o entity type]` |
|
|
126
|
+
| `/ue-materials-rendering` | Materials, shaders, dynamic instances, post-process, render targets, Nanite, Lumen | `[material o effect]` |
|
|
127
|
+
| `/ue-niagara-effects` | Niagara: sistemas de particulas, VFX, emitters, data interfaces, simulacion GPU | `[effect o system]` |
|
|
128
|
+
| `/ue-audio-system` | UAudioComponent, SoundCue, MetaSound, atenuacion, concurrencia, analisis | `[sound o audio system]` |
|
|
129
|
+
| `/ue-sequencer-cinematics` | Sequencer, LevelSequence, cutscenes, camera tracks, Movie Render Queue | `[sequence o shot]` |
|
|
130
|
+
| `/ue-world-level-streaming` | World Partition, level streaming, level travel, data layers, world subsystems | `[level o streaming strategy]` |
|
|
131
|
+
| `/ue-procedural-generation` | PCG framework, ProceduralMesh, instanced mesh, generacion en runtime, noise | `[generator o PCG graph]` |
|
|
132
|
+
| `/ue-data-assets-tables` | DataAsset, DataTable, soft references, TSoftObjectPtr, async loading, Asset Manager | `[data type o asset]` |
|
|
133
|
+
| `/ue-serialization-savegames` | Save/load, persistencia de progreso, serializacion de datos, FArchive | `[save system o data]` |
|
|
134
|
+
| `/ue-ui-umg-slate` | UMG, Slate, UserWidget, HUD, BindWidget, Common UI, MVVM | `[widget o UI flow]` |
|
|
135
|
+
| `/ue-input-system` | Enhanced Input: Input Actions, Mapping Contexts, modifiers, triggers | `[action o input scheme]` |
|
|
136
|
+
| `/ue-editor-tools` | Editor utility widgets, Blutility, detail customization, property editors, subsystems | `[tool o customization]` |
|
|
137
|
+
| `/ue-testing-debugging` | Automation tests, functional tests, UE_LOG, visual logger, debug drawing | `[test o debug target]` |
|
|
138
|
+
| `/ue-packaging` | Packaging y cooking: build configs, Game Default Map, RunUAT BuildCookRun | `[platform o build config]` |
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
103
142
|
## Audio (13 skills)
|
|
104
143
|
|
|
105
144
|
| Skill | Descripcion | Uso |
|
|
@@ -454,7 +493,7 @@ Desde cualquier proyecto que tenga Arcane configurado, escribi `/` seguido del n
|
|
|
454
493
|
|
|
455
494
|
---
|
|
456
495
|
|
|
457
|
-
## Job Hunt (
|
|
496
|
+
## Job Hunt (17 skills)
|
|
458
497
|
|
|
459
498
|
| Skill | Descripcion | Uso |
|
|
460
499
|
|-------|-------------|-----|
|
|
@@ -467,6 +506,7 @@ Desde cualquier proyecto que tenga Arcane configurado, escribi `/` seguido del n
|
|
|
467
506
|
| `/job-search` | Busca, scorea y prioriza ofertas + plan de busqueda de 7 dias | `[search <query>\|score <url>\|plan]` |
|
|
468
507
|
| `/job-scrape` | Busca ofertas (CLIs LinkedIn + GetOnBoard bundleados) con dedup entre corridas, scorea y ofrece crear notas | `[perfil] [--jobage N]` |
|
|
469
508
|
| `/job-aplicar` | Pipeline completo de una postulacion: fit, CV custom, cover, review, PDF verificado y dashboard | `<url\|nota>` |
|
|
509
|
+
| `/career-registry` | Trazabilidad: contesta si ya te postulaste a una empresa/URL, exporta todo a CSV, audita huecos, notas frenadas y horas por encima de lo estimado. Sirve a empleo y freelance | `[check\|export\|stats\|audit]` |
|
|
470
510
|
| `/job-outcome` | Registra resultado/avance de una aplicacion y actualiza nota + dashboard | `[empresa]` |
|
|
471
511
|
| `/job-upskill` | Gaps de skills agregados de las aplicaciones + plan de estudio con recursos reales | `[url\|nota]` |
|
|
472
512
|
| `/cover-letter` | Cover letters y mensajes de aplicacion concisos y custom | `[application\|company + role]` |
|
|
@@ -517,6 +557,29 @@ Desde cualquier proyecto que tenga Arcane configurado, escribi `/` seguido del n
|
|
|
517
557
|
|
|
518
558
|
---
|
|
519
559
|
|
|
560
|
+
## Freelance (8 skills)
|
|
561
|
+
|
|
562
|
+
Perfil `+freelance`. Reutiliza ademas 6 skills ya catalogados: `/master-profile`, `/portfolio-site`, `/cold-outreach`, `/job-outcome` (Job Hunt), `/contract-and-proposal-writer` (Business) y `/estimate` (Agile). Comparte el career workspace con `+job-hunt`: una propuesta es una aplicacion con `tipo: freelance`.
|
|
563
|
+
|
|
564
|
+
Las fuentes automaticas son publicas y **sin API key**, para que funcionen apenas se instala el perfil: una fuente con credenciales por usuario dejaria el skill roto para todos menos uno.
|
|
565
|
+
|
|
566
|
+
A los marketplaces (Upwork, Workana, Freelancer.com, PeoplePerHour, Guru), que no tienen API publica, se llega por el modo `web` de `/freelance-scan`: WebSearch en paralelo mas un triage por patron de URL, porque la mitad de lo que devuelve la busqueda son landings y no ofertas. Ese modo descubre pero no lee (WebFetch da 403 en todas), asi que entrega links para abrir y tiene prohibido escribir fechas sin confirmar en el registro.
|
|
567
|
+
|
|
568
|
+
Quien consiga una API key propia la activa poniendo una variable de entorno: `keys` explica como conseguir cada una y avisa si falta. El analisis de cada plataforma, con los codigos medidos, esta en `skills/freelance-scan/references/platforms.md`.
|
|
569
|
+
|
|
570
|
+
| Skill | Descripcion | Uso |
|
|
571
|
+
|-------|-------------|-----|
|
|
572
|
+
| `/freelance-hunt` | Orquestador: extiende el career workspace con contratos y ledger de Connects, define piso de tarifa y capacidad, y rutea | `[setup\|status\|next]` |
|
|
573
|
+
| `/freelance-profile` | Perfil de la plataforma: titulo de nicho, primeros 250 caracteres del overview, portfolio items, specialized profiles y tarifa derivada del piso | `[audit\|title\|overview\|portfolio\|rate]` |
|
|
574
|
+
| `/freelance-scan` | Scorea ofertas (fit tecnico + viabilidad economica + probabilidad de que la oferta exista) con dedup entre corridas. `search` sobre fuentes publicas sin API key (GetOnBrd, Himalayas), `web` llega a los marketplaces via WebSearch + triage de ruido SEO, `market` para tarifas, `keys` para las fuentes con credencial propia | `[search\|web\|market\|keys\|sources\|post pegado]` |
|
|
575
|
+
| `/client-screen` | Riesgo del cliente antes de gastar Connects: payment verificado, hire rate, brecha presupuesto/alcance, red flags. Registra el descarte tambien | `[job-url\|nota\|post]` |
|
|
576
|
+
| `/freelance-proposal` | Propuesta que sobrevive la vista de lista (2 primeras lineas) + bid sobre el piso neto: fijo vs hora, buffer de riesgo, comision | `[nota\|job-url]` |
|
|
577
|
+
| `/freelance-kickoff` | Convierte el contrato ganado en plan: desarma alcance en entregables, criterios de aceptacion, y valida si entra en las horas cotizadas antes de arrancar | `[nota de contrato\|cliente]` |
|
|
578
|
+
| `/freelance-deliver` | Loop de ejecucion: registra horas facturables y no facturables, detecta scope creep el dia que pasa, y cotiza el change order antes de hacer el trabajo | `[log\|check\|change\|close]` |
|
|
579
|
+
| `/freelance-pipeline` | Diagnostico del negocio: ROI de Connects, embudo, tarifa efectiva real neta de horas no facturables, utilizacion, concentracion, scope drift | `[--desde YYYY-MM-DD]` |
|
|
580
|
+
|
|
581
|
+
---
|
|
582
|
+
|
|
520
583
|
## Skills internos de Arcane
|
|
521
584
|
|
|
522
585
|
Estos skills son para mantener y desarrollar el propio repo Arcane:
|