arkaos 2.15.0 → 2.16.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 (156) hide show
  1. package/VERSION +1 -1
  2. package/arka/SKILL.md +13 -0
  3. package/arka/skills/comfyui/SKILL.md +82 -0
  4. package/arka/skills/comfyui/references/squads.md +80 -0
  5. package/arka/skills/comfyui/references/workflows.md +435 -0
  6. package/arka/skills/forge/SKILL.md +35 -599
  7. package/arka/skills/forge/references/complexity-engine.md +77 -0
  8. package/arka/skills/forge/references/critic-synthesis.md +154 -0
  9. package/arka/skills/forge/references/workflows.md +408 -0
  10. package/arka/skills/fovory/SKILL.md +91 -0
  11. package/arka/skills/fovory/references/integration.md +186 -0
  12. package/arka/skills/fovory/references/workflows.md +209 -0
  13. package/arka/skills/platform-arka/SKILL.md +121 -0
  14. package/arka/skills/platform-arka/references/workflows.md +202 -0
  15. package/arka/skills/rothbard100/SKILL.md +113 -0
  16. package/arka/skills/rothbard100/references/squad.md +111 -0
  17. package/arka/skills/rothbard100/references/workflows.md +175 -0
  18. package/config/constitution.yaml +8 -0
  19. package/config/hooks/pre-compact.sh +11 -5
  20. package/config/hooks/session-start.sh +4 -5
  21. package/config/hooks/token-hygiene.sh +120 -0
  22. package/config/hooks/user-prompt-submit.sh +28 -10
  23. package/core/agents/__pycache__/schema.cpython-313.pyc +0 -0
  24. package/core/agents/schema.py +20 -1
  25. package/core/synapse/__pycache__/layers.cpython-313.pyc +0 -0
  26. package/core/synapse/layers.py +7 -0
  27. package/core/workflow/__pycache__/schema.cpython-313.pyc +0 -0
  28. package/core/workflow/schema.py +4 -1
  29. package/departments/brand/SKILL.md +13 -0
  30. package/departments/brand/agents/brand-director.yaml +1 -0
  31. package/departments/brand/agents/brand-strategist.yaml +1 -0
  32. package/departments/brand/agents/ux-designer.yaml +1 -0
  33. package/departments/brand/agents/visual-designer.yaml +1 -0
  34. package/departments/brand/workflows/identity.yaml +1 -0
  35. package/departments/brand/workflows/naming.yaml +1 -0
  36. package/departments/community/SKILL.md +13 -0
  37. package/departments/community/agents/community-manager.yaml +1 -0
  38. package/departments/community/agents/community-strategist.yaml +1 -0
  39. package/departments/community/agents/engagement-designer.yaml +1 -0
  40. package/departments/community/workflows/setup.yaml +1 -0
  41. package/departments/content/SKILL.md +13 -0
  42. package/departments/content/agents/content-strategist.yaml +1 -0
  43. package/departments/content/agents/repurpose-distributor.yaml +1 -0
  44. package/departments/content/agents/scriptwriter.yaml +1 -0
  45. package/departments/content/agents/viral-engineer.yaml +1 -0
  46. package/departments/content/workflows/viral.yaml +1 -0
  47. package/departments/dev/SKILL.md +13 -0
  48. package/departments/dev/agents/architect.yaml +1 -0
  49. package/departments/dev/agents/backend-dev.yaml +1 -0
  50. package/departments/dev/agents/cto.yaml +1 -0
  51. package/departments/dev/agents/dba.yaml +1 -0
  52. package/departments/dev/agents/devops-eng.yaml +1 -0
  53. package/departments/dev/agents/frontend-dev.yaml +1 -0
  54. package/departments/dev/agents/qa-eng.yaml +1 -0
  55. package/departments/dev/agents/research-assistant.yaml +1 -0
  56. package/departments/dev/agents/security-eng.yaml +1 -0
  57. package/departments/dev/agents/tech-lead.yaml +1 -0
  58. package/departments/dev/skills/onboard/SKILL.md +21 -353
  59. package/departments/dev/skills/onboard/references/mcp-config.md +284 -0
  60. package/departments/dev/skills/onboard/references/stack-detection.md +83 -0
  61. package/departments/dev/workflows/debug.yaml +1 -0
  62. package/departments/dev/workflows/feature.yaml +3 -0
  63. package/departments/dev/workflows/refactor.yaml +1 -0
  64. package/departments/ecom/SKILL.md +13 -0
  65. package/departments/ecom/agents/commerce-engineer.yaml +1 -0
  66. package/departments/ecom/agents/cro-specialist.yaml +1 -0
  67. package/departments/ecom/agents/ecom-director.yaml +1 -0
  68. package/departments/ecom/agents/retention-manager.yaml +1 -0
  69. package/departments/ecom/skills/ecommerce/SKILL.md +66 -0
  70. package/departments/ecom/skills/ecommerce/references/audit-flow.md +109 -0
  71. package/departments/ecom/skills/ecommerce/references/playbooks.md +141 -0
  72. package/departments/ecom/workflows/product-page.yaml +1 -0
  73. package/departments/finance/SKILL.md +13 -0
  74. package/departments/finance/agents/cfo.yaml +1 -0
  75. package/departments/finance/agents/financial-analyst.yaml +1 -0
  76. package/departments/finance/agents/investment-strategist.yaml +1 -0
  77. package/departments/finance/workflows/cashflow.yaml +1 -0
  78. package/departments/finance/workflows/model.yaml +1 -0
  79. package/departments/kb/SKILL.md +13 -0
  80. package/departments/kb/agents/data-collector.yaml +1 -0
  81. package/departments/kb/agents/knowledge-curator.yaml +1 -0
  82. package/departments/kb/agents/knowledge-director.yaml +1 -0
  83. package/departments/kb/agents/research-analyst.yaml +1 -0
  84. package/departments/kb/skills/knowledge/SKILL.md +94 -0
  85. package/departments/kb/skills/knowledge/references/async-processing.md +89 -0
  86. package/departments/kb/skills/knowledge/references/ingestion-pipeline.md +308 -0
  87. package/departments/kb/skills/knowledge/scripts/kb-check-capabilities.sh +143 -0
  88. package/departments/kb/skills/knowledge/scripts/kb-cleanup.sh +135 -0
  89. package/departments/kb/skills/knowledge/scripts/kb-queue.sh +156 -0
  90. package/departments/kb/skills/knowledge/scripts/kb-status.sh +195 -0
  91. package/departments/kb/skills/knowledge/scripts/kb-worker.sh +217 -0
  92. package/departments/kb/workflows/learn.yaml +1 -0
  93. package/departments/landing/SKILL.md +13 -0
  94. package/departments/landing/agents/affiliate-manager.yaml +1 -0
  95. package/departments/landing/agents/conversion-strategist.yaml +1 -0
  96. package/departments/landing/agents/cro-specialist.yaml +1 -0
  97. package/departments/landing/agents/sales-copywriter.yaml +1 -0
  98. package/departments/landing/workflows/launch.yaml +1 -0
  99. package/departments/landing/workflows/offer.yaml +3 -0
  100. package/departments/leadership/SKILL.md +13 -0
  101. package/departments/leadership/agents/culture-coach.yaml +1 -0
  102. package/departments/leadership/agents/hr-specialist.yaml +1 -0
  103. package/departments/leadership/agents/leadership-director.yaml +1 -0
  104. package/departments/leadership/workflows/team-build.yaml +1 -0
  105. package/departments/marketing/SKILL.md +13 -0
  106. package/departments/marketing/agents/content-marketer.yaml +1 -0
  107. package/departments/marketing/agents/marketing-director.yaml +1 -0
  108. package/departments/marketing/agents/paid-specialist.yaml +1 -0
  109. package/departments/marketing/agents/seo-specialist.yaml +1 -0
  110. package/departments/marketing/workflows/campaign.yaml +1 -0
  111. package/departments/marketing/workflows/social.yaml +1 -0
  112. package/departments/ops/SKILL.md +13 -0
  113. package/departments/ops/agents/automation-engineer.yaml +1 -0
  114. package/departments/ops/agents/doc-writer.yaml +1 -0
  115. package/departments/ops/agents/ops-lead.yaml +1 -0
  116. package/departments/ops/skills/operations/SKILL.md +83 -0
  117. package/departments/ops/skills/operations/references/calendar-email.md +73 -0
  118. package/departments/ops/skills/operations/references/clickup-ops.md +224 -0
  119. package/departments/ops/skills/update/SKILL.md +19 -45
  120. package/departments/ops/skills/update/references/sync-engine.md +93 -0
  121. package/departments/ops/skills/update/references/workflows.md +84 -0
  122. package/departments/ops/workflows/lean-audit.yaml +1 -0
  123. package/departments/org/SKILL.md +13 -0
  124. package/departments/org/agents/coo.yaml +1 -0
  125. package/departments/org/agents/org-designer.yaml +1 -0
  126. package/departments/org/agents/people-ops.yaml +1 -0
  127. package/departments/org/workflows/design.yaml +2 -0
  128. package/departments/pm/SKILL.md +13 -0
  129. package/departments/pm/agents/pm-director.yaml +1 -0
  130. package/departments/pm/agents/product-owner.yaml +1 -0
  131. package/departments/pm/agents/scrum-master.yaml +1 -0
  132. package/departments/quality/SKILL.md +13 -0
  133. package/departments/quality/agents/copy-director.yaml +1 -0
  134. package/departments/quality/agents/cqo.yaml +1 -0
  135. package/departments/quality/agents/tech-director.yaml +1 -0
  136. package/departments/saas/SKILL.md +13 -0
  137. package/departments/saas/agents/cs-manager.yaml +1 -0
  138. package/departments/saas/agents/growth-engineer.yaml +1 -0
  139. package/departments/saas/agents/metrics-analyst.yaml +1 -0
  140. package/departments/saas/agents/saas-strategist.yaml +1 -0
  141. package/departments/saas/workflows/metrics.yaml +1 -0
  142. package/departments/saas/workflows/validate.yaml +1 -0
  143. package/departments/sales/SKILL.md +13 -0
  144. package/departments/sales/agents/sales-closer.yaml +1 -0
  145. package/departments/sales/agents/sales-director.yaml +1 -0
  146. package/departments/sales/agents/sales-ops.yaml +1 -0
  147. package/departments/sales/workflows/pipeline.yaml +1 -0
  148. package/departments/strategy/SKILL.md +13 -0
  149. package/departments/strategy/agents/business-model-designer.yaml +1 -0
  150. package/departments/strategy/agents/market-analyst.yaml +1 -0
  151. package/departments/strategy/agents/strategy-director.yaml +1 -0
  152. package/departments/strategy/workflows/analysis.yaml +1 -0
  153. package/departments/strategy/workflows/swot.yaml +1 -0
  154. package/installer/index.js +19 -0
  155. package/package.json +1 -1
  156. package/pyproject.toml +1 -1
@@ -0,0 +1,217 @@
1
+ #!/bin/bash
2
+ # ============================================================================
3
+ # ARKA OS — KB Background Worker
4
+ # Handles one job: download audio → transcribe → mark ready
5
+ # Launched by kb-queue.sh via nohup
6
+ #
7
+ # Usage: kb-worker.sh <job-id> <url> <output-dir> <transcription-method>
8
+ # ============================================================================
9
+
10
+ JOB_ID="$1"
11
+ URL="$2"
12
+ OUTPUT_DIR="$3"
13
+ TRANSCRIPTION_METHOD="${4:-none}"
14
+
15
+ ARKA_DIR="$HOME/.arka-os"
16
+ JOBS_FILE="$ARKA_DIR/kb-jobs.json"
17
+ LOCK_FILE="$ARKA_DIR/kb-jobs.lock"
18
+ WORKER_LOG="$OUTPUT_DIR/worker.log"
19
+
20
+ # Redirect all output to worker log
21
+ exec > "$WORKER_LOG" 2>&1
22
+ echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] Worker started for job $JOB_ID"
23
+ echo " URL: $URL"
24
+ echo " Output: $OUTPUT_DIR"
25
+ echo " Transcription: $TRANSCRIPTION_METHOD"
26
+
27
+ # Load env for API keys
28
+ [ -f "$ARKA_DIR/.env" ] && source "$ARKA_DIR/.env"
29
+
30
+ # ─── State update helper ────────────────────────────────────────────────────
31
+
32
+ update_job() {
33
+ local field="$1"
34
+ local value="$2"
35
+ (
36
+ flock -x 200
37
+ if command -v jq &>/dev/null && [ -f "$JOBS_FILE" ]; then
38
+ local tmp="$JOBS_FILE.tmp.$$"
39
+ jq --arg id "$JOB_ID" --arg val "$value" \
40
+ '(.jobs[] | select(.id == $id)).'$field' = $val' \
41
+ "$JOBS_FILE" > "$tmp" && mv "$tmp" "$JOBS_FILE"
42
+ fi
43
+ ) 200>"$LOCK_FILE"
44
+ }
45
+
46
+ update_job_status() {
47
+ local status="$1"
48
+ local now
49
+ now=$(date -u +%Y-%m-%dT%H:%M:%SZ)
50
+ (
51
+ flock -x 200
52
+ if command -v jq &>/dev/null && [ -f "$JOBS_FILE" ]; then
53
+ local tmp="$JOBS_FILE.tmp.$$"
54
+ jq --arg id "$JOB_ID" --arg s "$status" --arg t "$now" \
55
+ '(.jobs[] | select(.id == $id)) |= (.status = $s | .updated_at = $t)' \
56
+ "$JOBS_FILE" > "$tmp" && mv "$tmp" "$JOBS_FILE"
57
+ fi
58
+ ) 200>"$LOCK_FILE"
59
+ echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] Status → $status"
60
+ }
61
+
62
+ fail_job() {
63
+ local error_msg="$1"
64
+ (
65
+ flock -x 200
66
+ if command -v jq &>/dev/null && [ -f "$JOBS_FILE" ]; then
67
+ local tmp="$JOBS_FILE.tmp.$$"
68
+ local now
69
+ now=$(date -u +%Y-%m-%dT%H:%M:%SZ)
70
+ jq --arg id "$JOB_ID" --arg err "$error_msg" --arg t "$now" \
71
+ '(.jobs[] | select(.id == $id)) |= (.status = "failed" | .error = $err | .updated_at = $t)' \
72
+ "$JOBS_FILE" > "$tmp" && mv "$tmp" "$JOBS_FILE"
73
+ fi
74
+ ) 200>"$LOCK_FILE"
75
+ echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] FAILED: $error_msg"
76
+ exit 1
77
+ }
78
+
79
+ # ─── Step 1: Download ───────────────────────────────────────────────────────
80
+
81
+ update_job_status "downloading"
82
+
83
+ if ! command -v yt-dlp &>/dev/null; then
84
+ fail_job "yt-dlp not found. Install with: brew install yt-dlp"
85
+ fi
86
+
87
+ echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] Downloading audio..."
88
+
89
+ # Download audio + metadata
90
+ yt-dlp -x --audio-format wav --audio-quality 0 \
91
+ --write-info-json \
92
+ -o "$OUTPUT_DIR/audio.%(ext)s" \
93
+ "$URL" > "$OUTPUT_DIR/download.log" 2>&1
94
+
95
+ if [ $? -ne 0 ]; then
96
+ fail_job "yt-dlp download failed. Check $OUTPUT_DIR/download.log"
97
+ fi
98
+
99
+ # Find the audio file (yt-dlp may produce different extensions during conversion)
100
+ AUDIO_FILE="$OUTPUT_DIR/audio.wav"
101
+ if [ ! -f "$AUDIO_FILE" ]; then
102
+ # Try to find any audio file produced
103
+ AUDIO_FILE=$(find "$OUTPUT_DIR" -name "audio.*" -not -name "*.json" -not -name "*.log" | head -1)
104
+ if [ -z "$AUDIO_FILE" ] || [ ! -f "$AUDIO_FILE" ]; then
105
+ fail_job "Audio file not found after download"
106
+ fi
107
+ fi
108
+
109
+ # Extract metadata from yt-dlp JSON
110
+ INFO_JSON=$(find "$OUTPUT_DIR" -name "*.info.json" | head -1)
111
+ if [ -n "$INFO_JSON" ] && [ -f "$INFO_JSON" ]; then
112
+ jq '{title: .title, duration: .duration, duration_string: .duration_string, channel: .channel, upload_date: .upload_date, thumbnail: .thumbnail, description: (.description // "" | .[0:500])}' \
113
+ "$INFO_JSON" > "$OUTPUT_DIR/metadata.json" 2>/dev/null || true
114
+
115
+ # Update job with title
116
+ TITLE=$(jq -r '.title // "Unknown"' "$OUTPUT_DIR/metadata.json" 2>/dev/null || echo "Unknown")
117
+ update_job "title" "$TITLE"
118
+
119
+ echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] Title: $TITLE"
120
+ fi
121
+
122
+ echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] Download complete: $AUDIO_FILE"
123
+
124
+ # ─── Step 2: Transcribe ─────────────────────────────────────────────────────
125
+
126
+ update_job_status "transcribing"
127
+
128
+ case "$TRANSCRIPTION_METHOD" in
129
+ local_whisper)
130
+ echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] Transcribing with local Whisper..."
131
+ whisper "$AUDIO_FILE" \
132
+ --model medium \
133
+ --language auto \
134
+ --output_format txt \
135
+ --output_dir "$OUTPUT_DIR" \
136
+ > "$OUTPUT_DIR/transcribe.log" 2>&1
137
+
138
+ if [ $? -ne 0 ]; then
139
+ fail_job "Whisper transcription failed. Check $OUTPUT_DIR/transcribe.log"
140
+ fi
141
+
142
+ # Whisper outputs as <filename>.txt — find it
143
+ TRANSCRIPT=$(find "$OUTPUT_DIR" -name "*.txt" -not -name "transcribe.log" -not -name "download.log" -not -name "worker.log" | head -1)
144
+ if [ -n "$TRANSCRIPT" ] && [ -f "$TRANSCRIPT" ]; then
145
+ cp "$TRANSCRIPT" "$OUTPUT_DIR/audio.txt" 2>/dev/null || true
146
+ fi
147
+ ;;
148
+
149
+ openai_api)
150
+ echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] Transcribing with OpenAI Whisper API..."
151
+
152
+ if [ -z "${OPENAI_API_KEY:-}" ]; then
153
+ fail_job "OPENAI_API_KEY not set. Run: bash env-setup.sh"
154
+ fi
155
+
156
+ # Check file size — OpenAI limit is 25MB
157
+ FILE_SIZE=$(stat -f%z "$AUDIO_FILE" 2>/dev/null || stat -c%s "$AUDIO_FILE" 2>/dev/null || echo "0")
158
+ if [ "$FILE_SIZE" -gt 26214400 ]; then
159
+ echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] File too large for API ($FILE_SIZE bytes). Compressing..."
160
+ if command -v ffmpeg &>/dev/null; then
161
+ ffmpeg -i "$AUDIO_FILE" -ac 1 -ar 16000 -b:a 32k "$OUTPUT_DIR/audio_compressed.mp3" \
162
+ >> "$OUTPUT_DIR/transcribe.log" 2>&1
163
+ AUDIO_FILE="$OUTPUT_DIR/audio_compressed.mp3"
164
+ else
165
+ fail_job "Audio file too large and ffmpeg not available for compression"
166
+ fi
167
+ fi
168
+
169
+ # Call OpenAI API
170
+ RESPONSE=$(curl -s -X POST "https://api.openai.com/v1/audio/transcriptions" \
171
+ -H "Authorization: Bearer $OPENAI_API_KEY" \
172
+ -F "file=@$AUDIO_FILE" \
173
+ -F "model=whisper-1" \
174
+ -F "response_format=text" \
175
+ 2>> "$OUTPUT_DIR/transcribe.log")
176
+
177
+ if [ -z "$RESPONSE" ]; then
178
+ fail_job "OpenAI API returned empty response. Check $OUTPUT_DIR/transcribe.log"
179
+ fi
180
+
181
+ # Check for API error
182
+ if echo "$RESPONSE" | jq -e '.error' &>/dev/null 2>&1; then
183
+ ERROR_MSG=$(echo "$RESPONSE" | jq -r '.error.message // "Unknown API error"')
184
+ fail_job "OpenAI API error: $ERROR_MSG"
185
+ fi
186
+
187
+ echo "$RESPONSE" > "$OUTPUT_DIR/audio.txt"
188
+ ;;
189
+
190
+ none)
191
+ echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] No transcription method available. Download-only mode."
192
+ echo "[Download-only mode — no transcription available]" > "$OUTPUT_DIR/audio.txt"
193
+ update_job_status "ready"
194
+ echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] Worker finished (download-only)"
195
+ exit 0
196
+ ;;
197
+
198
+ *)
199
+ fail_job "Unknown transcription method: $TRANSCRIPTION_METHOD"
200
+ ;;
201
+ esac
202
+
203
+ # Verify transcript exists
204
+ if [ ! -f "$OUTPUT_DIR/audio.txt" ] || [ ! -s "$OUTPUT_DIR/audio.txt" ]; then
205
+ fail_job "Transcription produced no output"
206
+ fi
207
+
208
+ WORD_COUNT=$(wc -w < "$OUTPUT_DIR/audio.txt" | tr -d ' ')
209
+ echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] Transcription complete: $WORD_COUNT words"
210
+
211
+ # Update word count in job
212
+ update_job "word_count" "$WORD_COUNT"
213
+
214
+ # ─── Done — mark ready for processing ───────────────────────────────────────
215
+
216
+ update_job_status "ready"
217
+ echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] Worker finished. Job $JOB_ID is ready for processing."
@@ -41,6 +41,7 @@ phases:
41
41
  type: auto
42
42
  - id: quality-gate
43
43
  name: Quality Gate
44
+ model_override: opus
44
45
  agents:
45
46
  - agent_id: cqo-marta
46
47
  role: Orchestrate
@@ -63,3 +63,16 @@ allowed-tools: [Read, Write, Edit, Bash, Grep, Glob, Agent, WebFetch, WebSearch]
63
63
  | ResearchXL | Peep Laja (CXL) | CRO methodology |
64
64
  | 6 Principles of Persuasion | Robert Cialdini | Persuasion elements |
65
65
  | StoryBrand SB7 | Donald Miller | Messaging framework |
66
+
67
+ ## Model Selection
68
+
69
+ When dispatching subagent work via the Task tool, include the `model` parameter from the target agent's YAML `model:` field:
70
+
71
+ - Agent YAMLs at `departments/*/agents/*.yaml` have `model: opus | sonnet | haiku`
72
+ - Quality Gate dispatch (Marta/Eduardo/Francisca) ALWAYS uses `model: opus` — NON-NEGOTIABLE
73
+ - Default to `sonnet` if the agent YAML has no `model` field
74
+ - Mechanical tasks (commit messages, routing, keyword extraction) use `model: haiku`
75
+
76
+ Example Task tool call:
77
+
78
+ Task(description="...", subagent_type="general-purpose", model="sonnet", prompt="...")
@@ -3,6 +3,7 @@ name: Sergio
3
3
  role: Affiliate & Partnerships Manager
4
4
  department: landing
5
5
  tier: 2
6
+ model: sonnet
6
7
 
7
8
  behavioral_dna:
8
9
  disc:
@@ -3,6 +3,7 @@ name: Ines
3
3
  role: Conversion Strategist
4
4
  department: landing
5
5
  tier: 1
6
+ model: sonnet
6
7
 
7
8
  behavioral_dna:
8
9
  disc:
@@ -3,6 +3,7 @@ name: Hugo
3
3
  role: CRO Specialist
4
4
  department: landing
5
5
  tier: 2
6
+ model: sonnet
6
7
 
7
8
  behavioral_dna:
8
9
  disc:
@@ -3,6 +3,7 @@ name: Teresa
3
3
  role: Sales Copywriter
4
4
  department: landing
5
5
  tier: 2
6
+ model: sonnet
6
7
 
7
8
  behavioral_dna:
8
9
  disc:
@@ -47,6 +47,7 @@ phases:
47
47
  type: auto
48
48
  - id: quality-gate
49
49
  name: Quality Gate
50
+ model_override: opus
50
51
  agents:
51
52
  - agent_id: cqo-marta
52
53
  role: Orchestrate
@@ -33,6 +33,7 @@ phases:
33
33
 
34
34
  - id: offer-build
35
35
  name: Offer Architecture
36
+ model_override: opus
36
37
  description: Build the Grand Slam Offer using Hormozi Value Equation
37
38
  agents:
38
39
  - agent_id: conversion-strategist-ines
@@ -57,6 +58,7 @@ phases:
57
58
 
58
59
  - id: funnel
59
60
  name: Funnel Architecture
61
+ model_override: opus
60
62
  description: Design the Value Ladder and funnel flow
61
63
  agents:
62
64
  - agent_id: conversion-strategist-ines
@@ -70,6 +72,7 @@ phases:
70
72
 
71
73
  - id: quality-gate
72
74
  name: Quality Gate
75
+ model_override: opus
73
76
  description: Review offer, copy, and funnel quality
74
77
  agents:
75
78
  - agent_id: cqo-marta
@@ -33,3 +33,16 @@ allowed-tools: [Read, Write, Edit, Bash, Grep, Glob, Agent, WebFetch, WebSearch]
33
33
  | **Paula** | 2 | S+I | Performance coaching, feedback, conflict mediation |
34
34
 
35
35
  ## Frameworks: Five Dysfunctions (Lencioni), Radical Candor (Scott), OKRs (Doerr), Netflix Culture (Hastings), Who Method (hiring), DISC Adaptation, Keeper Test
36
+
37
+ ## Model Selection
38
+
39
+ When dispatching subagent work via the Task tool, include the `model` parameter from the target agent's YAML `model:` field:
40
+
41
+ - Agent YAMLs at `departments/*/agents/*.yaml` have `model: opus | sonnet | haiku`
42
+ - Quality Gate dispatch (Marta/Eduardo/Francisca) ALWAYS uses `model: opus` — NON-NEGOTIABLE
43
+ - Default to `sonnet` if the agent YAML has no `model` field
44
+ - Mechanical tasks (commit messages, routing, keyword extraction) use `model: haiku`
45
+
46
+ Example Task tool call:
47
+
48
+ Task(description="...", subagent_type="general-purpose", model="sonnet", prompt="...")
@@ -3,6 +3,7 @@ name: Paula
3
3
  role: Culture & Performance Coach
4
4
  department: leadership
5
5
  tier: 2
6
+ model: sonnet
6
7
 
7
8
  behavioral_dna:
8
9
  disc:
@@ -3,6 +3,7 @@ name: Diana R.
3
3
  role: HR & Talent Specialist
4
4
  department: leadership
5
5
  tier: 2
6
+ model: sonnet
6
7
 
7
8
  behavioral_dna:
8
9
  disc:
@@ -3,6 +3,7 @@ name: Rodrigo
3
3
  role: Leadership & People Director
4
4
  department: leadership
5
5
  tier: 1
6
+ model: sonnet
6
7
 
7
8
  behavioral_dna:
8
9
  disc:
@@ -33,6 +33,7 @@ phases:
33
33
  description: User approves improvement plan
34
34
  - id: quality-gate
35
35
  name: Quality Gate
36
+ model_override: opus
36
37
  agents:
37
38
  - agent_id: cqo-marta
38
39
  role: Orchestrate
@@ -59,3 +59,16 @@ allowed-tools: [Read, Write, Edit, Bash, Grep, Glob, Agent, WebFetch, WebSearch]
59
59
  4. Growth loop identified — Strategy has sustainable loop, not just funnel?
60
60
  5. Unit economics viable — CAC recoverable? Channel scalable?
61
61
  6. Brand consistency — Aligned with brand voice and sacred lexicon?
62
+
63
+ ## Model Selection
64
+
65
+ When dispatching subagent work via the Task tool, include the `model` parameter from the target agent's YAML `model:` field:
66
+
67
+ - Agent YAMLs at `departments/*/agents/*.yaml` have `model: opus | sonnet | haiku`
68
+ - Quality Gate dispatch (Marta/Eduardo/Francisca) ALWAYS uses `model: opus` — NON-NEGOTIABLE
69
+ - Default to `sonnet` if the agent YAML has no `model` field
70
+ - Mechanical tasks (commit messages, routing, keyword extraction) use `model: haiku`
71
+
72
+ Example Task tool call:
73
+
74
+ Task(description="...", subagent_type="general-purpose", model="sonnet", prompt="...")
@@ -3,6 +3,7 @@ name: Mariana
3
3
  role: Content Marketing Specialist
4
4
  department: marketing
5
5
  tier: 2
6
+ model: sonnet
6
7
 
7
8
  behavioral_dna:
8
9
  disc:
@@ -3,6 +3,7 @@ name: Luna
3
3
  role: Marketing Director
4
4
  department: marketing
5
5
  tier: 1
6
+ model: sonnet
6
7
 
7
8
  behavioral_dna:
8
9
  disc:
@@ -3,6 +3,7 @@ name: Pedro
3
3
  role: Performance Marketing Specialist
4
4
  department: marketing
5
5
  tier: 2
6
+ model: sonnet
6
7
 
7
8
  behavioral_dna:
8
9
  disc:
@@ -3,6 +3,7 @@ name: Ana
3
3
  role: SEO Specialist
4
4
  department: marketing
5
5
  tier: 2
6
+ model: sonnet
6
7
 
7
8
  behavioral_dna:
8
9
  disc:
@@ -83,6 +83,7 @@ phases:
83
83
 
84
84
  - id: quality-gate
85
85
  name: Quality Gate
86
+ model_override: opus
86
87
  description: Mandatory quality review before delivery
87
88
  agents:
88
89
  - agent_id: cqo-marta
@@ -30,6 +30,7 @@ phases:
30
30
 
31
31
  - id: quality-gate
32
32
  name: Quality Gate
33
+ model_override: opus
33
34
  description: Review content quality
34
35
  agents:
35
36
  - agent_id: cqo-marta
@@ -35,3 +35,16 @@ allowed-tools: [Read, Write, Edit, Bash, Grep, Glob, Agent, WebFetch, WebSearch]
35
35
  | **Tomas A.** | 2 | D+C | n8n, Zapier, Make, API integrations |
36
36
 
37
37
  ## Frameworks: Lean/TPS (Ohno), Theory of Constraints (Goldratt), GTD (Allen), PARA (Forte), PDCA (Deming), EOS (Wickman), Automation Patterns, n8n/Zapier/Make
38
+
39
+ ## Model Selection
40
+
41
+ When dispatching subagent work via the Task tool, include the `model` parameter from the target agent's YAML `model:` field:
42
+
43
+ - Agent YAMLs at `departments/*/agents/*.yaml` have `model: opus | sonnet | haiku`
44
+ - Quality Gate dispatch (Marta/Eduardo/Francisca) ALWAYS uses `model: opus` — NON-NEGOTIABLE
45
+ - Default to `sonnet` if the agent YAML has no `model` field
46
+ - Mechanical tasks (commit messages, routing, keyword extraction) use `model: haiku`
47
+
48
+ Example Task tool call:
49
+
50
+ Task(description="...", subagent_type="general-purpose", model="sonnet", prompt="...")
@@ -3,6 +3,7 @@ name: Tomas A.
3
3
  role: Automation Engineer
4
4
  department: ops
5
5
  tier: 2
6
+ model: sonnet
6
7
 
7
8
  behavioral_dna:
8
9
  disc:
@@ -3,6 +3,7 @@ name: Isabel
3
3
  role: Documentation Writer
4
4
  department: ops
5
5
  tier: 3
6
+ model: haiku
6
7
 
7
8
  behavioral_dna:
8
9
  disc:
@@ -3,6 +3,7 @@ name: Daniel
3
3
  role: Operations Lead
4
4
  department: ops
5
5
  tier: 1
6
+ model: sonnet
6
7
 
7
8
  behavioral_dna:
8
9
  disc:
@@ -0,0 +1,83 @@
1
+ ---
2
+ name: arka-operations
3
+ description: >
4
+ Operations department. Task management via ClickUp, email drafting via Gmail, calendar
5
+ management via Google Calendar, meeting scheduling and agenda preparation, invoice generation,
6
+ process automation with SOP creation, operational reports, client onboarding checklists,
7
+ daily standups, and multi-platform messaging (Slack, Discord, WhatsApp, Teams). Manages
8
+ notification channels and broadcasts. All output saved to Obsidian vault.
9
+ Use when user says "ops", "tasks", "email", "calendar", "automate", "invoice", "meeting",
10
+ "workflow", "process", "schedule", "channel", "notify", "broadcast", "onboard client",
11
+ "standup", "slack", "discord", "whatsapp", "teams", or any operational task.
12
+ ---
13
+
14
+ # Operations Department — ARKA OS
15
+
16
+ Company operations, automations, and routine process management.
17
+
18
+ ## Squad (Compact)
19
+
20
+ - **Sofia (COO)** — Orchestrator, planning, execution, delivery
21
+ - **Lucas (Analyst)** — Challenge & research, best practices
22
+ - **Marco (CTO) / Helena (CFO)** — Supervision (tech / financial)
23
+ - **Marta (CQO) + Eduardo + Francisca** — Quality Gate (absolute veto)
24
+
25
+ ## Universal Workflow (7 phases, NON-NEGOTIABLE)
26
+
27
+ 0. BRIEF (Sofia) — clarify, check ClickUp/Calendar, save to Obsidian, gate
28
+ 1. CHALLENGE & RESEARCH (Lucas) — best practices, gate
29
+ 2. PLANNING (Sofia) — steps, TaskCreate, success criteria
30
+ 3. EXECUTION (Sofia) — ClickUp/Gmail/Calendar, one-at-a-time validation
31
+ 4. SELF-CRITIQUE (Sofia)
32
+ 5. SUPERVISION (Marco or Helena) — gate
33
+ 6. QUALITY GATE (Marta → Eduardo + Francisca) — APPROVED/REJECTED. No output without APPROVED
34
+ 7. DELIVERY (Sofia) — Obsidian save, confirm
35
+
36
+ Every phase transition announced to the user.
37
+
38
+ ## Commands
39
+
40
+ | Command | Description |
41
+ |---------|-------------|
42
+ | `/ops tasks` | View and manage tasks (ClickUp MCP) |
43
+ | `/ops email <type>` | Send/draft emails (Gmail MCP) |
44
+ | `/ops calendar` | View schedule (Google Calendar MCP) |
45
+ | `/ops meeting <topic>` | Schedule and prepare meeting |
46
+ | `/ops invoice <client>` | Generate invoice (InvoiceExpress MCP) |
47
+ | `/ops automate <process>` | Create automation for routine process |
48
+ | `/ops report <type>` | Operational reports (weekly, monthly) |
49
+ | `/ops onboard-client <name>` | New client onboarding checklist |
50
+ | `/ops standup` | Daily standup summary |
51
+ | `/ops channel add <platform> <channel-id>` | Add messaging channel |
52
+ | `/ops channel list` | List configured messaging channels |
53
+ | `/ops channel remove <platform>` | Remove a messaging channel |
54
+ | `/ops notify <message>` | Send to default notification channel |
55
+ | `/ops broadcast <message>` | Send to all configured channels |
56
+
57
+ ## Obsidian Output
58
+
59
+ Vault root: `/Users/andreagroferreira/Documents/Personal`
60
+
61
+ | Content | Path |
62
+ |---------|------|
63
+ | Processes | `WizardingCode/Operations/Processes/<name>.md` |
64
+ | Automations | `WizardingCode/Operations/Automations/<name>.md` |
65
+ | Client onboarding | `WizardingCode/Operations/Clients/<name>/Onboarding.md` |
66
+ | Meetings | `WizardingCode/Operations/Meetings/<date> <topic>.md` |
67
+ | Reports | `WizardingCode/Operations/Reports/<date> <type>.md` |
68
+
69
+ Frontmatter: `type`, `department: operations`, `title`, `date_created`, `tags[]`. Wikilinks `[[]]`, kebab-case tags.
70
+
71
+ ## MCP Integrations
72
+
73
+ ClickUp, Gmail, Google Calendar, InvoiceExpress, Google Drive, Slack, Discord, WhatsApp, Teams.
74
+
75
+ ## References
76
+
77
+ Read only when executing the relevant command:
78
+
79
+ - `references/clickup-ops.md` — ClickUp task workflows: `/ops tasks`, `/ops onboard-client`, `/ops standup`, `/ops automate`, channel management (`add`/`list`/`remove`/`notify`/`broadcast`).
80
+ - `references/calendar-email.md` — Gmail + Google Calendar flows: `/ops meeting`, `/ops email`, `/ops calendar`.
81
+
82
+ ---
83
+ *All output: `WizardingCode/Operations/` — Part of the [[WizardingCode MOC]]*
@@ -0,0 +1,73 @@
1
+ # arka-operations — Calendar & Email
2
+
3
+ Referenced from SKILL.md. Read only when needed.
4
+
5
+ ## /ops meeting <topic>
6
+
7
+ **Step 1: Check Calendar**
8
+ - Use Google Calendar MCP to check availability for the next 3 business days
9
+ - Identify possible time slots
10
+
11
+ **Step 2: Prepare Agenda**
12
+ - Ask user for meeting participants, duration, and key discussion points
13
+ - Draft a structured agenda with time allocations per topic
14
+
15
+ **Step 3: Create Meeting Note in Obsidian**
16
+
17
+ **File:** `WizardingCode/Operations/Meetings/<YYYY-MM-DD> <topic>.md`
18
+ ```markdown
19
+ ---
20
+ type: meeting
21
+ department: operations
22
+ title: "<topic>"
23
+ date_created: <YYYY-MM-DD>
24
+ participants:
25
+ - "<name>"
26
+ tags:
27
+ - "meeting"
28
+ - "<topic-kebab-case>"
29
+ ---
30
+
31
+ # <topic>
32
+
33
+ ## Agenda
34
+ 1. [Topic] — [time allocation]
35
+ 2. [Topic] — [time allocation]
36
+
37
+ ## Notes
38
+ [To be filled during/after meeting]
39
+
40
+ ## Action Items
41
+ - [ ] [Action] — Owner: [name] — Due: [date]
42
+
43
+ ## Decisions Made
44
+ - [Decision and rationale]
45
+
46
+ ---
47
+ *Part of the [[WizardingCode MOC]]*
48
+ ```
49
+
50
+ **Step 4: Report**
51
+ ```
52
+ ═══ ARKA OPS — Meeting Prepared ═══
53
+ Topic: <topic>
54
+ Date: <suggested date/time>
55
+ Participants: <list>
56
+ Obsidian: WizardingCode/Operations/Meetings/<date> <topic>.md
57
+ ════════════════════════════════════
58
+ ```
59
+
60
+ ## /ops email <type>
61
+
62
+ Use Gmail MCP to draft/send emails. Common types: welcome, kickoff, follow-up, invoice-reminder, proposal.
63
+
64
+ Flow:
65
+ 1. Clarify type, recipient(s), subject, context
66
+ 2. Draft via Gmail MCP (professional tone, Eduardo-reviewed copy)
67
+ 3. Self-critique: accuracy, tone, errors
68
+ 4. Quality Gate review before send
69
+ 5. Send or save as draft per user preference
70
+
71
+ ## /ops calendar
72
+
73
+ Use Google Calendar MCP to display schedule. Default view: today + next 3 business days. Highlight conflicts and free slots.