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.
- package/VERSION +1 -1
- package/arka/SKILL.md +13 -0
- package/arka/skills/comfyui/SKILL.md +82 -0
- package/arka/skills/comfyui/references/squads.md +80 -0
- package/arka/skills/comfyui/references/workflows.md +435 -0
- package/arka/skills/forge/SKILL.md +35 -599
- package/arka/skills/forge/references/complexity-engine.md +77 -0
- package/arka/skills/forge/references/critic-synthesis.md +154 -0
- package/arka/skills/forge/references/workflows.md +408 -0
- package/arka/skills/fovory/SKILL.md +91 -0
- package/arka/skills/fovory/references/integration.md +186 -0
- package/arka/skills/fovory/references/workflows.md +209 -0
- package/arka/skills/platform-arka/SKILL.md +121 -0
- package/arka/skills/platform-arka/references/workflows.md +202 -0
- package/arka/skills/rothbard100/SKILL.md +113 -0
- package/arka/skills/rothbard100/references/squad.md +111 -0
- package/arka/skills/rothbard100/references/workflows.md +175 -0
- package/config/constitution.yaml +8 -0
- package/config/hooks/pre-compact.sh +11 -5
- package/config/hooks/session-start.sh +4 -5
- package/config/hooks/token-hygiene.sh +120 -0
- package/config/hooks/user-prompt-submit.sh +28 -10
- package/core/agents/__pycache__/schema.cpython-313.pyc +0 -0
- package/core/agents/schema.py +20 -1
- package/core/synapse/__pycache__/layers.cpython-313.pyc +0 -0
- package/core/synapse/layers.py +7 -0
- package/core/workflow/__pycache__/schema.cpython-313.pyc +0 -0
- package/core/workflow/schema.py +4 -1
- package/departments/brand/SKILL.md +13 -0
- package/departments/brand/agents/brand-director.yaml +1 -0
- package/departments/brand/agents/brand-strategist.yaml +1 -0
- package/departments/brand/agents/ux-designer.yaml +1 -0
- package/departments/brand/agents/visual-designer.yaml +1 -0
- package/departments/brand/workflows/identity.yaml +1 -0
- package/departments/brand/workflows/naming.yaml +1 -0
- package/departments/community/SKILL.md +13 -0
- package/departments/community/agents/community-manager.yaml +1 -0
- package/departments/community/agents/community-strategist.yaml +1 -0
- package/departments/community/agents/engagement-designer.yaml +1 -0
- package/departments/community/workflows/setup.yaml +1 -0
- package/departments/content/SKILL.md +13 -0
- package/departments/content/agents/content-strategist.yaml +1 -0
- package/departments/content/agents/repurpose-distributor.yaml +1 -0
- package/departments/content/agents/scriptwriter.yaml +1 -0
- package/departments/content/agents/viral-engineer.yaml +1 -0
- package/departments/content/workflows/viral.yaml +1 -0
- package/departments/dev/SKILL.md +13 -0
- package/departments/dev/agents/architect.yaml +1 -0
- package/departments/dev/agents/backend-dev.yaml +1 -0
- package/departments/dev/agents/cto.yaml +1 -0
- package/departments/dev/agents/dba.yaml +1 -0
- package/departments/dev/agents/devops-eng.yaml +1 -0
- package/departments/dev/agents/frontend-dev.yaml +1 -0
- package/departments/dev/agents/qa-eng.yaml +1 -0
- package/departments/dev/agents/research-assistant.yaml +1 -0
- package/departments/dev/agents/security-eng.yaml +1 -0
- package/departments/dev/agents/tech-lead.yaml +1 -0
- package/departments/dev/skills/onboard/SKILL.md +21 -353
- package/departments/dev/skills/onboard/references/mcp-config.md +284 -0
- package/departments/dev/skills/onboard/references/stack-detection.md +83 -0
- package/departments/dev/workflows/debug.yaml +1 -0
- package/departments/dev/workflows/feature.yaml +3 -0
- package/departments/dev/workflows/refactor.yaml +1 -0
- package/departments/ecom/SKILL.md +13 -0
- package/departments/ecom/agents/commerce-engineer.yaml +1 -0
- package/departments/ecom/agents/cro-specialist.yaml +1 -0
- package/departments/ecom/agents/ecom-director.yaml +1 -0
- package/departments/ecom/agents/retention-manager.yaml +1 -0
- package/departments/ecom/skills/ecommerce/SKILL.md +66 -0
- package/departments/ecom/skills/ecommerce/references/audit-flow.md +109 -0
- package/departments/ecom/skills/ecommerce/references/playbooks.md +141 -0
- package/departments/ecom/workflows/product-page.yaml +1 -0
- package/departments/finance/SKILL.md +13 -0
- package/departments/finance/agents/cfo.yaml +1 -0
- package/departments/finance/agents/financial-analyst.yaml +1 -0
- package/departments/finance/agents/investment-strategist.yaml +1 -0
- package/departments/finance/workflows/cashflow.yaml +1 -0
- package/departments/finance/workflows/model.yaml +1 -0
- package/departments/kb/SKILL.md +13 -0
- package/departments/kb/agents/data-collector.yaml +1 -0
- package/departments/kb/agents/knowledge-curator.yaml +1 -0
- package/departments/kb/agents/knowledge-director.yaml +1 -0
- package/departments/kb/agents/research-analyst.yaml +1 -0
- package/departments/kb/skills/knowledge/SKILL.md +94 -0
- package/departments/kb/skills/knowledge/references/async-processing.md +89 -0
- package/departments/kb/skills/knowledge/references/ingestion-pipeline.md +308 -0
- package/departments/kb/skills/knowledge/scripts/kb-check-capabilities.sh +143 -0
- package/departments/kb/skills/knowledge/scripts/kb-cleanup.sh +135 -0
- package/departments/kb/skills/knowledge/scripts/kb-queue.sh +156 -0
- package/departments/kb/skills/knowledge/scripts/kb-status.sh +195 -0
- package/departments/kb/skills/knowledge/scripts/kb-worker.sh +217 -0
- package/departments/kb/workflows/learn.yaml +1 -0
- package/departments/landing/SKILL.md +13 -0
- package/departments/landing/agents/affiliate-manager.yaml +1 -0
- package/departments/landing/agents/conversion-strategist.yaml +1 -0
- package/departments/landing/agents/cro-specialist.yaml +1 -0
- package/departments/landing/agents/sales-copywriter.yaml +1 -0
- package/departments/landing/workflows/launch.yaml +1 -0
- package/departments/landing/workflows/offer.yaml +3 -0
- package/departments/leadership/SKILL.md +13 -0
- package/departments/leadership/agents/culture-coach.yaml +1 -0
- package/departments/leadership/agents/hr-specialist.yaml +1 -0
- package/departments/leadership/agents/leadership-director.yaml +1 -0
- package/departments/leadership/workflows/team-build.yaml +1 -0
- package/departments/marketing/SKILL.md +13 -0
- package/departments/marketing/agents/content-marketer.yaml +1 -0
- package/departments/marketing/agents/marketing-director.yaml +1 -0
- package/departments/marketing/agents/paid-specialist.yaml +1 -0
- package/departments/marketing/agents/seo-specialist.yaml +1 -0
- package/departments/marketing/workflows/campaign.yaml +1 -0
- package/departments/marketing/workflows/social.yaml +1 -0
- package/departments/ops/SKILL.md +13 -0
- package/departments/ops/agents/automation-engineer.yaml +1 -0
- package/departments/ops/agents/doc-writer.yaml +1 -0
- package/departments/ops/agents/ops-lead.yaml +1 -0
- package/departments/ops/skills/operations/SKILL.md +83 -0
- package/departments/ops/skills/operations/references/calendar-email.md +73 -0
- package/departments/ops/skills/operations/references/clickup-ops.md +224 -0
- package/departments/ops/skills/update/SKILL.md +19 -45
- package/departments/ops/skills/update/references/sync-engine.md +93 -0
- package/departments/ops/skills/update/references/workflows.md +84 -0
- package/departments/ops/workflows/lean-audit.yaml +1 -0
- package/departments/org/SKILL.md +13 -0
- package/departments/org/agents/coo.yaml +1 -0
- package/departments/org/agents/org-designer.yaml +1 -0
- package/departments/org/agents/people-ops.yaml +1 -0
- package/departments/org/workflows/design.yaml +2 -0
- package/departments/pm/SKILL.md +13 -0
- package/departments/pm/agents/pm-director.yaml +1 -0
- package/departments/pm/agents/product-owner.yaml +1 -0
- package/departments/pm/agents/scrum-master.yaml +1 -0
- package/departments/quality/SKILL.md +13 -0
- package/departments/quality/agents/copy-director.yaml +1 -0
- package/departments/quality/agents/cqo.yaml +1 -0
- package/departments/quality/agents/tech-director.yaml +1 -0
- package/departments/saas/SKILL.md +13 -0
- package/departments/saas/agents/cs-manager.yaml +1 -0
- package/departments/saas/agents/growth-engineer.yaml +1 -0
- package/departments/saas/agents/metrics-analyst.yaml +1 -0
- package/departments/saas/agents/saas-strategist.yaml +1 -0
- package/departments/saas/workflows/metrics.yaml +1 -0
- package/departments/saas/workflows/validate.yaml +1 -0
- package/departments/sales/SKILL.md +13 -0
- package/departments/sales/agents/sales-closer.yaml +1 -0
- package/departments/sales/agents/sales-director.yaml +1 -0
- package/departments/sales/agents/sales-ops.yaml +1 -0
- package/departments/sales/workflows/pipeline.yaml +1 -0
- package/departments/strategy/SKILL.md +13 -0
- package/departments/strategy/agents/business-model-designer.yaml +1 -0
- package/departments/strategy/agents/market-analyst.yaml +1 -0
- package/departments/strategy/agents/strategy-director.yaml +1 -0
- package/departments/strategy/workflows/analysis.yaml +1 -0
- package/departments/strategy/workflows/swot.yaml +1 -0
- package/installer/index.js +19 -0
- package/package.json +1 -1
- 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."
|
|
@@ -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="...")
|
|
@@ -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="...")
|
|
@@ -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="...")
|
package/departments/ops/SKILL.md
CHANGED
|
@@ -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="...")
|
|
@@ -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.
|