arkaos 4.24.0 → 4.25.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/README.md +1 -1
- package/THE-ARKAOS-GUIDE.md +1 -1
- package/VERSION +1 -1
- package/arka/SKILL.md +1 -1
- package/bin/arka +8 -0
- package/config/claude-agents/shadcn-padronizer.md +3 -3
- package/departments/brand/agents/design-ops/shadcn-padronizer.yaml +1 -1
- package/departments/dev/skills/build-fix/SKILL.md +122 -0
- package/departments/dev/skills/react-review/SKILL.md +86 -0
- package/departments/ops/skills/hookify/SKILL.md +89 -0
- package/departments/pm/skills/epic-coordination/SKILL.md +79 -0
- package/harness/codex/AGENTS.md +139 -0
- package/harness/copilot/copilot-instructions.md +139 -0
- package/harness/cursor/rules/arkaos-stack-laravel.mdc +16 -0
- package/harness/cursor/rules/arkaos-stack-node.mdc +14 -0
- package/harness/cursor/rules/arkaos-stack-nuxt.mdc +15 -0
- package/harness/cursor/rules/arkaos-stack-php.mdc +14 -0
- package/harness/cursor/rules/arkaos-stack-python.mdc +14 -0
- package/harness/cursor/rules/arkaos-stack-react.mdc +14 -0
- package/harness/cursor/rules/arkaos-stack-vue.mdc +14 -0
- package/harness/cursor/rules/arkaos.mdc +72 -0
- package/harness/gemini/GEMINI.md +139 -0
- package/harness/opencode/AGENTS.md +139 -0
- package/harness/zed/.rules +139 -0
- package/installer/adapters/codex-cli.js +16 -27
- package/installer/adapters/cursor.js +22 -26
- package/installer/adapters/gemini-cli.js +15 -30
- package/installer/cli.js +1 -1
- package/installer/doctor.js +224 -0
- package/installer/harness-bundle.js +34 -0
- package/knowledge/agents-registry-v2.json +2 -2
- package/knowledge/skills-manifest.json +53 -1
- package/package.json +2 -1
- package/pyproject.toml +1 -1
- package/scripts/harness_gen.py +274 -0
package/README.md
CHANGED
package/THE-ARKAOS-GUIDE.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# The ArkaOS Guide
|
|
2
2
|
|
|
3
|
-
> v4.
|
|
3
|
+
> v4.25.0 — 86 agents, 17 departments, 298 skills, 270 commands, 16 ADRs.
|
|
4
4
|
> One file, everything you need to start. Generated by `scripts/guide_gen.py` — never hand-edited.
|
|
5
5
|
|
|
6
6
|
## What it is
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
4.
|
|
1
|
+
4.25.0
|
package/arka/SKILL.md
CHANGED
|
@@ -47,7 +47,7 @@ complementary, not alternatives.
|
|
|
47
47
|
# ArkaOS — Main Orchestrator
|
|
48
48
|
|
|
49
49
|
> **The Operating System for AI Agent Teams**
|
|
50
|
-
> 86 agents. 17 departments.
|
|
50
|
+
> 86 agents. 17 departments. 298 skills. Multi-runtime. Dashboard. Knowledge RAG.
|
|
51
51
|
|
|
52
52
|
## ⛔ Evidence flow — 4 gates (NON-NEGOTIABLE)
|
|
53
53
|
|
package/bin/arka
CHANGED
|
@@ -66,6 +66,14 @@ case "${1:-}" in
|
|
|
66
66
|
;;
|
|
67
67
|
doctor)
|
|
68
68
|
shift
|
|
69
|
+
# Issue #358: the node doctor is canonical (engine/venv/hooks/security
|
|
70
|
+
# + the migrated Claude-layer checks). The bash doctor only audits the
|
|
71
|
+
# legacy v1 layout — keep it strictly as the no-node fallback.
|
|
72
|
+
if command -v npx &>/dev/null; then
|
|
73
|
+
npx arkaos doctor "$@"
|
|
74
|
+
exit $?
|
|
75
|
+
fi
|
|
76
|
+
echo "npx not found — falling back to the legacy v1 doctor (limited scope)." >&2
|
|
69
77
|
bash "$HOME/.local/bin/arka-doctor" "$@"
|
|
70
78
|
exit $?
|
|
71
79
|
;;
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: shadcn-padronizer
|
|
3
3
|
description: >
|
|
4
|
-
Leo — Component Library
|
|
4
|
+
Leo — Component Library Standardizer (brand squad). Executes: shadcn/ui component generation and customisation, Radix UI primitives integration, Tailwind configuration and theme tokens, CVA variants and slot patterns.
|
|
5
5
|
model: sonnet
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
<!-- generated by core/agents/behavioral_compiler.py from departments/brand/agents/design-ops/shadcn-padronizer.yaml — DO NOT EDIT; edit the YAML and re-run -->
|
|
9
9
|
|
|
10
|
-
# Leo — Component Library
|
|
10
|
+
# Leo — Component Library Standardizer
|
|
11
11
|
|
|
12
|
-
You are Leo, Component Library
|
|
12
|
+
You are Leo, Component Library Standardizer of the brand squad (Tier 2). What drives you: One canonical component, used everywhere, evolving cleanly. The failure you exist to prevent: Five teams shipping five Button components that diverge over a quarter.
|
|
13
13
|
|
|
14
14
|
## How you work
|
|
15
15
|
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dev/build-fix
|
|
3
|
+
description: >
|
|
4
|
+
Systematic build-failure diagnosis: read the FIRST error bottom-up,
|
|
5
|
+
reproduce it in isolation, classify it (dependency, config, code,
|
|
6
|
+
toolchain, cache), fix the root cause, and prove the fix with two
|
|
7
|
+
clean builds — with per-ecosystem playbooks for the failure
|
|
8
|
+
signatures of Laravel/PHP, Node/TS, Vue/Nuxt, React/Next, and Python.
|
|
9
|
+
TRIGGER: "/dev build-fix", "the build is broken", "o build está a
|
|
10
|
+
falhar", "compila localmente mas falha no CI", "npm run build
|
|
11
|
+
rebenta", "composer install falha", "arranja o build"; any red build
|
|
12
|
+
whose error output exists. SKIP: the code builds but tests fail ->
|
|
13
|
+
dev/code-review or dev/app-test wins; designing the pipeline itself
|
|
14
|
+
-> dev/ci-cd-pipeline wins; a production outage -> dev/incident wins.
|
|
15
|
+
allowed-tools: [Read, Grep, Glob, Bash]
|
|
16
|
+
metadata:
|
|
17
|
+
origin: arkaos
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# Build Fix — `/dev build-fix`
|
|
21
|
+
|
|
22
|
+
> **Agent:** Paulo (Tech Lead) | **Framework:** Root-cause classification, first-error discipline
|
|
23
|
+
|
|
24
|
+
A failing build is the most honest bug report you will ever receive:
|
|
25
|
+
deterministic, reproducible, and pointing at itself. Almost every hour
|
|
26
|
+
lost to a broken build is lost the same way — fixing the LAST error on
|
|
27
|
+
the screen, which is usually a cascade symptom of the first one, or
|
|
28
|
+
reaching for the folk remedy (delete the lockfile, clear every cache,
|
|
29
|
+
reinstall the world) before reading what the tool actually said.
|
|
30
|
+
|
|
31
|
+
## Method
|
|
32
|
+
|
|
33
|
+
1. **Find the first error.** Scroll past the cascade; the root error is
|
|
34
|
+
the earliest one, and everything after it is noise until proven
|
|
35
|
+
otherwise.
|
|
36
|
+
2. **Reproduce in isolation.** Run the failing step alone, from a clean
|
|
37
|
+
shell, with the project's pinned tool versions. A build that only
|
|
38
|
+
fails inside CI is still reproducible — replicate the CI's inputs
|
|
39
|
+
(env vars, lockfile, node/php/python version) locally before
|
|
40
|
+
touching anything.
|
|
41
|
+
3. **Classify** the root error into exactly one bucket:
|
|
42
|
+
| Bucket | Signature |
|
|
43
|
+
|---|---|
|
|
44
|
+
| Dependency | resolver conflicts, missing package, lockfile drift |
|
|
45
|
+
| Config | tool config rejects input, wrong paths, env var absent |
|
|
46
|
+
| Code | type error, syntax error, failed macro/codegen |
|
|
47
|
+
| Toolchain | wrong runtime version, missing system binary |
|
|
48
|
+
| Cache | passes clean, fails incrementally (or the reverse) |
|
|
49
|
+
4. **Fix the root, not the symptom.** A cast that silences a type error
|
|
50
|
+
the compiler was right about is a deferred production bug.
|
|
51
|
+
5. **Prove it.** Two consecutive clean builds — one incremental, one
|
|
52
|
+
from clean — with exit codes on record. One green build after a
|
|
53
|
+
cache clear proves nothing about the fix.
|
|
54
|
+
|
|
55
|
+
## Ecosystem playbooks
|
|
56
|
+
|
|
57
|
+
### Laravel / PHP
|
|
58
|
+
|
|
59
|
+
- `Class not found` after moving a file → regenerate the autoload map
|
|
60
|
+
(`composer dump-autoload`); if it persists, the namespace does not
|
|
61
|
+
match the path — fix the namespace, not the autoloader.
|
|
62
|
+
- `composer install` resolver conflict → read WHICH two constraints
|
|
63
|
+
collide before touching version pins; widening the wrong one
|
|
64
|
+
downgrades half the tree.
|
|
65
|
+
- Migration failure mid-build → the schema state is now ahead of the
|
|
66
|
+
migration table; inspect before re-running, never loop `migrate:fresh`
|
|
67
|
+
on shared databases.
|
|
68
|
+
|
|
69
|
+
### Node / TypeScript
|
|
70
|
+
|
|
71
|
+
- `tsc` errors that runtime never hits → the types drifted from the
|
|
72
|
+
code; fix the types, do not add `as any` (the compiler is the only
|
|
73
|
+
reviewer that reads every call site).
|
|
74
|
+
- Works locally, fails in CI → lockfile drift: CI runs `npm ci` (exact
|
|
75
|
+
lockfile) while local `npm install` mutated it. Commit the lockfile
|
|
76
|
+
the build actually needs.
|
|
77
|
+
- `ERR_REQUIRE_ESM` / `Cannot use import` → an ESM-only dependency in a
|
|
78
|
+
CJS context; align the importing module's format instead of pinning
|
|
79
|
+
the dependency to a dead major.
|
|
80
|
+
|
|
81
|
+
### Vue / Nuxt
|
|
82
|
+
|
|
83
|
+
- Auto-import resolution failures (`X is not defined` only in build) →
|
|
84
|
+
the dev server tolerates what nitro's build does not; add the
|
|
85
|
+
explicit import.
|
|
86
|
+
- Hydration-safe code that fails at BUILD time in SSR → browser-only
|
|
87
|
+
API executed at module top level; move it inside a lifecycle hook or
|
|
88
|
+
guard it.
|
|
89
|
+
|
|
90
|
+
### React / Next.js
|
|
91
|
+
|
|
92
|
+
- Server/client boundary violations (`useState in a Server Component`)
|
|
93
|
+
→ mark the leaf `"use client"`, never the whole tree — pushing the
|
|
94
|
+
directive up quietly moves the entire subtree to the client bundle.
|
|
95
|
+
- Build-time data fetching failures → a page assumed a runtime env var
|
|
96
|
+
at static-generation time; decide dynamic vs static explicitly.
|
|
97
|
+
|
|
98
|
+
### Python
|
|
99
|
+
|
|
100
|
+
- Import works in the repl, fails in the build → the venv the build
|
|
101
|
+
uses is not the venv you activated; print `sys.executable` in the
|
|
102
|
+
failing context before debugging imports.
|
|
103
|
+
- Resolver backtracking forever → over-constrained pins; loosen the
|
|
104
|
+
pins you own, never the transitive ones.
|
|
105
|
+
- Circular import only at build/collect time → the cycle was always
|
|
106
|
+
there; imports inside functions defer it, moving the shared symbol
|
|
107
|
+
out removes it.
|
|
108
|
+
|
|
109
|
+
## Output
|
|
110
|
+
|
|
111
|
+
```markdown
|
|
112
|
+
## Build Fix Report
|
|
113
|
+
|
|
114
|
+
**Failing step:** {command} · **First error:** {file}:{line} — {message}
|
|
115
|
+
**Bucket:** {dependency|config|code|toolchain|cache}
|
|
116
|
+
**Root cause:** {one sentence}
|
|
117
|
+
**Fix:** {what changed and why it addresses the root}
|
|
118
|
+
**Proof:** incremental build exit 0 · clean build exit 0 (commands on record)
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
A build fixed without the two-build proof, or a symptom silenced with a
|
|
122
|
+
cast or a cache clear, does not close this skill.
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dev/react-review
|
|
3
|
+
description: >
|
|
4
|
+
React / Next.js review for the framework's own traps — stale closures
|
|
5
|
+
in hooks, dependency arrays that lie, derived state stored instead of
|
|
6
|
+
computed, keys that force remounts, effects doing render work, and
|
|
7
|
+
server/client boundary leaks in the App Router — with the fix each
|
|
8
|
+
needs. Hooks and TypeScript assumed. TRIGGER: "/dev react-review",
|
|
9
|
+
"review this React", "review the Next.js", "revê este componente
|
|
10
|
+
React", "revê o hook", "porque é que o efeito corre duas vezes?", any
|
|
11
|
+
diff touching *.tsx components or custom hooks. SKIP:
|
|
12
|
+
language-agnostic review -> dev/code-review wins; TypeScript type
|
|
13
|
+
design without React specifics -> dev/typescript-review wins; a
|
|
14
|
+
handler-ordering/state-cancellation bug -> dev/click-path-audit wins;
|
|
15
|
+
visual/brand review -> brand/design-review wins.
|
|
16
|
+
allowed-tools: [Read, Grep, Glob]
|
|
17
|
+
metadata:
|
|
18
|
+
origin: arkaos
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
# React Review — `/dev react-review`
|
|
22
|
+
|
|
23
|
+
> **Agent:** Diana (Senior Frontend Developer) | **Framework:** Hooks semantics, render-cycle discipline, RSC boundaries
|
|
24
|
+
|
|
25
|
+
Where Vue's traps announce themselves — reactivity silently lost is
|
|
26
|
+
still lost — React's traps ship working code that is wrong later: the
|
|
27
|
+
closure that captured last render's state, the dependency array that
|
|
28
|
+
omits what the effect reads, the memo that never invalidates. This
|
|
29
|
+
review walks the render cycle, not the file: what each render reads,
|
|
30
|
+
what it captures, and what survives to the next one.
|
|
31
|
+
|
|
32
|
+
## The traps, and the fix each needs
|
|
33
|
+
|
|
34
|
+
| # | Trap | Signature | Fix |
|
|
35
|
+
|---|------|-----------|-----|
|
|
36
|
+
| 1 | Stale closure | callback reads state captured N renders ago | functional updater (`setX(v => ...)`) or include the dep and let the callback re-create |
|
|
37
|
+
| 2 | Lying dependency array | effect reads `a`, deps say `[b]` | list what the effect READS; if that loops, the effect does too much — split it |
|
|
38
|
+
| 3 | Derived state stored | `useState` mirroring a computable value, synced by effect | compute during render (`useMemo` if costly); delete the effect |
|
|
39
|
+
| 4 | Key-forced remounts | `key={index}` on reorderable lists, or key changing identity every render | stable identity key; component state survives reorders |
|
|
40
|
+
| 5 | Effects doing render work | formatting/filtering in `useEffect` + `setState` | that is render logic — move it into render; effects are for the outside world |
|
|
41
|
+
| 6 | Boundary leak (App Router) | `"use client"` at the top of a tree because one leaf needs a hook | push the directive to the leaf; a client parent drags every child into the bundle |
|
|
42
|
+
| 7 | Context re-render storm | one broad context carrying fast-changing values | split contexts by change rate, memoize the provider value |
|
|
43
|
+
| 8 | Unstable references as props | inline objects/functions into memoized children | hoist or `useCallback`/`useMemo` — or drop the memo, half-memoized is unmemoized |
|
|
44
|
+
|
|
45
|
+
## Process
|
|
46
|
+
|
|
47
|
+
For every component and custom hook in scope:
|
|
48
|
+
|
|
49
|
+
1. **Trace one render**: what it reads, what it computes, what it
|
|
50
|
+
captures in closures handed to children, effects, or timers.
|
|
51
|
+
2. **Interrogate every `useEffect`**: does it synchronize with an
|
|
52
|
+
external system (fetch, subscription, DOM)? If it only moves state
|
|
53
|
+
around, it is a trap-3 or trap-5 candidate.
|
|
54
|
+
3. **Check every dependency array against the closure it feeds** — the
|
|
55
|
+
array documents what the closure reads; any omission is a latent
|
|
56
|
+
staleness bug, not an optimization.
|
|
57
|
+
4. **Walk the server/client boundary** (Next.js App Router): where does
|
|
58
|
+
`"use client"` sit, and does anything serialize a non-serializable
|
|
59
|
+
prop across it?
|
|
60
|
+
5. **Confirm list keys carry identity**, not position.
|
|
61
|
+
|
|
62
|
+
## Proactive Triggers
|
|
63
|
+
|
|
64
|
+
Surface these WITHOUT being asked:
|
|
65
|
+
|
|
66
|
+
- an async callback using state without a functional updater → the
|
|
67
|
+
stale-closure race it hides
|
|
68
|
+
- `useEffect` + `setState` whose only input is other state → the
|
|
69
|
+
derived-state rewrite that deletes both
|
|
70
|
+
- a `"use client"` higher than the hook that needs it → the bundle cost
|
|
71
|
+
and the RSC benefits silently forfeited
|
|
72
|
+
|
|
73
|
+
## Output
|
|
74
|
+
|
|
75
|
+
```markdown
|
|
76
|
+
## React Review Report
|
|
77
|
+
|
|
78
|
+
**Scope:** {components / hooks reviewed}
|
|
79
|
+
|
|
80
|
+
### {Component / hook} — {file}:{line}
|
|
81
|
+
**Trap:** {#N name} · **Evidence:** {what the render trace shows}
|
|
82
|
+
**Consequence:** {what goes wrong, when}
|
|
83
|
+
**Fix:** {the specific rewrite}
|
|
84
|
+
|
|
85
|
+
**Verdict:** {clean / N findings, ranked by user impact}
|
|
86
|
+
```
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ops/hookify
|
|
3
|
+
description: >
|
|
4
|
+
Compiles a repeated correction into a deterministic hook: identify
|
|
5
|
+
the behavior that keeps being corrected by hand, express it as a
|
|
6
|
+
machine-checkable predicate, and install it on the right ArkaOS hook
|
|
7
|
+
surface (PreToolUse deny, Stop lint, UserPromptSubmit nudge) —
|
|
8
|
+
warn-first with telemetry, hard only when the false-positive rate
|
|
9
|
+
earns it. TRIGGER: "/ops hookify", "make this automatic", "torna isto
|
|
10
|
+
automático", "estou farto de corrigir isto", "enforce this rule",
|
|
11
|
+
"isto devia ser um hook"; the third manual correction of the same
|
|
12
|
+
behavior. SKIP: capturing a reusable feature build -> arka-recipes
|
|
13
|
+
wins; automating a business process -> ops/workflow-automate wins;
|
|
14
|
+
writing an SOP for humans -> ops/sop-create wins.
|
|
15
|
+
allowed-tools: [Read, Grep, Glob, Bash, Write, Edit]
|
|
16
|
+
metadata:
|
|
17
|
+
origin: arkaos
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# Hookify — `/ops hookify`
|
|
21
|
+
|
|
22
|
+
> **Agent:** Daniel (Operations Lead) | **Framework:** Correction-to-predicate compilation, warn-first enforcement
|
|
23
|
+
|
|
24
|
+
A hook is a correction that stopped needing you. The third time the
|
|
25
|
+
same behavior gets fixed by hand — the commit message pattern, the file
|
|
26
|
+
that must never be edited directly, the command that needs a flag — the
|
|
27
|
+
correction has stopped being feedback and become a specification
|
|
28
|
+
nobody wrote down. This skill writes it down as executable policy.
|
|
29
|
+
|
|
30
|
+
## Step 1 — Extract the predicate
|
|
31
|
+
|
|
32
|
+
From the repeated correction, derive a predicate a machine can decide
|
|
33
|
+
WITHOUT judgment calls:
|
|
34
|
+
|
|
35
|
+
- **Good**: "Edit on `config/claude-agents/*.md` → deny (generated
|
|
36
|
+
file; the YAML is the source)."
|
|
37
|
+
- **Not hookifiable**: "commit messages should be clearer" — no
|
|
38
|
+
decidable predicate. Route vague quality intents to review skills,
|
|
39
|
+
not hooks; a hook that needs judgment produces false positives that
|
|
40
|
+
teach the operator to ignore every hook.
|
|
41
|
+
|
|
42
|
+
State the predicate as: *surface* (which tool calls / which moment),
|
|
43
|
+
*condition* (decidable test), *action* (deny / warn / inject context).
|
|
44
|
+
|
|
45
|
+
## Step 2 — Pick the surface
|
|
46
|
+
|
|
47
|
+
| Surface | When it fires | Right for | House examples |
|
|
48
|
+
|---|---|---|---|
|
|
49
|
+
| PreToolUse (`core/hooks/pre_tool_use.py`) | before a tool call | preventing an edit/command that must not happen | frontend gate, research gate |
|
|
50
|
+
| Stop (`core/hooks/stop.py`) | end of turn | measuring compliance, scoped lint over changed files | stop-lint, KB-cite check |
|
|
51
|
+
| UserPromptSubmit (`config/hooks/user-prompt-submit.sh`) | before the turn | nudges and context injection, never blocking | token hygiene checks |
|
|
52
|
+
|
|
53
|
+
Constraints that are not negotiable: hooks respect their timeout budget
|
|
54
|
+
(UserPromptSubmit 10s, PostToolUse 5s), never block on network, exit 0
|
|
55
|
+
on the non-blocking surfaces, and parse JSON with jq (python3
|
|
56
|
+
fallback). A hook that exceeds its budget degrades every turn to save
|
|
57
|
+
one correction — that trade is always refused.
|
|
58
|
+
|
|
59
|
+
## Step 3 — Warn first, harden on evidence
|
|
60
|
+
|
|
61
|
+
New enforcement ALWAYS lands warn-only with telemetry (house pattern:
|
|
62
|
+
the stop-lint and frontend-gate flips). The hook logs would-block
|
|
63
|
+
events to `~/.arkaos/telemetry/`; promotion to hard deny is a separate,
|
|
64
|
+
deliberate change gated on the observed false-positive rate — a gate
|
|
65
|
+
that fires wrongly even 1 turn in 50 gets disabled by hand and trains
|
|
66
|
+
contempt for the ones that fire rightly.
|
|
67
|
+
|
|
68
|
+
## Step 4 — Install with proof
|
|
69
|
+
|
|
70
|
+
1. Implement on the chosen surface, following that surface's existing
|
|
71
|
+
pattern (read the sibling hooks first).
|
|
72
|
+
2. Reproduce the original correction scenario and show the hook
|
|
73
|
+
catching it — a hook whose trigger was never exercised is a hope,
|
|
74
|
+
not a control.
|
|
75
|
+
3. Show a benign scenario passing untouched (the false-positive probe).
|
|
76
|
+
4. Register the telemetry line and, if the hook grows a flag, document
|
|
77
|
+
it where the surface's flags live.
|
|
78
|
+
|
|
79
|
+
## Output
|
|
80
|
+
|
|
81
|
+
```markdown
|
|
82
|
+
## Hookify Report
|
|
83
|
+
|
|
84
|
+
**Correction observed:** {what kept being fixed by hand, with instances}
|
|
85
|
+
**Predicate:** {surface} · {condition} · {action}
|
|
86
|
+
**Mode:** warn-only (telemetry: {file}) · hard-flip criterion: {rate}
|
|
87
|
+
**Proof:** trigger scenario caught ✓ · benign scenario untouched ✓
|
|
88
|
+
**Files:** {hook file, config, telemetry}
|
|
89
|
+
```
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pm/epic-coordination
|
|
3
|
+
description: >
|
|
4
|
+
Turns an epic into a coordinated set of GitHub issues with an explicit
|
|
5
|
+
dependency graph, then drives it: sweep for unblocked work, dispatch
|
|
6
|
+
in dependency order, keep issue state honest against merged reality,
|
|
7
|
+
and close the epic only when the graph is empty. TRIGGER: "/pm epic",
|
|
8
|
+
"break this epic into issues", "parte isto em issues", "coordena
|
|
9
|
+
estes issues", "what can start now?", "o que está desbloqueado?",
|
|
10
|
+
multi-PR work spanning more than one workstream. SKIP: sizing and
|
|
11
|
+
cadence for a sprint -> pm/sprint-plan wins; writing one story well
|
|
12
|
+
-> pm/story-write wins; branch/merge discipline within a single
|
|
13
|
+
change -> ops/github-ops wins; ranking the backlog -> pm/backlog-groom
|
|
14
|
+
wins.
|
|
15
|
+
allowed-tools: [Read, Grep, Glob, Bash]
|
|
16
|
+
metadata:
|
|
17
|
+
origin: arkaos
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# Epic Coordination — `/pm epic`
|
|
21
|
+
|
|
22
|
+
> **Agent:** Carolina (Product Manager) | **Framework:** Dependency-graph decomposition, single-source issue state
|
|
23
|
+
|
|
24
|
+
An epic dies in one of two ways: as a monolith pull request nobody can
|
|
25
|
+
review, or as twenty issues nobody sequenced — where three developers
|
|
26
|
+
block each other by lunchtime and the "done" column fills with work
|
|
27
|
+
that cannot ship because its dependency never started. Both deaths have
|
|
28
|
+
the same cause: the dependencies existed, but only in someone's head.
|
|
29
|
+
|
|
30
|
+
## Phase 1 — Decompose against the graph
|
|
31
|
+
|
|
32
|
+
1. Break the epic into issues where each issue is **independently
|
|
33
|
+
mergeable**: it can go to master alone without breaking the build,
|
|
34
|
+
even if the feature is not yet user-visible behind it.
|
|
35
|
+
2. For each issue record what it **blocks** and what it is **blocked
|
|
36
|
+
by**. A dependency that cannot be named in one sentence ("B reads
|
|
37
|
+
the schema A creates") is usually a sign the split is wrong — re-cut
|
|
38
|
+
the boundary before creating anything.
|
|
39
|
+
3. Write the graph INTO the issues (`gh issue create` with "Blocked by
|
|
40
|
+
#N" / "Blocks #N" in the body, labels for the epic and workstream).
|
|
41
|
+
GitHub is the single source of state — a graph kept in a document
|
|
42
|
+
diverges from reality by the second merge.
|
|
43
|
+
|
|
44
|
+
## Phase 2 — Drive by sweep
|
|
45
|
+
|
|
46
|
+
Repeat until the graph is empty:
|
|
47
|
+
|
|
48
|
+
1. **Sweep**: an issue is *unblocked* when every "Blocked by" reference
|
|
49
|
+
is closed AND its commits are actually on the target branch —
|
|
50
|
+
closed-but-unmerged is still blocked, whatever the issue state says.
|
|
51
|
+
2. **Dispatch** every unblocked issue; independent issues run in
|
|
52
|
+
parallel, dependent ones never do.
|
|
53
|
+
3. **Reconcile** after each merge: close what merged, update "Blocked
|
|
54
|
+
by" lists the merge invalidated, and re-sweep. Reality moves the
|
|
55
|
+
graph; the graph never moves reality.
|
|
56
|
+
4. **Escalate stalls**: an issue unblocked for longer than the epic's
|
|
57
|
+
agreed cadence with no movement is a decision waiting to be made —
|
|
58
|
+
name it to the operator instead of letting the graph silt up.
|
|
59
|
+
|
|
60
|
+
## Invariants
|
|
61
|
+
|
|
62
|
+
- Every issue names its epic; the epic issue links every child. Orphan
|
|
63
|
+
work inside an epic is scope creep with a paper trail.
|
|
64
|
+
- The critical path (longest dependency chain) is stated in the epic
|
|
65
|
+
issue and re-derived after every reconcile — priorities follow it,
|
|
66
|
+
not the order issues were created in.
|
|
67
|
+
- Closing the epic requires the graph empty AND the epic's acceptance
|
|
68
|
+
line verified against the merged state, not against the issue list.
|
|
69
|
+
|
|
70
|
+
## Output
|
|
71
|
+
|
|
72
|
+
```markdown
|
|
73
|
+
## Epic Status — {epic title} (#{epic issue})
|
|
74
|
+
|
|
75
|
+
**Issues:** {open}/{total} · **Critical path:** #{a} → #{b} → #{c}
|
|
76
|
+
**Unblocked now:** #{n}, #{m} · **Blocked:** #{x} (by #{y})
|
|
77
|
+
**Stalled:** {none, or issue + the decision it waits on}
|
|
78
|
+
**Next dispatch:** {what starts now, in what order, and why}
|
|
79
|
+
```
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# ArkaOS — The Operating System for AI Agent Teams
|
|
2
|
+
|
|
3
|
+
> v4.25.0 — 86 agents, 17 departments, 298 skills. Generated by `scripts/harness_gen.py`; do not edit.
|
|
4
|
+
|
|
5
|
+
You are operating within ArkaOS. Every request routes through the
|
|
6
|
+
appropriate department squad — never respond as a generic assistant.
|
|
7
|
+
|
|
8
|
+
## How to work
|
|
9
|
+
|
|
10
|
+
1. **Route** every request to a department (table below) and say so:
|
|
11
|
+
`[arka:routing] <dept> -> <lead>`.
|
|
12
|
+
2. **Plan before code.** State the plan and wait for explicit approval
|
|
13
|
+
on non-trivial work.
|
|
14
|
+
3. **Evidence over narration.** Run the real tests and report the real
|
|
15
|
+
exit code; a claim about code that was never executed is not a
|
|
16
|
+
result.
|
|
17
|
+
4. **Quality Gate.** Before delivering, review the work as a critical
|
|
18
|
+
second reader (copy AND technical) and say honestly what is
|
|
19
|
+
unfinished. Nothing ships with known defects undisclosed.
|
|
20
|
+
|
|
21
|
+
## Departments
|
|
22
|
+
|
|
23
|
+
| Prefix | Lead | Commands |
|
|
24
|
+
|---|---|---|
|
|
25
|
+
| `/dev` | Paulo | 36 |
|
|
26
|
+
| `/mkt` | Luna | 12 |
|
|
27
|
+
| `/brand` | Valentina | 12 |
|
|
28
|
+
| `/fin` | Helena | 10 |
|
|
29
|
+
| `/strat` | Tomas | 10 |
|
|
30
|
+
| `/ecom` | Ricardo | 18 |
|
|
31
|
+
| `/kb` | Clara | 22 |
|
|
32
|
+
| `/ops` | Daniel | 25 |
|
|
33
|
+
| `/pm` | Carolina | 12 |
|
|
34
|
+
| `/saas` | Tiago | 14 |
|
|
35
|
+
| `/landing` | Ines | 14 |
|
|
36
|
+
| `/content` | Rafael | 19 |
|
|
37
|
+
| `/community` | Beatriz | 14 |
|
|
38
|
+
| `/sales` | Miguel | 10 |
|
|
39
|
+
| `/lead` | Rodrigo | 10 |
|
|
40
|
+
| `/org` | Sofia | 10 |
|
|
41
|
+
|
|
42
|
+
## Agents
|
|
43
|
+
|
|
44
|
+
Adopt the matching persona when executing department work:
|
|
45
|
+
|
|
46
|
+
- **brand**: Iris (Design Ops Lead) · Valentina (Creative Director) · Isabel (Visual Designer) · Júlia (UX Strategist) · Leo (Component Library Standardizer) · Mateus (Brand Strategist) · Nia (Design Extraction Engineer) · Oren (Accessibility Auditor) · Renata (UX Researcher) · Sofia D. (UX/UI Designer)
|
|
47
|
+
- **community**: Beatriz (Community Strategist) · Maria (Community Manager) · Tania (Engagement & Gamification Designer)
|
|
48
|
+
- **content**: Rafael (Content Strategist) · Simão (Video Producer & Production Lead) · Dinis (Information Compiler) · Filipe (Viral Content Engineer) · Joana (Scriptwriter) · Madalena (Content Researcher) · Margarida (Trends & Niche Analyst) · Nuno (Repurpose & Distribution Specialist)
|
|
49
|
+
- **dev**: Marco (Chief Technology Officer) · Gabriel (Software Architect) · Paulo (Tech Lead) · Andre (Backend Core Lead) · Bruno (Security Engineer) · Carlos (DevOps Lead) · Diana (Senior Frontend Developer) · Diogo (Python Backend Specialist) · Duarte (Data / ETL Engineer) · Gonçalo (Laravel Specialist) · Rita (QA Engineer) · Salvador (AI Engineering Specialist) · Vasco (Data Platform Lead (Database & Data Engineer)) · Vera (Node.js / TypeScript Backend Specialist) · Maria (Research Assistant)
|
|
50
|
+
- **ecom**: Ricardo (E-Commerce Director) · Alice (CRO Specialist) · Catarina (Lifecycle & Retention Manager) · David (Commerce Engineer)
|
|
51
|
+
- **fin**: Helena (Chief Financial Officer) · Leonor (Financial Analyst) · Rui (Investment & Fundraising Strategist)
|
|
52
|
+
- **kb**: Clara (Knowledge Director) · Francisco (Research Analyst) · Helena C. (Knowledge Curator) · Tomas Jr (Data Collector)
|
|
53
|
+
- **landing**: Ines (Conversion Strategist) · Hugo (CRO Specialist) · Sergio (Affiliate & Partnerships Manager) · Teresa (Sales Copywriter)
|
|
54
|
+
- **lead**: Rodrigo (Leadership & People Director) · Diana R. (HR & Talent Specialist) · Paula (Culture & Performance Coach)
|
|
55
|
+
- **mkt**: Luna (Marketing Director) · Ana (SEO Specialist) · Mariana (Content Marketing Specialist) · Pedro (Performance Marketing Specialist)
|
|
56
|
+
- **ops**: Daniel (Operations Lead) · Tomas A. (Automation Engineer) · Isabel (Documentation Writer)
|
|
57
|
+
- **org**: Sofia (Chief Operations Officer) · Afonso (Chief of Staff & Governance Lead) · Carla (People Operations Specialist) · Matilde (Alignment & OKR Steward) · Pedro M. (Organizational Designer)
|
|
58
|
+
- **pm**: Carolina (Product Manager) · Bárbara (Strategic Program Manager) · Jorge (Scrum Master / Agile Coach) · Sara (Product Owner)
|
|
59
|
+
- **quality**: Eduardo (Copy & Language Director) · Francisca (Technical & UX Quality Director) · Marta (Chief Quality Officer)
|
|
60
|
+
- **saas**: Tiago (SaaS Strategist) · Vicente (RevOps Lead) · Andre S. (Growth Lead) · Patricia (Head of Customer Success) · Rita S. (SaaS Metrics & Voice-of-Customer Analyst)
|
|
61
|
+
- **sales**: Miguel (Sales Director) · Ines S. (Sales Operations Analyst) · Joao (Sales Closer) · Martim (SDR / Pre-Sales)
|
|
62
|
+
- **strat**: Tomas (Chief Strategist) · Guilherme (Decision Quality & Strategic Foresight) · Lucas (Market & Competitive Intelligence Analyst) · Marta S. (Business Model Designer)
|
|
63
|
+
|
|
64
|
+
## Stack conventions
|
|
65
|
+
|
|
66
|
+
Apply the section matching the files you touch.
|
|
67
|
+
|
|
68
|
+
### Laravel Stack Conventions
|
|
69
|
+
|
|
70
|
+
- Services + Repositories pattern; no logic in controllers.
|
|
71
|
+
- Form Requests for all input validation.
|
|
72
|
+
- API Resources for response shaping.
|
|
73
|
+
- Feature Tests with RefreshDatabase trait.
|
|
74
|
+
- Eloquent relationships over raw joins.
|
|
75
|
+
- Policies for authorization; never inline ability checks.
|
|
76
|
+
- Queued jobs for slow work; never block the request cycle.
|
|
77
|
+
- Conventional commits: `feat(scope): ...`, `fix(scope): ...`.
|
|
78
|
+
|
|
79
|
+
### Node.js / JavaScript Stack Conventions
|
|
80
|
+
|
|
81
|
+
- ESM modules (import/export); no CommonJS `require()`.
|
|
82
|
+
- Support Node and Bun runtimes when writing CLI tooling.
|
|
83
|
+
- Graceful fallbacks when optional dependencies are missing.
|
|
84
|
+
- All paths via `os.homedir()` or `path.join`; never hardcoded.
|
|
85
|
+
- No interactive prompts in headless/CI runs.
|
|
86
|
+
- Prefer built-in `node:` modules over dependencies.
|
|
87
|
+
|
|
88
|
+
### Nuxt Stack Conventions
|
|
89
|
+
|
|
90
|
+
- Composition API only; no Options API.
|
|
91
|
+
- TypeScript everywhere; no plain JS Vue files.
|
|
92
|
+
- `composables/` for shared reactive logic.
|
|
93
|
+
- `useFetch`/`useAsyncData` for server-side data.
|
|
94
|
+
- `~` alias for project root imports.
|
|
95
|
+
- Server routes in `server/api/`; never fetch third parties from components.
|
|
96
|
+
- Tailwind for styling; avoid scoped styles unless necessary.
|
|
97
|
+
|
|
98
|
+
### PHP Stack Conventions
|
|
99
|
+
|
|
100
|
+
- PHP 8.2+ syntax: constructor promotion, readonly, enums, match.
|
|
101
|
+
- `declare(strict_types=1)` in every file.
|
|
102
|
+
- Typed properties, parameters, and return types everywhere.
|
|
103
|
+
- Composer autoload (PSR-4); never `require` project files by path.
|
|
104
|
+
- Exceptions over error returns; never `@` error suppression.
|
|
105
|
+
- Pint (or the project formatter) must pass before a change is done.
|
|
106
|
+
|
|
107
|
+
### Python Stack Conventions
|
|
108
|
+
|
|
109
|
+
- Type hints on every function signature.
|
|
110
|
+
- Pydantic for validation; dataclasses for pure data.
|
|
111
|
+
- `pytest` with fixtures; no `unittest.TestCase`.
|
|
112
|
+
- Functions under 30 lines; one responsibility.
|
|
113
|
+
- Docstrings on public API only; self-documenting code elsewhere.
|
|
114
|
+
- Virtual environments; never global `pip install`.
|
|
115
|
+
|
|
116
|
+
### React / Next.js Stack Conventions
|
|
117
|
+
|
|
118
|
+
- TypeScript everywhere; no plain JSX files.
|
|
119
|
+
- Server Components by default; `"use client"` only when interaction demands it.
|
|
120
|
+
- App Router (`app/`); no new Pages Router code.
|
|
121
|
+
- shadcn/ui + Tailwind for UI primitives.
|
|
122
|
+
- Hooks for shared logic; no HOC or render-prop patterns in new code.
|
|
123
|
+
- Co-locate component, styles, and test; PascalCase component files.
|
|
124
|
+
|
|
125
|
+
### Vue Stack Conventions
|
|
126
|
+
|
|
127
|
+
- Composition API only; no Options API.
|
|
128
|
+
- `<script setup lang="ts">` in every component.
|
|
129
|
+
- Props and emits fully typed (`defineProps`/`defineEmits` generics).
|
|
130
|
+
- Shared reactive logic lives in composables, not mixins.
|
|
131
|
+
- One component per file; PascalCase filenames.
|
|
132
|
+
- v-for always keyed; no index keys on mutable lists.
|
|
133
|
+
|
|
134
|
+
## Scope of this file
|
|
135
|
+
|
|
136
|
+
Instruction-level export for this runtime. The full ArkaOS engine —
|
|
137
|
+
context injection, hooks, enforced quality gates, knowledge base — runs
|
|
138
|
+
on runtimes with a native adapter (`npx arkaos install`). This file
|
|
139
|
+
carries the contract so the team behaves like ArkaOS anywhere.
|