claude-code-arcane 1.2.0 → 1.3.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.
Files changed (55) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +2 -0
  3. package/agents/engineering/dotnet-engineer.md +78 -0
  4. package/docs/SKILLS-CATALOG.md +26 -3
  5. package/package.json +1 -1
  6. package/profiles/backend-dotnet.yaml +54 -0
  7. package/profiles/job-hunt.yaml +35 -0
  8. package/profiles/unity-design.yaml +1 -0
  9. package/profiles/unity-dev.yaml +1 -0
  10. package/rules/dotnet-code.md +64 -0
  11. package/skills/cold-outreach/SKILL.md +65 -0
  12. package/skills/cold-outreach/references/recruiter-playbook.md +65 -0
  13. package/skills/cover-letter/SKILL.md +66 -0
  14. package/skills/cv-ats-export/SKILL.md +64 -0
  15. package/skills/cv-ats-export/scripts/cv_export.py +306 -0
  16. package/skills/cv-tailor/SKILL.md +70 -0
  17. package/skills/cv-tailor/references/ats-keywords.md +46 -0
  18. package/skills/dotnet-architecture/SKILL.md +66 -0
  19. package/skills/dotnet-architecture/references/anti-patterns.md +12 -0
  20. package/skills/dotnet-architecture/references/checklist.md +19 -0
  21. package/skills/dotnet-architecture/references/patterns.md +118 -0
  22. package/skills/dotnet-architecture/references/project-structure.md +78 -0
  23. package/skills/dotnet-best-practices/SKILL.md +76 -0
  24. package/skills/dotnet-best-practices/references/api-design.md +75 -0
  25. package/skills/dotnet-best-practices/references/architecture.md +62 -0
  26. package/skills/dotnet-best-practices/references/async.md +62 -0
  27. package/skills/dotnet-best-practices/references/database.md +69 -0
  28. package/skills/dotnet-best-practices/references/dependency-injection.md +73 -0
  29. package/skills/dotnet-best-practices/references/devops.md +76 -0
  30. package/skills/dotnet-best-practices/references/error-handling.md +72 -0
  31. package/skills/dotnet-best-practices/references/performance.md +63 -0
  32. package/skills/dotnet-best-practices/references/security.md +73 -0
  33. package/skills/dotnet-best-practices/references/testing.md +76 -0
  34. package/skills/dotnet-scaffold/SKILL.md +99 -0
  35. package/skills/install-mcp/SKILL.md +107 -0
  36. package/skills/install-mcp/references/manual-setup.md +92 -0
  37. package/skills/interview-prep/SKILL.md +69 -0
  38. package/skills/interview-prep/references/star-framework.md +42 -0
  39. package/skills/job-hunt/SKILL.md +92 -0
  40. package/skills/job-hunt/references/templates/Aplicacion.md +48 -0
  41. package/skills/job-hunt/references/templates/CV Custom.md +53 -0
  42. package/skills/job-hunt/references/templates/Contacto.md +30 -0
  43. package/skills/job-hunt/references/templates/Dashboard.md +45 -0
  44. package/skills/job-hunt/references/templates/Empresa.md +36 -0
  45. package/skills/job-hunt/references/templates/Entrevista.md +44 -0
  46. package/skills/job-hunt/references/templates/Perfil.md +38 -0
  47. package/skills/job-search/SKILL.md +83 -0
  48. package/skills/job-search/references/scoring-rubric.md +43 -0
  49. package/skills/linkedin-optimize/SKILL.md +79 -0
  50. package/skills/master-profile/SKILL.md +69 -0
  51. package/skills/network-map/SKILL.md +61 -0
  52. package/skills/network-map/scripts/network_map.py +109 -0
  53. package/skills/personal-brand/SKILL.md +54 -0
  54. package/skills/personal-brand/references/post-pillars.md +66 -0
  55. package/skills/portfolio-site/SKILL.md +59 -0
package/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ # [1.3.0](https://github.com/SebastianLuser/claude-code-arcane/compare/v1.2.0...v1.3.0) (2026-06-21)
2
+
3
+
4
+ ### Features
5
+
6
+ * **skills:** add .NET/C# backend skill set ([3775260](https://github.com/SebastianLuser/claude-code-arcane/commit/377526032a05c2a97790a3a4396cbeada6071c1e))
7
+ * **skills:** add install-mcp skill for Unity MCP setup ([5290038](https://github.com/SebastianLuser/claude-code-arcane/commit/52900386844a18d91a3c4f9135e27c2be0be396f))
8
+ * **skills:** add job-hunt skillset (12 skills + profile) ([d5329e2](https://github.com/SebastianLuser/claude-code-arcane/commit/d5329e211a273719ded43639aa582b98c5dfc7ac))
9
+
1
10
  # [1.2.0](https://github.com/SebastianLuser/claude-code-arcane/compare/v1.1.1...v1.2.0) (2026-06-19)
2
11
 
3
12
 
package/README.md CHANGED
@@ -165,6 +165,7 @@ Once installed, manage the installation from within a Claude Code session:
165
165
  | `unity-design` | Game designer — GDDs, balance, art bible, playtesting | 17 | game |
166
166
  | `backend-ts` | Backend TypeScript — Fastify, Prisma, Zod, API design | 33 | engineering |
167
167
  | `backend-go` | Backend Go — Clean Arch, DB, auth, API, CI | 19 | engineering |
168
+ | `backend-dotnet` | Backend .NET — ASP.NET Core, Vertical Slice/Clean, EF Core, JWT | 25 | engineering |
168
169
  | `frontend` | React + Vite + TypeScript | 14 | engineering |
169
170
  | `mobile` | React Native + Expo + TypeScript | 12 | engineering |
170
171
  | `flutter` | Flutter + Dart cross-platform | 8 | engineering |
@@ -191,6 +192,7 @@ Once installed, manage the installation from within a Claude Code session:
191
192
  | `+finance` | Investment analysis, financial modeling, SaaS metrics | 3 | business |
192
193
  | `+marketing` | Content, growth, SEO/CRO, strategy, analytics | 44 | marketing |
193
194
  | `+regulatory` | ISO 13485, GDPR, FDA, SOC 2, ISMS, QMS, MDR | 13 | regulatory |
195
+ | `+job-hunt` | Job search end-to-end — master profile, ATS CV, LinkedIn, portfolio, cover letters, outreach, interview prep | 12 | — |
194
196
  | `+self-improving` | Agent self-improvement and skill extraction | 2 | — |
195
197
  | `+statusline` | Claude Code status bar (branch, division, session info) | 0 | — |
196
198
 
@@ -0,0 +1,78 @@
1
+ ---
2
+ name: dotnet-engineer
3
+ description: "Specialist en ASP.NET Core (.NET 10) production-ready: Vertical Slice / Clean Architecture, Minimal APIs, EF Core + PostgreSQL, JWT + Identity, async correcto, testing con Testcontainers. Implementa APIs backend guiadas por backend-architect."
4
+ tools: Read, Glob, Grep, Write, Edit, Bash
5
+ model: sonnet
6
+ maxTurns: 15
7
+ memory: project
8
+ skills: [dotnet-scaffold, dotnet-best-practices, dotnet-architecture]
9
+ ---
10
+
11
+ Sos el **.NET Engineer**. Implementás APIs backend en ASP.NET Core (.NET 10) con C# 14, nullable habilitado y async end-to-end, siguiendo decisions del `backend-architect` y `database-architect`.
12
+
13
+ ## Expertise Areas
14
+
15
+ - **Arquitectura** — Vertical Slice (features) o Clean Architecture (capas con deps hacia adentro); elegir según complejidad del dominio
16
+ - **DI** — constructor injection (primary constructors), lifetimes correctos, `IOptions<T>` para config
17
+ - **HTTP** — Minimal APIs con `TypedResults`, DTOs (records), FluentValidation, `ProblemDetails` (RFC 7807)
18
+ - **Async** — async all the way, `CancellationToken` propagado end-to-end, sin sync-over-async
19
+ - **Data** — EF Core (default) / Dapper, `DbContext` como Unit of Work (sin repos genéricos), sin N+1, migraciones versionadas
20
+ - **Auth** — JWT + refresh, ASP.NET Identity, authorization por policies declarativas
21
+ - **Testing** — xUnit + `WebApplicationFactory` + Testcontainers (Postgres real), FluentAssertions
22
+ - **Ops** — Serilog (JSON), health checks, OpenTelemetry, Docker multi-stage, graceful shutdown
23
+
24
+ ## Idioms y Anti-Patterns
25
+
26
+ ### Idiomatic .NET
27
+ - Organizar por feature/slice; endpoints finos que delegan al handler
28
+ - Constructor injection siempre; `Scoped` para `DbContext`/handlers
29
+ - Async con `CancellationToken`; nunca `.Result`/`.Wait()`
30
+ - `ProblemDetails` consistente; Result pattern para fallos esperados
31
+ - DTOs en el borde; nunca exponer entidades EF
32
+
33
+ ### Anti-Patterns
34
+ - `IRepository<T>` / `IUnitOfWork` genérico sobre EF Core
35
+ - Lógica de negocio en controllers/endpoints
36
+ - `.Result` / `.Wait()` (sync-over-async) → deadlocks
37
+ - `EnsureCreated()` en producción en vez de migraciones
38
+ - Service locator / `BuildServiceProvider()` en runtime
39
+ - N+1 por falta de `Include`/proyección
40
+ - `Domain` dependiendo de `Infrastructure` / EF Core
41
+
42
+ ## Stack Defaults
43
+
44
+ | Componente | Default |
45
+ |------------|---------|
46
+ | Runtime | .NET 10 LTS (C# 14) |
47
+ | Framework | ASP.NET Core — Minimal APIs |
48
+ | Arquitectura | Vertical Slice (Clean opcional) |
49
+ | ORM | EF Core 10 |
50
+ | DB | PostgreSQL (Npgsql) |
51
+ | Auth | JWT + ASP.NET Identity |
52
+ | Validación | FluentValidation → ProblemDetails |
53
+ | Testing | xUnit + Testcontainers |
54
+ | Deploy | Docker |
55
+
56
+ ## Code Review Bar
57
+
58
+ **Veto:**
59
+ - Dependencias hacia afuera (Domain → Infrastructure/EF Core)
60
+ - Constructor injection ausente / service locator en runtime
61
+ - Sync-over-async (`.Result`/`.Wait()`)
62
+ - `CancellationToken` no propagado en operaciones I/O
63
+ - Endpoints sin validación / sin `ProblemDetails`
64
+ - Auth/authz manual en vez de policies
65
+ - `EnsureCreated()` contra prod / secrets en `appsettings.json`
66
+ - N+1 queries evitables; entidades EF expuestas como respuesta
67
+
68
+ **Comment-only:**
69
+ - Repo genérico innecesario sobre EF Core
70
+ - Handler con múltiples responsabilidades
71
+ - Logging no estructurado
72
+ - Falta de `AsNoTracking()` en lecturas
73
+
74
+ ## Delegation Map
75
+
76
+ **Report to:** `backend-architect`, `database-architect`, `lead-programmer`.
77
+ **Coordina con:** `e2e-tester` (cobertura e2e), `sql-specialist` (optimización de queries).
78
+ **No delegate down.** Tier 3 specialist.
@@ -1,6 +1,6 @@
1
1
  # Skills Catalog — Claude Code Arcane
2
2
 
3
- Catalogo completo de los 305 skills disponibles para proyectos consumidores. Organizados por division.
3
+ Catalogo completo de los 321 skills disponibles para proyectos consumidores. Organizados por division.
4
4
 
5
5
  ## Como ejecutar un skill
6
6
 
@@ -70,7 +70,7 @@ Desde cualquier proyecto que tenga Arcane configurado, escribi `/` seguido del n
70
70
 
71
71
  ---
72
72
 
73
- ## Gamedev (20 skills)
73
+ ## Gamedev (21 skills)
74
74
 
75
75
  | Skill | Descripcion | Uso |
76
76
  |-------|-------------|-----|
@@ -82,6 +82,7 @@ Desde cualquier proyecto que tenga Arcane configurado, escribi `/` seguido del n
82
82
  | `/consistency-check` | Detecta inconsistencias cross-documento en stats/items | `[full \| since-last \| entity:<name>]` |
83
83
  | `/doc-gdd` | Genera Game Design Document completo | `[game-name]` |
84
84
  | `/doc-pas` | Documentacion PAS (Problem-Analysis-Solution) | `[problem o decision title]` |
85
+ | `/install-mcp` | Instala y registra el MCP de Unity (CoplayDev) en el proyecto | `[--secondary] [project-path]` |
85
86
  | `/map-systems` | Descompone concepto en sistemas, mapea dependencias | `[next \| system-name] [--review]` |
86
87
  | `/playtest-report` | Genera o analiza reporte de playtest | `[new\|analyze path] [--review]` |
87
88
  | `/scaffold-unity` | Scaffoldea proyecto Unity estilo Project_T | `[project-name]` |
@@ -158,7 +159,7 @@ Desde cualquier proyecto que tenga Arcane configurado, escribi `/` seguido del n
158
159
 
159
160
  ---
160
161
 
161
- ## Software (45 skills)
162
+ ## Software (48 skills)
162
163
 
163
164
  | Skill | Descripcion | Uso |
164
165
  |-------|-------------|-----|
@@ -181,6 +182,9 @@ Desde cualquier proyecto que tenga Arcane configurado, escribi `/` seguido del n
181
182
  | `/distributed-tracing` | Setup de tracing distribuido | `[go\|ts\|react\|rn] [gcp\|tempo\|datadog]` |
182
183
  | `/doc-rfc` | Genera RFC tecnico estilo Alizia-BE | `[rfc-title o feature]` |
183
184
  | `/docker-setup` | Dockerfiles + docker-compose multi-stage | `[go\|ts\|react\|rn] [--dev\|--prod]` |
185
+ | `/dotnet-architecture` | Arquitectura .NET: Vertical Slice y Clean Architecture | `[vertical-slice\|clean\|when-to-use]` |
186
+ | `/dotnet-best-practices` | ASP.NET Core best practices: 40 reglas priorizadas | `[architecture\|di\|security\|performance\|all]` |
187
+ | `/dotnet-scaffold` | Scaffold ASP.NET Core: .NET 10, EF Core, Postgres, JWT | `[project-name]` |
184
188
  | `/file-uploads` | Implementacion de file uploads | `[go\|ts\|react\|rn]` |
185
189
  | `/form-validation` | Validacion de forms: RHF + Zod | `[react\|rn] [form-name]` |
186
190
  | `/go-clean-architecture` | Clean architecture en Go | `[module o feature]` |
@@ -428,6 +432,25 @@ Desde cualquier proyecto que tenga Arcane configurado, escribi `/` seguido del n
428
432
 
429
433
  ---
430
434
 
435
+ ## Job Hunt (12 skills)
436
+
437
+ | Skill | Descripcion | Uso |
438
+ |-------|-------------|-----|
439
+ | `/job-hunt` | Entry point: crea/gestiona el career workspace (perfiles, CVs, aplicaciones, empresas, contactos, entrevistas) y rutea | `[setup\|status\|next]` |
440
+ | `/master-profile` | Perfil maestro single-source-of-truth del que derivan CVs, LinkedIn y portfolio | `[build\|update\|derive <role>]` |
441
+ | `/cv-tailor` | Adapta el CV a una oferta: keywords ATS, que resaltar/bajar, reescritura de highlights | `[job-url\|jd-path\|application]` |
442
+ | `/cv-ats-export` | Markdown -> PDF ATS-compliant (una columna, texto seleccionable) via Chrome/Edge headless | `[cv-name\|all] [--workspace <path>]` |
443
+ | `/linkedin-optimize` | Optimiza LinkedIn: headline, About, experiencia con KPIs, keywords, value prop, pitch 30s | `[section\|full]` |
444
+ | `/portfolio-site` | Genera/actualiza portfolio web desde el source-of-truth | `[sync\|scaffold] [repo\|--new]` |
445
+ | `/job-search` | Busca, scorea y prioriza ofertas + plan de busqueda de 7 dias | `[search <query>\|score <url>\|plan]` |
446
+ | `/cover-letter` | Cover letters y mensajes de aplicacion concisos y custom | `[application\|company + role]` |
447
+ | `/cold-outreach` | Mensajes en frio a recruiters/hiring managers + follow-ups post-aplicacion | `[contact\|recruiter + company]` |
448
+ | `/interview-prep` | Prep de entrevista: research, banco de preguntas, respuestas STAR, red flags | `[application\|company + role + round]` |
449
+ | `/network-map` | Convierte el export de conexiones de LinkedIn en contactos por empresa + warm intros + mensajes | `[company] \| import <Connections.csv>` |
450
+ | `/personal-brand` | Backlog secuenciado de posts de LinkedIn (4 pilares) para construir autoridad antes del outreach | `[plan\|ideas <N>\|draft <idea>]` |
451
+
452
+ ---
453
+
431
454
  ## Skills internos de Arcane
432
455
 
433
456
  Estos skills son para mantener y desarrollar el propio repo Arcane:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-code-arcane",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "Skills, agents, hooks and rules for Claude Code — installable via npx arcane",
5
5
  "type": "module",
6
6
  "bin": {
@@ -0,0 +1,54 @@
1
+ name: backend-dotnet
2
+ description: "Backend .NET — ASP.NET Core (.NET 10), Vertical Slice / Clean Architecture, EF Core + PostgreSQL, JWT + Identity, testing. Best practices priorizadas por impacto."
3
+ type: base
4
+
5
+ skills:
6
+ # .NET-specific (nuevas)
7
+ - dotnet-scaffold
8
+ - dotnet-best-practices
9
+ - dotnet-architecture
10
+ # API & data
11
+ - database
12
+ - database-indexing
13
+ - data-migrations
14
+ - api-design
15
+ - api-docs
16
+ - api-versioning
17
+ - caching-strategy
18
+ - webhooks
19
+ - rate-limiting
20
+ # Auth & security
21
+ - auth-strategy
22
+ - jwt-strategy
23
+ - oauth-setup
24
+ - rbac-abac
25
+ - audit-log
26
+ # Ops & quality
27
+ - testing
28
+ - contract-testing
29
+ - deps-audit
30
+ - env-sync
31
+ - observability
32
+ - performance
33
+ - async-ops
34
+ - ci-cd-setup
35
+
36
+ rules:
37
+ universal:
38
+ - backend-code
39
+ - api-code
40
+ - dotnet-code
41
+ - migration-code
42
+ gamedev:
43
+ []
44
+
45
+ agents:
46
+ - engineering
47
+
48
+ permissions:
49
+ allow:
50
+ - "Bash(dotnet *)"
51
+ - "Bash(docker ps*)"
52
+ - "Bash(docker images*)"
53
+ deny:
54
+ []
@@ -0,0 +1,35 @@
1
+ name: job-hunt
2
+ description: "Job Hunt — busqueda laboral end-to-end: perfil maestro, CV ATS, LinkedIn, portfolio, cover letters, outreach a recruiters, scoring de ofertas y prep de entrevistas"
3
+ type: addon
4
+
5
+ skills:
6
+ - job-hunt
7
+ - master-profile
8
+ - cv-tailor
9
+ - cv-ats-export
10
+ - linkedin-optimize
11
+ - portfolio-site
12
+ - job-search
13
+ - cover-letter
14
+ - cold-outreach
15
+ - interview-prep
16
+ - network-map
17
+ - personal-brand
18
+
19
+ rules:
20
+ universal:
21
+ []
22
+ gamedev:
23
+ []
24
+
25
+ agents:
26
+ []
27
+
28
+ permissions:
29
+ allow:
30
+ - "Bash(python *cv_export.py*)"
31
+ - "Bash(python3 *cv_export.py*)"
32
+ - "Bash(python *network_map.py*)"
33
+ - "Bash(python3 *network_map.py*)"
34
+ deny:
35
+ []
@@ -10,6 +10,7 @@ skills:
10
10
  - map-systems
11
11
  - asset-spec
12
12
  - game-audit
13
+ - install-mcp
13
14
  - quick-design
14
15
  - ux-design
15
16
  - design-system
@@ -12,6 +12,7 @@ skills:
12
12
  - release-checklist
13
13
  - patch-notes
14
14
  - onboard
15
+ - install-mcp
15
16
  - scaffold-unity
16
17
  - unity-game-architecture
17
18
  - map-systems
@@ -0,0 +1,64 @@
1
+ ---
2
+ paths:
3
+ - "**/*.cs"
4
+ - "**/*.csproj"
5
+ - "**/Program.cs"
6
+ - "**/*.Tests.cs"
7
+ - "src/**"
8
+ - "tests/**"
9
+ ---
10
+
11
+ # .NET / C# Code Rules
12
+
13
+ Reglas production-ready para ASP.NET Core (.NET 10), ordenadas por impacto. Catálogo completo (40 reglas, 10 categorías) + ejemplos incorrecto/correcto: skill `dotnet-best-practices`. Estructura de proyecto: skill `dotnet-architecture`.
14
+
15
+ ## CRITICAL — Arquitectura & DI
16
+
17
+ - **Organizar por feature (Vertical Slice)** o por capas con dependencias hacia adentro (Clean) — nunca un `Services/` + `Controllers/` global gigante.
18
+ - **Endpoints/controllers finos** — traducen HTTP ↔ request, llaman al handler y dan shape a la respuesta. Cero lógica de negocio.
19
+ - **`DbContext` es Unit of Work + Repository** — no envolverlo en `IRepository<T>` / `IUnitOfWork` genérico (indirección sin valor que tapa `Include`/proyecciones).
20
+ - **Constructor injection (primary constructors) siempre.** Nunca service locator ni `BuildServiceProvider()` manual en `Program.cs`.
21
+ - **Lifetimes correctos** — `Scoped` para `DbContext`/handlers, `Singleton` solo si es stateless; nunca inyectar `Scoped` en `Singleton` (captured dependency).
22
+ - **`<Nullable>enable</Nullable>`** + warnings as errors; cero `#nullable disable` para silenciar.
23
+
24
+ ## HIGH — Async, Error handling & Security
25
+
26
+ - **Async end-to-end.** Nunca `.Result`/`.Wait()`/`.GetAwaiter().GetResult()` (deadlocks / thread-pool starvation). Sin `async void` salvo event handlers.
27
+ - **Propagar `CancellationToken`** desde el endpoint hasta EF Core y llamadas HTTP. Sin fire-and-forget sin manejo de error.
28
+ - **Errores vía `ProblemDetails` (RFC 7807)** — `AddProblemDetails()` + `IExceptionHandler` global. Nunca filtrar stack traces. Validación → `ValidationProblemDetails`.
29
+ - **Result pattern para fallos esperados**, excepciones solo para lo excepcional. Sin `catch` vacíos.
30
+ - **JWT de vida corta + refresh**, secretos en user-secrets/Key Vault (no en `appsettings.json`). Authorization por **policies declarativas**, no checks manuales de roles.
31
+ - **Rate limiting** con el middleware built-in (`AddRateLimiter`). HTTPS/HSTS. No loguear data sensible.
32
+
33
+ ## HIGH — Performance & Data (EF Core)
34
+
35
+ - **Evitar N+1** — `Include` o proyección a DTO con `Select`. Nunca acceder a relaciones en un loop.
36
+ - **`AsNoTracking()`** en lecturas read-only. `AsSplitQuery()` para `Include` grandes (evita explosión cartesiana).
37
+ - **Migraciones versionadas** (`dotnet ef migrations add` / `MigrateAsync()`); nunca `EnsureCreated()` en prod.
38
+ - **Transacciones para operaciones multi-step**; `EnableRetryOnFailure` para resiliencia de conexión (Npgsql).
39
+ - **Caching estratégico** (`HybridCache`/output caching) con TTL e invalidación apropiada.
40
+
41
+ ## MEDIUM — API, Testing & DevOps
42
+
43
+ - **DTOs en el borde** (records) — nunca exponer entidades EF como respuestas HTTP.
44
+ - **API versioning** (`Asp.Versioning`) para cambios breaking; OpenAPI con `Microsoft.AspNetCore.OpenApi`.
45
+ - **`TypedResults`** en minimal APIs para status codes correctos y testeables.
46
+ - **Tests con xUnit**; integración con `WebApplicationFactory` + Postgres real (Testcontainers). No mockear `DbContext` ni usar el in-memory provider (miente sobre comportamiento relacional).
47
+ - **Structured logging (Serilog JSON)** + health checks (liveness/readiness). Graceful shutdown vía `IHostApplicationLifetime`.
48
+ - **Config por entorno** (`IOptions<T>`, `appsettings.{Environment}.json`) — nada hardcodeado.
49
+
50
+ ## Anti-Patterns
51
+
52
+ - `IRepository<T>` / `IUnitOfWork` genérico sobre EF Core
53
+ - Lógica de negocio en controllers/endpoints
54
+ - `.Result` / `.Wait()` (sync-over-async) → deadlocks
55
+ - `EnsureCreated()` contra una DB de producción
56
+ - Service locator / `BuildServiceProvider()` en runtime
57
+ - Devolver entidades EF crudas como respuesta HTTP
58
+ - N+1 queries por falta de `Include`/proyección
59
+ - `Domain` referenciando `Infrastructure` / EF Core (dependencia hacia afuera)
60
+ - Forzar Clean Architecture en un CRUD simple (sobre-ingeniería)
61
+
62
+ ---
63
+
64
+ _Derivado de [github/awesome-copilot](https://github.com/github/awesome-copilot) (dotnet-best-practices), [dotnet/skills](https://github.com/dotnet/skills) y [ardalis/CleanArchitecture](https://github.com/ardalis/CleanArchitecture). Condensado al formato Arcane._
@@ -0,0 +1,65 @@
1
+ ---
2
+ name: cold-outreach
3
+ description: "Write cold LinkedIn/email messages from a job-seeker to recruiters, hiring managers and referrals — plus post-application follow-up sequences that get replies. For B2B sales outreach use cold-email instead. Triggers: mensaje en frio recruiter, escribirle a un reclutador, follow up postulacion, networking message, pedir referido, contactar hiring manager."
4
+ argument-hint: "[contact-note | recruiter + company]"
5
+ category: "career"
6
+ user-invocable: true
7
+ allowed-tools: Read, Glob, Grep, Write, Edit, WebFetch
8
+ ---
9
+
10
+ # Cold Outreach — Job-seeker → Recruiter / Hiring Manager
11
+
12
+ Escribís mensajes en frío de un **candidato** a recruiters, hiring managers y referidos, y secuencias de **follow-up** post-aplicación que reciben respuesta. Esto NO es venta B2B (para eso está `/cold-email`) — el ángulo es conseguir una conversación o un referido, sin sonar a spam ni a desesperación.
13
+
14
+ ## Cuándo usar cada variante
15
+
16
+ | Situación | Mensaje |
17
+ |-----------|---------|
18
+ | Recruiter posteó un rol | Mensaje corto con fit + interés explícito |
19
+ | Hiring manager / futuro lead | Mensaje de valor: qué resolvés que a su equipo le importa |
20
+ | Pedir un referido a alguien de la empresa | Cálido, bajo compromiso, fácil de decir que sí |
21
+ | Networking sin rol abierto | Curiosidad genuina + algo en común, sin pedir nada todavía |
22
+ | Follow-up post-aplicación | Recordatorio con valor, no "¿alguna novedad?" |
23
+
24
+ ## Principios
25
+
26
+ - **Personalizá la primera línea.** Algo real de esa persona/empresa/rol. Si sirve para 100 personas, no sirve para ninguna.
27
+ - **Corto.** LinkedIn: 50–125 palabras. La connection note: <300 caracteres.
28
+ - **Una pregunta / un CTA.** Bajá la fricción de responder.
29
+ - **Vos resolvés algo para ellos**, no "estoy buscando trabajo, ¿me ayudás?". El foco es el valor que aportás al equipo.
30
+ - **Sin paredes de texto, sin CV adjunto en el primer toque** (salvo que lo pidan).
31
+ - **Respetá el "no".** Un follow-up, máximo dos. Nunca insistir agresivo.
32
+
33
+ ## Estructura de un primer mensaje
34
+
35
+ 1. **Gancho personal** (1 línea): por qué *a esta persona*.
36
+ 2. **Quién sos + fit** (1–2 líneas): rol + el logro más relevante para ellos.
37
+ 3. **CTA suave** (1 línea): ¿15 min para charlar? / ¿abierto a una intro? / dejé mi aplicación, encantado de dar contexto.
38
+
39
+ ## Secuencia de follow-up post-aplicación
40
+
41
+ - **Día 0** — aplicación enviada (+ mensaje al recruiter/hiring manager si tenés el contacto).
42
+ - **Día 4–5** — follow-up 1: reafirmá interés + agregá *algo nuevo* (un proyecto relevante, una idea sobre su producto). No "¿novedades?".
43
+ - **Día 10–12** — follow-up 2 (último): breve, profesional, dejá la puerta abierta. Si no hay respuesta, cerrás el loop con dignidad.
44
+
45
+ Cada follow-up debe tener un **gancho propio** y leerse solo, sin depender de los anteriores.
46
+
47
+ ## Proceso
48
+
49
+ 1. Leer la nota de `05-Contactos/` (o crearla) y la de `04-Empresas/`.
50
+ 2. Investigar a la persona (rol, equipo, algo reciente) — WebFetch del perfil público si hay URL.
51
+ 3. Elegir variante + canal.
52
+ 4. Draftear mensaje + 1 variante de apertura.
53
+ 5. Registrar en `05-Contactos/` (historial de interacciones) y planificar el follow-up.
54
+
55
+ > Nota: Claude no accede a tu LinkedIn ni envía mensajes — redacta para que vos copies/pegues y registres la interacción.
56
+
57
+ ## Idioma
58
+
59
+ Espejá el idioma de la persona/empresa. Inglés por default para roles internacionales.
60
+
61
+ Ver `references/recruiter-playbook.md` para plantillas por situación y la psicología de por qué responden.
62
+
63
+ ## Handoff
64
+
65
+ Pedí aprobación (approval) antes de escribir en `05-Contactos/`. Cuando el mensaje está READY para copiar/pegar y el follow-up agendado, prepará la conversación con `/interview-prep` si hay respuesta.
@@ -0,0 +1,65 @@
1
+ # Recruiter / Hiring Manager Playbook
2
+
3
+ Plantillas y psicología para outreach de candidato. Adaptá siempre la primera línea — las plantillas son esqueleto, no copy-paste.
4
+
5
+ ## Por qué responden (y por qué no)
6
+
7
+ Responden cuando: el mensaje es corto, claro sobre el fit, fácil de responder, y se nota que es para *ellos*. No responden cuando: es genérico, largo, pide demasiado de entrada, o suena desesperado. El recruiter recibe decenas por día — el filtro es "¿esto me ahorra trabajo o me lo agrega?".
8
+
9
+ ## Plantillas
10
+
11
+ ### 1. Recruiter que posteó un rol
12
+ ```
13
+ Hola {nombre}, vi que están buscando {rol} en {empresa}.
14
+ Soy {rol/seniority} con {logro relevante en 1 línea, con número}.
15
+ Me interesa especialmente {algo real del rol/empresa}.
16
+ ¿Te sirve si te paso mi CV o coordinamos 15 min?
17
+ ```
18
+
19
+ ### 2. Hiring manager / futuro lead (mensaje de valor)
20
+ ```
21
+ Hola {nombre}, sigo {producto/equipo de la empresa} y me llamó {detalle específico}.
22
+ Vengo de {contexto}: {logro mapeado a lo que su equipo necesita}.
23
+ Apliqué a {rol}; si te viene bien, encantado de darte contexto en una charla corta.
24
+ ```
25
+
26
+ ### 3. Pedir un referido (a alguien del equipo)
27
+ ```
28
+ Hola {nombre}, vi que trabajás en {empresa} como {rol}.
29
+ Estoy aplicando a {rol} ahí y me encantaría tu perspectiva sobre el equipo.
30
+ Si te parece y te hace sentido, ¿estarías abierto a referirme? Sin problema si no.
31
+ Te dejo mi perfil para que veas si encaja: {link}.
32
+ ```
33
+
34
+ ### 4. Connection note (<300 chars)
35
+ ```
36
+ Hola {nombre}, me interesa mucho {empresa/área}. Vengo de {1 cosa}.
37
+ Me encantaría conectar y, si surge, charlar sobre {rol/equipo}.
38
+ ```
39
+
40
+ ### 5. Follow-up 1 (día 4–5) — con valor nuevo
41
+ ```
42
+ Hola {nombre}, te escribo para reafirmar mi interés en {rol}.
43
+ Sumo un dato: {proyecto/idea relevante para su producto}.
44
+ Quedo a disposición para lo que necesiten del proceso.
45
+ ```
46
+
47
+ ### 6. Follow-up 2 (día 10–12) — cierre digno
48
+ ```
49
+ Hola {nombre}, entiendo que están con mucho.
50
+ Dejo la puerta abierta por si avanza {rol}; me encantaría sumar.
51
+ ¡Gracias por el tiempo!
52
+ ```
53
+
54
+ ## Reglas de cadencia
55
+
56
+ - Máximo 2 follow-ups. Después, soltar.
57
+ - Cada follow-up agrega algo (no "¿novedades?").
58
+ - Espaciar 4–5 días. Nunca el mismo día ni días consecutivos.
59
+ - Registrar cada toque en la nota de `05-Contactos/`.
60
+
61
+ ## Tono
62
+
63
+ - Cálido y profesional, nunca servil ni agresivo.
64
+ - Confiado: estás ofreciendo valor, no mendigando.
65
+ - Humano: escribí como hablás, sin jerga corporativa vacía.
@@ -0,0 +1,66 @@
1
+ ---
2
+ name: cover-letter
3
+ description: "Write concise, confident cover letters and application messages tailored to the company and the person who will read them. Triggers: cover letter, carta de presentacion, mensaje de aplicacion, application message, carta de motivacion, why I'm a fit."
4
+ argument-hint: "[application-note | company + role]"
5
+ category: "career"
6
+ user-invocable: true
7
+ allowed-tools: Read, Glob, Grep, Write, Edit, WebFetch
8
+ ---
9
+
10
+ # Cover Letter — Mensaje de aplicación de élite
11
+
12
+ Escribís cover letters y mensajes de aplicación **concisos, seguros y custom** — que suenan a una persona que entendió el rol y la empresa, no a una plantilla. El objetivo: que el lector quiera leer el CV.
13
+
14
+ ## Inputs
15
+
16
+ - **Rol y empresa** + el job description.
17
+ - **Perfil base / maestro** (`01-Perfiles/`) para los logros y el ángulo.
18
+ - **Research** de `04-Empresas/` y del contacto en `05-Contactos/` (a quién le escribís cambia el tono).
19
+ - El **canal**: cover letter formal (campo del ATS), mensaje corto de LinkedIn/email, o párrafo de "why you" en un form.
20
+
21
+ ## Principios
22
+
23
+ - **Una página máximo; idealmente 150–250 palabras** para mensajes, 250–350 para carta formal.
24
+ - **El primer renglón gana o pierde.** Nada de "I am writing to apply for…". Abrí con un gancho específico: un logro relevante, un punto de conexión con la empresa, o por qué este rol te mueve.
25
+ - **Mostrá fit, no historia.** 1–2 logros que mapean directo a lo que piden, con número.
26
+ - **Específico de la empresa.** Una frase que demuestre que investigaste (producto, valor, problema que resuelven). Si la podés pegar en otra aplicación, no sirve.
27
+ - **Confiado, no arrogante; cálido, no servil.** Ni "would be honored", ni "I'm the best candidate".
28
+ - **CTA simple al final.** Disponibilidad / ganas de charlar, sin rogar.
29
+
30
+ ## Estructura (carta formal)
31
+
32
+ 1. **Hook** — gancho específico (logro o conexión real).
33
+ 2. **Fit** — 1–2 logros mapeados a must-haves del JD, con métrica.
34
+ 3. **Empresa** — por qué *esta* empresa/rol (research real).
35
+ 4. **Cierre** — CTA breve + gracias.
36
+
37
+ ## Estructura (mensaje corto / LinkedIn / email)
38
+
39
+ - Saludo personal (nombre del contacto si lo tenés).
40
+ - 1 oración: quién sos + el logro más relevante.
41
+ - 1 oración: por qué esta empresa/rol.
42
+ - 1 oración: CTA (charlar / te dejo el CV).
43
+
44
+ ## Proceso
45
+
46
+ 1. Leer JD + research. Identificar los 2 must-haves donde más brillás.
47
+ 2. Elegir formato según canal.
48
+ 3. Draftear. Después **cortar sin piedad** todo lo genérico.
49
+ 4. Generar 2 variantes de apertura si el usuario quiere elegir.
50
+ 5. Guardar en la nota de aplicación (`03-Aplicaciones/`, sección cover letter) o en `07-Recursos/` si es reutilizable.
51
+
52
+ ## Idioma
53
+
54
+ Inglés para roles internacionales; español si la empresa es hispanohablante. Espejá el idioma del JD ante la duda.
55
+
56
+ ## Anti-patrones (cortar siempre)
57
+
58
+ - "I am writing to express my interest in…" / "Por medio de la presente…".
59
+ - Recitar el CV en prosa.
60
+ - Adjetivos vacíos sin evidencia (passionate, hardworking, team player).
61
+ - Párrafos genéricos que sirven para cualquier empresa.
62
+ - Pedir disculpas o sonar desesperado.
63
+
64
+ ## Handoff
65
+
66
+ Pedí aprobación (approval) antes de guardar la carta en la nota de aplicación o en `07-Recursos/`. Cuando la cover letter está READY, el siguiente paso es `/cold-outreach` si hay un contacto al que escribirle directo.
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: cv-ats-export
3
+ description: "Export a Markdown CV to an ATS-compliant PDF (single column, selectable text, A4) using headless Chrome/Edge — no Obsidian or design tool needed. Triggers: exportar CV a PDF, generar PDF del CV, CV ATS PDF, convertir CV markdown a PDF, imprimir CV."
4
+ argument-hint: "[cv-name | all] [--workspace <path>]"
5
+ category: "career"
6
+ user-invocable: true
7
+ allowed-tools: Read, Glob, Grep, Bash, Write
8
+ ---
9
+
10
+ # CV ATS Export — Markdown → PDF ATS-compliant
11
+
12
+ Convertís un CV en Markdown a un **PDF que pasa filtros ATS**: una sola columna, texto seleccionable (no imagen), A4, tipografía limpia. Usa Chrome o Edge en modo headless — no requiere Obsidian, LaTeX ni herramienta de diseño.
13
+
14
+ El motor es `scripts/cv_export.py`. La primera vez, instalalo en el workspace (`tools/cv_export.py`) para que quede versionado con los CVs; o corrélo directo desde el skill.
15
+
16
+ ## Requisitos
17
+
18
+ - **Python 3** en el PATH.
19
+ - **Google Chrome o Microsoft Edge** instalado (el script autodetecta rutas estándar en Windows/macOS/Linux).
20
+ - CVs en Markdown dentro de `02-CVs/` del career workspace, con headers (`# Nombre`, `## Sección`), bullets y `---` como separadores.
21
+
22
+ ## Uso
23
+
24
+ ```bash
25
+ # Todos los CVs base (CV - *.md) del workspace
26
+ python scripts/cv_export.py
27
+
28
+ # Uno solo (con o sin .md)
29
+ python scripts/cv_export.py "CV - Acme - Backend"
30
+
31
+ # Workspace explícito
32
+ python scripts/cv_export.py --workspace ./career-workspace "CV - Acme - Backend"
33
+ ```
34
+
35
+ El script:
36
+ 1. Localiza el workspace (flag `--workspace`, env `CAREER_WORKSPACE`, o sube directorios buscando una carpeta `02-CVs`, o usa el cwd).
37
+ 2. Lee el `.md`, separa frontmatter, convierte el cuerpo a HTML con el CSS ATS embebido.
38
+ 3. Imprime a PDF con Chrome/Edge headless (`--headless=new --print-to-pdf`).
39
+ 4. Guarda en `02-CVs/exports/`. El nombre sale del frontmatter `archivo_pdf` si existe; si no, del nombre del `.md` (sin el prefijo `CV - `).
40
+
41
+ ## Markdown soportado
42
+
43
+ `# ## ### títulos` · `**negrita**` · `*itálica*` · `[texto](url)` · `- bullets` · `---` (regla horizontal). Un salto de línea simple dentro de un párrafo se renderiza como `<br>` (comportamiento tipo Obsidian).
44
+
45
+ ## Por qué este pipeline (y no Word/Canva)
46
+
47
+ - **Texto seleccionable garantizado** → el ATS puede parsearlo (a diferencia de un PDF exportado como imagen).
48
+ - **Una columna, sin tablas** → no se rompe el parseo.
49
+ - **Reproducible y versionable** → el CV vive en Markdown (diffeable, en git), el PDF es un artefacto generado.
50
+ - **Mismo estilo siempre** → el CSS ATS está embebido en el script.
51
+
52
+ ## Personalizar el estilo
53
+
54
+ El CSS ATS está en la constante `CSS` dentro de `scripts/cv_export.py` (tamaño de fuente, márgenes A4, estilos de h1/h2). Editá ahí si querés ajustar tipografía o espaciado — mantené una sola columna y texto real.
55
+
56
+ ## Reglas
57
+
58
+ - No metas tablas, columnas ni imágenes en el CV: rompen el parseo ATS.
59
+ - Verificá el PDF generado: que el texto sea seleccionable y entre en 1–2 páginas.
60
+ - No commitees PDFs con datos sensibles a un remoto sin confirmación.
61
+
62
+ ## Handoff
63
+
64
+ Confirmá (approval) antes de instalar `cv_export.py` en el workspace o sobrescribir PDFs. Cuando el PDF está READY y verificado, el siguiente paso suele ser `/cover-letter` para el mensaje de aplicación.