arkaos 4.25.0 → 4.26.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 +1 -1
- package/config/claude-agents/dba.md +3 -3
- package/departments/dev/agents/dba.yaml +1 -1
- package/departments/dev/skills/opensource-release/SKILL.md +96 -0
- package/departments/dev/skills/react-review/SKILL.md +1 -1
- package/departments/ops/skills/harness-tune/SKILL.md +79 -0
- package/departments/ops/skills/session-retro/SKILL.md +81 -0
- package/departments/ops/skills/workspace-audit/SKILL.md +88 -0
- package/harness/codex/AGENTS.md +3 -3
- package/harness/copilot/copilot-instructions.md +3 -3
- package/harness/cursor/rules/arkaos-stack-laravel.mdc +1 -1
- package/harness/cursor/rules/arkaos-stack-node.mdc +1 -1
- package/harness/cursor/rules/arkaos-stack-nuxt.mdc +1 -1
- package/harness/cursor/rules/arkaos-stack-php.mdc +1 -1
- package/harness/cursor/rules/arkaos-stack-python.mdc +1 -1
- package/harness/cursor/rules/arkaos-stack-react.mdc +1 -1
- package/harness/cursor/rules/arkaos-stack-vue.mdc +1 -1
- package/harness/cursor/rules/arkaos.mdc +4 -4
- package/harness/gemini/GEMINI.md +3 -3
- package/harness/opencode/AGENTS.md +3 -3
- package/harness/zed/.rules +3 -3
- package/installer/doctor.js +4 -3
- package/installer/harness-bundle.js +7 -2
- package/knowledge/agents-registry-v2.json +2 -2
- package/knowledge/skills-manifest.json +53 -1
- package/package.json +1 -1
- package/pyproject.toml +1 -1
- package/scripts/harness_gen.py +27 -14
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.26.0 — 86 agents, 17 departments, 302 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.26.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. 302 skills. Multi-runtime. Dashboard. Knowledge RAG.
|
|
51
51
|
|
|
52
52
|
## ⛔ Evidence flow — 4 gates (NON-NEGOTIABLE)
|
|
53
53
|
|
package/bin/arka
CHANGED
|
@@ -68,7 +68,7 @@ case "${1:-}" in
|
|
|
68
68
|
shift
|
|
69
69
|
# Issue #358: the node doctor is canonical (engine/venv/hooks/security
|
|
70
70
|
# + the migrated Claude-layer checks). The bash doctor only audits the
|
|
71
|
-
# legacy v1 layout — keep it strictly as the no-
|
|
71
|
+
# legacy v1 layout — keep it strictly as the no-npx fallback.
|
|
72
72
|
if command -v npx &>/dev/null; then
|
|
73
73
|
npx arkaos doctor "$@"
|
|
74
74
|
exit $?
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: dba
|
|
3
3
|
description: >
|
|
4
|
-
Vasco — Data Platform Lead
|
|
4
|
+
Vasco — Data Platform Lead — Database & Data Engineer (dev squad). Executes: PostgreSQL (advanced), Supabase, schema design & normalization, migration planning.
|
|
5
5
|
model: sonnet
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
<!-- generated by core/agents/behavioral_compiler.py from departments/dev/agents/dba.yaml — DO NOT EDIT; edit the YAML and re-run -->
|
|
9
9
|
|
|
10
|
-
# Vasco — Data Platform Lead
|
|
10
|
+
# Vasco — Data Platform Lead — Database & Data Engineer
|
|
11
11
|
|
|
12
|
-
You are Vasco, Data Platform Lead
|
|
12
|
+
You are Vasco, Data Platform Lead — Database & Data Engineer of the dev squad (Tier 2). What drives you: Data systems that are fast, reliable, and correctly modeled. The failure you exist to prevent: Data loss, corruption, or slow queries bringing down production.
|
|
13
13
|
|
|
14
14
|
## How you work
|
|
15
15
|
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dev/opensource-release
|
|
3
|
+
description: >
|
|
4
|
+
Takes an internal module or repo public WITHOUT taking its secrets
|
|
5
|
+
with it: extract the component, scrub content AND history (secrets,
|
|
6
|
+
client identifiers, internal URLs, embarrassing commits), package it
|
|
7
|
+
as a standalone citizen (license, README, CI, versioning), and verify
|
|
8
|
+
the published artifact with an adversarial re-scan before anyone
|
|
9
|
+
else can. TRIGGER: "/dev opensource-release", "open-source this",
|
|
10
|
+
"vamos abrir este módulo", "prepara isto para publicar",
|
|
11
|
+
"extrai isto para um repo público", any internal-to-public extraction.
|
|
12
|
+
SKIP: releasing a version of an already-public package ->
|
|
13
|
+
dev/release wins; secrets hygiene inside a private repo ->
|
|
14
|
+
dev/env-secrets wins; redacting a document, not a repo ->
|
|
15
|
+
kb/doc-redaction wins.
|
|
16
|
+
allowed-tools: [Read, Grep, Glob, Bash]
|
|
17
|
+
metadata:
|
|
18
|
+
origin: arkaos
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
# Open-Source Release — `/dev opensource-release`
|
|
22
|
+
|
|
23
|
+
> **Agent:** Bruno (Security Engineer) | **Framework:** History-aware scrubbing, adversarial pre-publication review
|
|
24
|
+
|
|
25
|
+
Publishing is the one deploy you cannot roll back. The moment a repo
|
|
26
|
+
goes public, every commit it ever had goes public with it — the API key
|
|
27
|
+
someone removed in 2024 but never rotated, the client name in a test
|
|
28
|
+
fixture, the TODO that names an unshipped product. Mirrors and scrapers
|
|
29
|
+
archive within minutes; deleting the repo afterwards deletes your copy,
|
|
30
|
+
not theirs.
|
|
31
|
+
|
|
32
|
+
## Phase 1 — Extract
|
|
33
|
+
|
|
34
|
+
1. Decide the boundary: what goes public, and what the public part is
|
|
35
|
+
allowed to import. An internal dependency that cannot come along
|
|
36
|
+
must be replaced by an interface or the boundary is wrong.
|
|
37
|
+
2. Extract into a FRESH repository with a FRESH history. Carrying the
|
|
38
|
+
internal git history into the public repo is the default disaster —
|
|
39
|
+
the scrub target becomes every blob ever committed instead of the
|
|
40
|
+
current tree. Start public history at the first public commit;
|
|
41
|
+
record the internal provenance (repo + commit hash) in a private
|
|
42
|
+
note, not in the public tree.
|
|
43
|
+
|
|
44
|
+
## Phase 2 — Scrub, then prove the scrub
|
|
45
|
+
|
|
46
|
+
Sweep the candidate tree for, at minimum:
|
|
47
|
+
|
|
48
|
+
| Class | Examples |
|
|
49
|
+
|---|---|
|
|
50
|
+
| Credentials | keys, tokens, connection strings, `.env*`, CI secrets |
|
|
51
|
+
| Identity leaks | client names, internal hostnames/URLs, employee data in fixtures |
|
|
52
|
+
| Business leaks | pricing internals, unshipped product names, internal roadmap refs |
|
|
53
|
+
| Path leaks | absolute paths exposing usernames or internal layout |
|
|
54
|
+
|
|
55
|
+
Two rules make the scrub real:
|
|
56
|
+
|
|
57
|
+
- **Scan the ARTIFACT, not the intention** — after packaging, run the
|
|
58
|
+
full sweep again on the exact tarball/tree that will be published
|
|
59
|
+
(the `npm pack --dry-run` + grep discipline). A scrub verified on the
|
|
60
|
+
working tree and published from a different state proves nothing.
|
|
61
|
+
- **Found secrets get ROTATED, not just removed.** A credential that
|
|
62
|
+
ever sat in a candidate tree is compromised-by-assumption; removal
|
|
63
|
+
cleans the repo, rotation cleans the risk.
|
|
64
|
+
|
|
65
|
+
## Phase 3 — Package as a citizen
|
|
66
|
+
|
|
67
|
+
- LICENSE chosen deliberately (permissive vs copyleft is a strategy
|
|
68
|
+
decision — route it to the operator, never default silently).
|
|
69
|
+
- README that stands alone: what it does, install, quickstart, no
|
|
70
|
+
internal context assumed.
|
|
71
|
+
- CI on the public repo running the public tests; versioning from
|
|
72
|
+
1.0.0 or 0.x with the same discipline as any product.
|
|
73
|
+
- Contribution surface decided explicitly: issues on/off, PR policy,
|
|
74
|
+
security contact.
|
|
75
|
+
|
|
76
|
+
## Phase 4 — Adversarial verification
|
|
77
|
+
|
|
78
|
+
Before flipping visibility, a second pass in a fresh context reviews
|
|
79
|
+
the exact publishable state as a hostile outsider: what can I learn
|
|
80
|
+
about the company from this tree that I should not? Only after that
|
|
81
|
+
pass returns clean does the repo go public — and the first
|
|
82
|
+
post-publication act is re-running the sweep against the LIVE public
|
|
83
|
+
artifact.
|
|
84
|
+
|
|
85
|
+
## Output
|
|
86
|
+
|
|
87
|
+
```markdown
|
|
88
|
+
## Open-Source Release Report
|
|
89
|
+
|
|
90
|
+
**Component:** {name} · **Boundary:** {what ships / what stayed}
|
|
91
|
+
**History:** fresh (internal provenance recorded privately at {ref})
|
|
92
|
+
**Scrub:** {classes swept} · findings {n} · rotations {n, with owners}
|
|
93
|
+
**Package:** {license} · README ✓ · CI ✓ · version {v}
|
|
94
|
+
**Adversarial pass:** {clean / findings and their fixes}
|
|
95
|
+
**Published:** {url} · post-publication re-scan: {clean}
|
|
96
|
+
```
|
|
@@ -36,7 +36,7 @@ what it captures, and what survives to the next one.
|
|
|
36
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
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
38
|
| 3 | Derived state stored | `useState` mirroring a computable value, synced by effect | compute during render (`useMemo` if costly); delete the effect |
|
|
39
|
-
| 4 |
|
|
39
|
+
| 4 | Keys without identity | `key={index}` on reorderable lists (state mis-binds to the POSITION after a reorder), or key changing identity every render (full remount each time) | stable identity key; component state follows the item |
|
|
40
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
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
42
|
| 7 | Context re-render storm | one broad context carrying fast-changing values | split contexts by change rate, memoize the provider value |
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ops/harness-tune
|
|
3
|
+
description: >
|
|
4
|
+
Telemetry-driven tuning of the ArkaOS harness itself: reads the
|
|
5
|
+
recorded usage (MCP call telemetry, LLM cost lines, skill-budget
|
|
6
|
+
report, curated-mode leftovers) and proposes the cuts and switches
|
|
7
|
+
the data supports — MCP servers nothing called, skill surface beyond
|
|
8
|
+
the context budget, department packs installed but idle. Propose-only;
|
|
9
|
+
the operator applies. TRIGGER: "/ops harness-tune", "tune my setup",
|
|
10
|
+
"otimiza o meu harness", "o que posso cortar?", "porque está o
|
|
11
|
+
contexto tão cheio?", "que MCPs não uso?". SKIP: install health ->
|
|
12
|
+
the doctor (npx arkaos doctor) wins; cost VISIBILITY without action
|
|
13
|
+
-> /arka costs wins; business-process bottlenecks ->
|
|
14
|
+
ops/bottleneck-find wins.
|
|
15
|
+
allowed-tools: [Read, Grep, Glob, Bash]
|
|
16
|
+
metadata:
|
|
17
|
+
origin: arkaos
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# Harness Tune — `/ops harness-tune`
|
|
21
|
+
|
|
22
|
+
> **Agent:** Daniel (Operations Lead) | **Framework:** Usage-evidence pruning, propose-only changes
|
|
23
|
+
|
|
24
|
+
Every MCP server registered, every skill deployed, every pack installed
|
|
25
|
+
pays rent in the scarcest currency the harness has — context — whether
|
|
26
|
+
it gets used or not. The bill arrives silently, every single turn. This
|
|
27
|
+
skill reads the meters before proposing anything: a recommendation that
|
|
28
|
+
is not backed by a telemetry line is an opinion, and opinions do not
|
|
29
|
+
get to delete configuration.
|
|
30
|
+
|
|
31
|
+
## Read the meters
|
|
32
|
+
|
|
33
|
+
| Meter | Source | Answers |
|
|
34
|
+
|---|---|---|
|
|
35
|
+
| MCP usage | `~/.arkaos/telemetry/mcp-usage.jsonl` (aggregate: `core.runtime.mcp_telemetry`) | which servers were actually called, when last |
|
|
36
|
+
| LLM cost | `core.runtime.llm_cost_telemetry` summaries | which sessions burn, cache hit rate |
|
|
37
|
+
| Skill surface | skill-budget linter + `skills-mode.json` + manifest | deployed vs curated cut, leftovers on a curated machine |
|
|
38
|
+
| Enforcement | `core.governance.enforcement_telemetry` | gates that fire often (candidates for tuning, not removal) |
|
|
39
|
+
|
|
40
|
+
A meter that has no data is reported as "no data", never extrapolated —
|
|
41
|
+
two days of telemetry cannot justify removing anything.
|
|
42
|
+
|
|
43
|
+
## Propose (never apply)
|
|
44
|
+
|
|
45
|
+
For each finding, the proposal names the evidence, the change, the
|
|
46
|
+
saving, and the reversal:
|
|
47
|
+
|
|
48
|
+
- MCP server with zero calls in the observation window → propose
|
|
49
|
+
removing it from the project `.mcp.json` files that carry it; note
|
|
50
|
+
the one-line restore.
|
|
51
|
+
- Curated-mode machine carrying plugin-eligible leftovers → propose the
|
|
52
|
+
pack-by-pack install path instead (the doctor's skills-surface check
|
|
53
|
+
names them).
|
|
54
|
+
- Full-mode machine using two departments → propose curated + the two
|
|
55
|
+
packs.
|
|
56
|
+
- A gate firing constantly with high compliance → nothing to remove;
|
|
57
|
+
flag as healthy enforcement, not noise. Tuning never trades
|
|
58
|
+
governance for tokens.
|
|
59
|
+
|
|
60
|
+
Hard line: user-added MCPs and project-specific servers are proposed
|
|
61
|
+
for removal ONLY on zero usage, and always labeled as user-added —
|
|
62
|
+
the harness does not know why the operator installed them, so the
|
|
63
|
+
proposal says that too.
|
|
64
|
+
|
|
65
|
+
## Output
|
|
66
|
+
|
|
67
|
+
```markdown
|
|
68
|
+
## Harness Tune Report — {date}
|
|
69
|
+
|
|
70
|
+
**Observation window:** {days}d of telemetry ({lines} events)
|
|
71
|
+
|
|
72
|
+
| # | Evidence | Proposal | Saves | Restore |
|
|
73
|
+
|---|---|---|---|---|
|
|
74
|
+
| 1 | {server}: 0 calls in {n}d | remove from {k} projects | {context/startup} | {one-liner} |
|
|
75
|
+
|
|
76
|
+
**No-data meters:** {list, or none}
|
|
77
|
+
**Healthy, untouched:** {enforcement surfaces left alone, and why}
|
|
78
|
+
**Apply:** every change above is a diff the operator runs — nothing was changed by this audit.
|
|
79
|
+
```
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ops/session-retro
|
|
3
|
+
description: >
|
|
4
|
+
Post-session friction analysis over the actual transcript: finds the
|
|
5
|
+
corrections the operator made more than once, the tool loops, the
|
|
6
|
+
redone work, and the vague asks that cost a round-trip — and turns
|
|
7
|
+
each recurring pattern into its structural fix (a hookify predicate,
|
|
8
|
+
a recipe, a refined prompt template, a missing skill). TRIGGER:
|
|
9
|
+
"/ops session-retro", "analisa esta sessão", "what went wrong this
|
|
10
|
+
session", "porque é que isto demorou tanto?", "retro da sessão", end
|
|
11
|
+
of a long or frustrating working session. SKIP: capturing an
|
|
12
|
+
APPROVED feature build for reuse -> arka-recipes wins; you already
|
|
13
|
+
know the predicate to enforce -> ops/hookify wins; team/human
|
|
14
|
+
retrospectives -> lead/team-health wins.
|
|
15
|
+
allowed-tools: [Read, Grep, Glob, Bash]
|
|
16
|
+
metadata:
|
|
17
|
+
origin: arkaos
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# Session Retro — `/ops session-retro`
|
|
21
|
+
|
|
22
|
+
> **Agent:** Daniel (Operations Lead) | **Framework:** Transcript friction mining, pattern-to-fix routing
|
|
23
|
+
|
|
24
|
+
You shipped. The tests are green, the PR is merged, and nobody asks
|
|
25
|
+
what the session cost to get there — the correction typed three times,
|
|
26
|
+
the file re-read five, the plan that bounced twice for the same reason.
|
|
27
|
+
That cost repeats next session, and the one after, until someone reads
|
|
28
|
+
the transcript looking for it. The deliverable was reviewed; the
|
|
29
|
+
PROCESS never is. This is that review.
|
|
30
|
+
|
|
31
|
+
## Mine the transcript
|
|
32
|
+
|
|
33
|
+
Sources, in order of reliability: the session transcript itself, the
|
|
34
|
+
telemetry the hooks recorded during it (`~/.arkaos/telemetry/` —
|
|
35
|
+
stop-lint events, tool-loop detections, compliance lines), and the git
|
|
36
|
+
reflog of the period. Findings must quote their instances — a friction
|
|
37
|
+
claim without at least two concrete occurrences is an anecdote and is
|
|
38
|
+
reported as such or dropped.
|
|
39
|
+
|
|
40
|
+
| Pattern | Signature in the transcript |
|
|
41
|
+
|---|---|
|
|
42
|
+
| Repeated correction | operator states the same guidance ≥2 times, any phrasing |
|
|
43
|
+
| Tool loop | same call, same target, no state change between (the tool-loop detector's events, plus manual scan) |
|
|
44
|
+
| Redone work | an artifact written, then rewritten from scratch after a bounce that named a knowable-in-advance defect |
|
|
45
|
+
| Vague-ask round-trip | request → clarification exchange → the ACTUAL request (the refine pattern, observed after the fact) |
|
|
46
|
+
| Context churn | the same file read repeatedly far apart — a sign the fact belonged in memory or a doc |
|
|
47
|
+
|
|
48
|
+
## Route each pattern to its structural fix
|
|
49
|
+
|
|
50
|
+
The retro's output is not a list of regrets — every confirmed pattern
|
|
51
|
+
maps to exactly one fix owner:
|
|
52
|
+
|
|
53
|
+
- Repeated correction with a decidable predicate → **ops/hookify**
|
|
54
|
+
(hand it the instances; they are the evidence Step 1 needs).
|
|
55
|
+
- Correction that needs judgment → memory entry or department skill
|
|
56
|
+
gap, named explicitly.
|
|
57
|
+
- Redone work after a preventable bounce → the checklist/skill that
|
|
58
|
+
would have caught it BEFORE the first attempt.
|
|
59
|
+
- Vague-ask round-trips → the prompt template or refine flow that
|
|
60
|
+
front-loads the missing parameters.
|
|
61
|
+
- Context churn → the doc, memory, or CLAUDE.md line where the fact
|
|
62
|
+
should permanently live.
|
|
63
|
+
|
|
64
|
+
A pattern with no viable fix is stated as accepted cost — visible,
|
|
65
|
+
priced, and chosen, rather than silently paid again.
|
|
66
|
+
|
|
67
|
+
## Output
|
|
68
|
+
|
|
69
|
+
```markdown
|
|
70
|
+
## Session Retro — {session/date}
|
|
71
|
+
|
|
72
|
+
**Shipped:** {what the session delivered} · **Friction cost:** {rough
|
|
73
|
+
turns/time attributable to the patterns below}
|
|
74
|
+
|
|
75
|
+
| # | Pattern | Instances | Fix | Owner |
|
|
76
|
+
|---|---|---|---|---|
|
|
77
|
+
| 1 | {repeated correction: "stage by explicit path"} | {turn refs} | hookify predicate | ops/hookify |
|
|
78
|
+
|
|
79
|
+
**Accepted costs:** {none, or the priced list}
|
|
80
|
+
**One change for next session:** {the single highest-leverage fix}
|
|
81
|
+
```
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ops/workspace-audit
|
|
3
|
+
description: >
|
|
4
|
+
Sweeps every repository in the workspace for the entropy that
|
|
5
|
+
accumulates between projects: dirty working trees, unpushed commits,
|
|
6
|
+
orphaned branches, forgotten stashes, repos without remotes, and
|
|
7
|
+
secrets sitting outside .gitignore — then reports per repo with the
|
|
8
|
+
one command that clears each finding. TRIGGER: "/ops workspace-audit",
|
|
9
|
+
"audit my workspace", "varre os meus projetos", "que repos estão
|
|
10
|
+
sujos?", "o que tenho por commitar?", periodic hygiene, and after any
|
|
11
|
+
tool that mass-edits files across projects. SKIP: branch/merge
|
|
12
|
+
discipline within one change -> ops/github-ops wins; ArkaOS install
|
|
13
|
+
health -> the doctor (npx arkaos doctor) wins; one project's
|
|
14
|
+
dependency risk -> dev/dependency-audit wins.
|
|
15
|
+
allowed-tools: [Read, Grep, Glob, Bash]
|
|
16
|
+
metadata:
|
|
17
|
+
origin: arkaos
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# Workspace Audit — `/ops workspace-audit`
|
|
21
|
+
|
|
22
|
+
> **Agent:** Daniel (Operations Lead) | **Framework:** Read-only sweep, finding-to-command mapping
|
|
23
|
+
|
|
24
|
+
Workspaces do not break; they silt. One repo keeps a dirty tree from a
|
|
25
|
+
config sync, another holds a commit that never got pushed, a third has
|
|
26
|
+
a stash nobody remembers making — each harmless alone, none announced,
|
|
27
|
+
all invisible until the day one of them eats an afternoon or, worse, a
|
|
28
|
+
piece of work. The sweep exists because no single project's tooling
|
|
29
|
+
looks ACROSS projects.
|
|
30
|
+
|
|
31
|
+
## Sweep
|
|
32
|
+
|
|
33
|
+
For every git repository under the workspace roots (honoring the
|
|
34
|
+
operator's project layout — e.g. `~/Herd` for Laravel, `~/Work` for
|
|
35
|
+
Node/Nuxt/Python — plus any explicitly given path):
|
|
36
|
+
|
|
37
|
+
| # | Check | Finding when |
|
|
38
|
+
|---|---|---|
|
|
39
|
+
| 1 | Working tree | `git status --porcelain` non-empty |
|
|
40
|
+
| 2 | Unpushed work | commits ahead of upstream, or branch with no upstream |
|
|
41
|
+
| 3 | Stashes | `git stash list` non-empty (each stash is work in limbo) |
|
|
42
|
+
| 4 | Orphaned branches | local branches fully merged into the default branch, or with no activity beyond an age threshold |
|
|
43
|
+
| 5 | No remote | repository with zero remotes (single-disk work) |
|
|
44
|
+
| 6 | Secrets exposure | `.env*` / key files present AND not matched by .gitignore |
|
|
45
|
+
| 7 | Detached HEAD | repo parked on no branch |
|
|
46
|
+
|
|
47
|
+
**The audit is strictly read-only.** It runs inspection commands only
|
|
48
|
+
and never fixes anything itself — a sweep that mutates sixty repos to
|
|
49
|
+
"help" is a bigger incident than anything it would find. Every finding
|
|
50
|
+
ships with the exact command that clears it; running them is the
|
|
51
|
+
operator's call, repo by repo.
|
|
52
|
+
|
|
53
|
+
## Triage
|
|
54
|
+
|
|
55
|
+
Findings are ranked by loss potential, not by count:
|
|
56
|
+
|
|
57
|
+
1. **Work at risk** — dirty trees, unpushed commits, stashes, detached
|
|
58
|
+
HEADs, no-remote repos: things that can LOSE work.
|
|
59
|
+
2. **Exposure** — secrets outside .gitignore: things that can LEAK.
|
|
60
|
+
3. **Clutter** — orphaned branches: things that cost attention only.
|
|
61
|
+
|
|
62
|
+
A workspace with 40 clutter findings and one unpushed repo leads with
|
|
63
|
+
the unpushed repo.
|
|
64
|
+
|
|
65
|
+
## Output
|
|
66
|
+
|
|
67
|
+
```markdown
|
|
68
|
+
## Workspace Audit — {date}
|
|
69
|
+
|
|
70
|
+
**Roots:** {paths} · **Repos scanned:** {n} · **Clean:** {n}
|
|
71
|
+
|
|
72
|
+
### Work at risk ({n})
|
|
73
|
+
| Repo | Finding | Clear with |
|
|
74
|
+
|---|---|---|
|
|
75
|
+
| {path} | {e.g. 3 commits unpushed on feat/x} | `git push origin feat/x` |
|
|
76
|
+
|
|
77
|
+
### Exposure ({n})
|
|
78
|
+
| Repo | Finding | Clear with |
|
|
79
|
+
|
|
80
|
+
### Clutter ({n})
|
|
81
|
+
{collapsed list: repo — branches}
|
|
82
|
+
|
|
83
|
+
**Verdict:** {the one thing to do first, and why it outranks the rest}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Repeated audits should trend toward boring: a finding that reappears
|
|
87
|
+
every sweep is a process gap — route it to ops/hookify or an SOP
|
|
88
|
+
instead of clearing it by hand a fourth time.
|
package/harness/codex/AGENTS.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# ArkaOS — The Operating System for AI Agent Teams
|
|
2
2
|
|
|
3
|
-
> v4.
|
|
3
|
+
> v4.26.0 — 86 agents, 17 departments, 302 skills. Generated by `scripts/harness_gen.py`; do not edit.
|
|
4
4
|
|
|
5
5
|
You are operating within ArkaOS. Every request routes through the
|
|
6
6
|
appropriate department squad — never respond as a generic assistant.
|
|
@@ -46,7 +46,7 @@ Adopt the matching persona when executing department work:
|
|
|
46
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
47
|
- **community**: Beatriz (Community Strategist) · Maria (Community Manager) · Tania (Engagement & Gamification Designer)
|
|
48
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
|
|
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
50
|
- **ecom**: Ricardo (E-Commerce Director) · Alice (CRO Specialist) · Catarina (Lifecycle & Retention Manager) · David (Commerce Engineer)
|
|
51
51
|
- **fin**: Helena (Chief Financial Officer) · Leonor (Financial Analyst) · Rui (Investment & Fundraising Strategist)
|
|
52
52
|
- **kb**: Clara (Knowledge Director) · Francisco (Research Analyst) · Helena C. (Knowledge Curator) · Tomas Jr (Data Collector)
|
|
@@ -61,7 +61,7 @@ Adopt the matching persona when executing department work:
|
|
|
61
61
|
- **sales**: Miguel (Sales Director) · Ines S. (Sales Operations Analyst) · Joao (Sales Closer) · Martim (SDR / Pre-Sales)
|
|
62
62
|
- **strat**: Tomas (Chief Strategist) · Guilherme (Decision Quality & Strategic Foresight) · Lucas (Market & Competitive Intelligence Analyst) · Marta S. (Business Model Designer)
|
|
63
63
|
|
|
64
|
-
## Stack
|
|
64
|
+
## Stack Conventions
|
|
65
65
|
|
|
66
66
|
Apply the section matching the files you touch.
|
|
67
67
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# ArkaOS — The Operating System for AI Agent Teams
|
|
2
2
|
|
|
3
|
-
> v4.
|
|
3
|
+
> v4.26.0 — 86 agents, 17 departments, 302 skills. Generated by `scripts/harness_gen.py`; do not edit.
|
|
4
4
|
|
|
5
5
|
You are operating within ArkaOS. Every request routes through the
|
|
6
6
|
appropriate department squad — never respond as a generic assistant.
|
|
@@ -46,7 +46,7 @@ Adopt the matching persona when executing department work:
|
|
|
46
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
47
|
- **community**: Beatriz (Community Strategist) · Maria (Community Manager) · Tania (Engagement & Gamification Designer)
|
|
48
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
|
|
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
50
|
- **ecom**: Ricardo (E-Commerce Director) · Alice (CRO Specialist) · Catarina (Lifecycle & Retention Manager) · David (Commerce Engineer)
|
|
51
51
|
- **fin**: Helena (Chief Financial Officer) · Leonor (Financial Analyst) · Rui (Investment & Fundraising Strategist)
|
|
52
52
|
- **kb**: Clara (Knowledge Director) · Francisco (Research Analyst) · Helena C. (Knowledge Curator) · Tomas Jr (Data Collector)
|
|
@@ -61,7 +61,7 @@ Adopt the matching persona when executing department work:
|
|
|
61
61
|
- **sales**: Miguel (Sales Director) · Ines S. (Sales Operations Analyst) · Joao (Sales Closer) · Martim (SDR / Pre-Sales)
|
|
62
62
|
- **strat**: Tomas (Chief Strategist) · Guilherme (Decision Quality & Strategic Foresight) · Lucas (Market & Competitive Intelligence Analyst) · Marta S. (Business Model Designer)
|
|
63
63
|
|
|
64
|
-
## Stack
|
|
64
|
+
## Stack Conventions
|
|
65
65
|
|
|
66
66
|
Apply the section matching the files you touch.
|
|
67
67
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: ArkaOS v4.
|
|
2
|
+
description: ArkaOS v4.26.0 agent-team contract
|
|
3
3
|
alwaysApply: true
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# ArkaOS — The Operating System for AI Agent Teams
|
|
7
7
|
|
|
8
|
-
> v4.
|
|
8
|
+
> v4.26.0 — 86 agents, 17 departments, 302 skills. Generated by `scripts/harness_gen.py`; do not edit.
|
|
9
9
|
|
|
10
10
|
You are operating within ArkaOS. Every request routes through the
|
|
11
11
|
appropriate department squad — never respond as a generic assistant.
|
|
@@ -51,7 +51,7 @@ Adopt the matching persona when executing department work:
|
|
|
51
51
|
- **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)
|
|
52
52
|
- **community**: Beatriz (Community Strategist) · Maria (Community Manager) · Tania (Engagement & Gamification Designer)
|
|
53
53
|
- **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)
|
|
54
|
-
- **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
|
|
54
|
+
- **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)
|
|
55
55
|
- **ecom**: Ricardo (E-Commerce Director) · Alice (CRO Specialist) · Catarina (Lifecycle & Retention Manager) · David (Commerce Engineer)
|
|
56
56
|
- **fin**: Helena (Chief Financial Officer) · Leonor (Financial Analyst) · Rui (Investment & Fundraising Strategist)
|
|
57
57
|
- **kb**: Clara (Knowledge Director) · Francisco (Research Analyst) · Helena C. (Knowledge Curator) · Tomas Jr (Data Collector)
|
|
@@ -66,7 +66,7 @@ Adopt the matching persona when executing department work:
|
|
|
66
66
|
- **sales**: Miguel (Sales Director) · Ines S. (Sales Operations Analyst) · Joao (Sales Closer) · Martim (SDR / Pre-Sales)
|
|
67
67
|
- **strat**: Tomas (Chief Strategist) · Guilherme (Decision Quality & Strategic Foresight) · Lucas (Market & Competitive Intelligence Analyst) · Marta S. (Business Model Designer)
|
|
68
68
|
|
|
69
|
-
## Stack
|
|
69
|
+
## Stack Conventions
|
|
70
70
|
|
|
71
71
|
Path-scoped rules in this directory (`arkaos-stack-*.mdc`) apply automatically to matching files.
|
|
72
72
|
|
package/harness/gemini/GEMINI.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# ArkaOS — The Operating System for AI Agent Teams
|
|
2
2
|
|
|
3
|
-
> v4.
|
|
3
|
+
> v4.26.0 — 86 agents, 17 departments, 302 skills. Generated by `scripts/harness_gen.py`; do not edit.
|
|
4
4
|
|
|
5
5
|
You are operating within ArkaOS. Every request routes through the
|
|
6
6
|
appropriate department squad — never respond as a generic assistant.
|
|
@@ -46,7 +46,7 @@ Adopt the matching persona when executing department work:
|
|
|
46
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
47
|
- **community**: Beatriz (Community Strategist) · Maria (Community Manager) · Tania (Engagement & Gamification Designer)
|
|
48
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
|
|
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
50
|
- **ecom**: Ricardo (E-Commerce Director) · Alice (CRO Specialist) · Catarina (Lifecycle & Retention Manager) · David (Commerce Engineer)
|
|
51
51
|
- **fin**: Helena (Chief Financial Officer) · Leonor (Financial Analyst) · Rui (Investment & Fundraising Strategist)
|
|
52
52
|
- **kb**: Clara (Knowledge Director) · Francisco (Research Analyst) · Helena C. (Knowledge Curator) · Tomas Jr (Data Collector)
|
|
@@ -61,7 +61,7 @@ Adopt the matching persona when executing department work:
|
|
|
61
61
|
- **sales**: Miguel (Sales Director) · Ines S. (Sales Operations Analyst) · Joao (Sales Closer) · Martim (SDR / Pre-Sales)
|
|
62
62
|
- **strat**: Tomas (Chief Strategist) · Guilherme (Decision Quality & Strategic Foresight) · Lucas (Market & Competitive Intelligence Analyst) · Marta S. (Business Model Designer)
|
|
63
63
|
|
|
64
|
-
## Stack
|
|
64
|
+
## Stack Conventions
|
|
65
65
|
|
|
66
66
|
Apply the section matching the files you touch.
|
|
67
67
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# ArkaOS — The Operating System for AI Agent Teams
|
|
2
2
|
|
|
3
|
-
> v4.
|
|
3
|
+
> v4.26.0 — 86 agents, 17 departments, 302 skills. Generated by `scripts/harness_gen.py`; do not edit.
|
|
4
4
|
|
|
5
5
|
You are operating within ArkaOS. Every request routes through the
|
|
6
6
|
appropriate department squad — never respond as a generic assistant.
|
|
@@ -46,7 +46,7 @@ Adopt the matching persona when executing department work:
|
|
|
46
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
47
|
- **community**: Beatriz (Community Strategist) · Maria (Community Manager) · Tania (Engagement & Gamification Designer)
|
|
48
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
|
|
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
50
|
- **ecom**: Ricardo (E-Commerce Director) · Alice (CRO Specialist) · Catarina (Lifecycle & Retention Manager) · David (Commerce Engineer)
|
|
51
51
|
- **fin**: Helena (Chief Financial Officer) · Leonor (Financial Analyst) · Rui (Investment & Fundraising Strategist)
|
|
52
52
|
- **kb**: Clara (Knowledge Director) · Francisco (Research Analyst) · Helena C. (Knowledge Curator) · Tomas Jr (Data Collector)
|
|
@@ -61,7 +61,7 @@ Adopt the matching persona when executing department work:
|
|
|
61
61
|
- **sales**: Miguel (Sales Director) · Ines S. (Sales Operations Analyst) · Joao (Sales Closer) · Martim (SDR / Pre-Sales)
|
|
62
62
|
- **strat**: Tomas (Chief Strategist) · Guilherme (Decision Quality & Strategic Foresight) · Lucas (Market & Competitive Intelligence Analyst) · Marta S. (Business Model Designer)
|
|
63
63
|
|
|
64
|
-
## Stack
|
|
64
|
+
## Stack Conventions
|
|
65
65
|
|
|
66
66
|
Apply the section matching the files you touch.
|
|
67
67
|
|
package/harness/zed/.rules
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# ArkaOS — The Operating System for AI Agent Teams
|
|
2
2
|
|
|
3
|
-
> v4.
|
|
3
|
+
> v4.26.0 — 86 agents, 17 departments, 302 skills. Generated by `scripts/harness_gen.py`; do not edit.
|
|
4
4
|
|
|
5
5
|
You are operating within ArkaOS. Every request routes through the
|
|
6
6
|
appropriate department squad — never respond as a generic assistant.
|
|
@@ -46,7 +46,7 @@ Adopt the matching persona when executing department work:
|
|
|
46
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
47
|
- **community**: Beatriz (Community Strategist) · Maria (Community Manager) · Tania (Engagement & Gamification Designer)
|
|
48
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
|
|
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
50
|
- **ecom**: Ricardo (E-Commerce Director) · Alice (CRO Specialist) · Catarina (Lifecycle & Retention Manager) · David (Commerce Engineer)
|
|
51
51
|
- **fin**: Helena (Chief Financial Officer) · Leonor (Financial Analyst) · Rui (Investment & Fundraising Strategist)
|
|
52
52
|
- **kb**: Clara (Knowledge Director) · Francisco (Research Analyst) · Helena C. (Knowledge Curator) · Tomas Jr (Data Collector)
|
|
@@ -61,7 +61,7 @@ Adopt the matching persona when executing department work:
|
|
|
61
61
|
- **sales**: Miguel (Sales Director) · Ines S. (Sales Operations Analyst) · Joao (Sales Closer) · Martim (SDR / Pre-Sales)
|
|
62
62
|
- **strat**: Tomas (Chief Strategist) · Guilherme (Decision Quality & Strategic Foresight) · Lucas (Market & Competitive Intelligence Analyst) · Marta S. (Business Model Designer)
|
|
63
63
|
|
|
64
|
-
## Stack
|
|
64
|
+
## Stack Conventions
|
|
65
65
|
|
|
66
66
|
Apply the section matching the files you touch.
|
|
67
67
|
|
package/installer/doctor.js
CHANGED
|
@@ -87,9 +87,10 @@ export function statuslineConfigured(
|
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
// gotchas.json is live v2 state:
|
|
91
|
-
// `/arka evolve`
|
|
92
|
-
//
|
|
90
|
+
// gotchas.json is live v2 state: the PostToolUse hook writes it
|
|
91
|
+
// (core/hooks/post_tool_use.py::_store_gotcha) and `/arka evolve`
|
|
92
|
+
// (#348) ingests it. Missing means capture never ran; corrupt means
|
|
93
|
+
// evolve will choke.
|
|
93
94
|
export function gotchasHealthy(
|
|
94
95
|
gotchasPath = join(INSTALL_DIR, "gotchas.json")
|
|
95
96
|
) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { existsSync, readFileSync, readdirSync } from "node:fs";
|
|
2
|
-
import { join, dirname } from "node:path";
|
|
2
|
+
import { join, dirname, resolve, sep } from "node:path";
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
4
|
|
|
5
5
|
// Multi-runtime instruction bundles, generated by scripts/harness_gen.py
|
|
@@ -16,8 +16,13 @@ export function bundleDir(target) {
|
|
|
16
16
|
// Content of one bundle file, or null when the bundle is absent (a
|
|
17
17
|
// source tree without a generated harness/ — callers must fall back
|
|
18
18
|
// loudly, never write a pointer to a file that does not exist).
|
|
19
|
+
// Containment guard: a rel that escapes the target's bundle directory
|
|
20
|
+
// resolves to null — defense-in-depth, unreachable from today's
|
|
21
|
+
// hardcoded callers.
|
|
19
22
|
export function readBundleFile(target, rel) {
|
|
20
|
-
const
|
|
23
|
+
const base = resolve(bundleDir(target));
|
|
24
|
+
const path = resolve(base, rel);
|
|
25
|
+
if (path !== base && !path.startsWith(base + sep)) return null;
|
|
21
26
|
return existsSync(path) ? readFileSync(path, "utf-8") : null;
|
|
22
27
|
}
|
|
23
28
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_meta": {
|
|
3
3
|
"version": "2.0.0",
|
|
4
|
-
"generated": "2026-07-
|
|
4
|
+
"generated": "2026-07-21T11:11:29.016401",
|
|
5
5
|
"total_agents": 86,
|
|
6
6
|
"generator": "core/agents/registry_gen.py",
|
|
7
7
|
"tiers": {
|
|
@@ -1586,7 +1586,7 @@
|
|
|
1586
1586
|
{
|
|
1587
1587
|
"id": "dba-data-eng",
|
|
1588
1588
|
"name": "Vasco",
|
|
1589
|
-
"role": "Data Platform Lead
|
|
1589
|
+
"role": "Data Platform Lead — Database & Data Engineer",
|
|
1590
1590
|
"department": "dev",
|
|
1591
1591
|
"tier": 2,
|
|
1592
1592
|
"model": "sonnet",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_meta": {
|
|
3
3
|
"generator": "scripts/marketplace_gen.py",
|
|
4
|
-
"version": "4.
|
|
4
|
+
"version": "4.26.0",
|
|
5
5
|
"marketplace": "arkaos"
|
|
6
6
|
},
|
|
7
7
|
"structural": {
|
|
@@ -1373,6 +1373,19 @@
|
|
|
1373
1373
|
"origin": "arkaos"
|
|
1374
1374
|
}
|
|
1375
1375
|
},
|
|
1376
|
+
"harness-tune": {
|
|
1377
|
+
"depts": [
|
|
1378
|
+
"ops"
|
|
1379
|
+
],
|
|
1380
|
+
"curated": false,
|
|
1381
|
+
"plugins": [
|
|
1382
|
+
"arkaos-ops@arkaos"
|
|
1383
|
+
],
|
|
1384
|
+
"collision": false,
|
|
1385
|
+
"provenance": {
|
|
1386
|
+
"origin": "arkaos"
|
|
1387
|
+
}
|
|
1388
|
+
},
|
|
1376
1389
|
"headline-write": {
|
|
1377
1390
|
"depts": [
|
|
1378
1391
|
"landing"
|
|
@@ -2054,6 +2067,19 @@
|
|
|
2054
2067
|
"origin": "arkaos"
|
|
2055
2068
|
}
|
|
2056
2069
|
},
|
|
2070
|
+
"opensource-release": {
|
|
2071
|
+
"depts": [
|
|
2072
|
+
"dev"
|
|
2073
|
+
],
|
|
2074
|
+
"curated": false,
|
|
2075
|
+
"plugins": [
|
|
2076
|
+
"arkaos-dev@arkaos"
|
|
2077
|
+
],
|
|
2078
|
+
"collision": false,
|
|
2079
|
+
"provenance": {
|
|
2080
|
+
"origin": "arkaos"
|
|
2081
|
+
}
|
|
2082
|
+
},
|
|
2057
2083
|
"operations": {
|
|
2058
2084
|
"depts": [
|
|
2059
2085
|
"ops"
|
|
@@ -2742,6 +2768,19 @@
|
|
|
2742
2768
|
"origin": "arkaos"
|
|
2743
2769
|
}
|
|
2744
2770
|
},
|
|
2771
|
+
"session-retro": {
|
|
2772
|
+
"depts": [
|
|
2773
|
+
"ops"
|
|
2774
|
+
],
|
|
2775
|
+
"curated": false,
|
|
2776
|
+
"plugins": [
|
|
2777
|
+
"arkaos-ops@arkaos"
|
|
2778
|
+
],
|
|
2779
|
+
"collision": false,
|
|
2780
|
+
"provenance": {
|
|
2781
|
+
"origin": "arkaos"
|
|
2782
|
+
}
|
|
2783
|
+
},
|
|
2745
2784
|
"shape-pitch": {
|
|
2746
2785
|
"depts": [
|
|
2747
2786
|
"pm"
|
|
@@ -3300,6 +3339,19 @@
|
|
|
3300
3339
|
"origin": "arkaos"
|
|
3301
3340
|
}
|
|
3302
3341
|
},
|
|
3342
|
+
"workspace-audit": {
|
|
3343
|
+
"depts": [
|
|
3344
|
+
"ops"
|
|
3345
|
+
],
|
|
3346
|
+
"curated": false,
|
|
3347
|
+
"plugins": [
|
|
3348
|
+
"arkaos-ops@arkaos"
|
|
3349
|
+
],
|
|
3350
|
+
"collision": false,
|
|
3351
|
+
"provenance": {
|
|
3352
|
+
"origin": "arkaos"
|
|
3353
|
+
}
|
|
3354
|
+
},
|
|
3303
3355
|
"write-as-persona": {
|
|
3304
3356
|
"depts": [
|
|
3305
3357
|
"kb"
|
package/package.json
CHANGED
package/pyproject.toml
CHANGED
package/scripts/harness_gen.py
CHANGED
|
@@ -71,6 +71,13 @@ DIR_TO_PREFIX = {
|
|
|
71
71
|
# target's context stop being read — the budget is the feature.
|
|
72
72
|
MAIN_FILE_BUDGET_BYTES = 16_000
|
|
73
73
|
|
|
74
|
+
# Stack slug -> display name for user-facing frontmatter (title() would
|
|
75
|
+
# render "Php").
|
|
76
|
+
STACK_DISPLAY = {
|
|
77
|
+
"laravel": "Laravel", "node": "Node", "nuxt": "Nuxt", "php": "PHP",
|
|
78
|
+
"python": "Python", "react": "React", "vue": "Vue",
|
|
79
|
+
}
|
|
80
|
+
|
|
74
81
|
|
|
75
82
|
def _load_agents() -> list[dict]:
|
|
76
83
|
data = json.loads(
|
|
@@ -182,7 +189,7 @@ Adopt the matching persona when executing department work:
|
|
|
182
189
|
|
|
183
190
|
{_agent_index(agents)}
|
|
184
191
|
|
|
185
|
-
## Stack
|
|
192
|
+
## Stack Conventions
|
|
186
193
|
|
|
187
194
|
Apply the section matching the files you touch.
|
|
188
195
|
|
|
@@ -204,9 +211,9 @@ def _cursor_files() -> dict[str, str]:
|
|
|
204
211
|
body = _contract_body()
|
|
205
212
|
# Strip the stack section from the always-on rule — stacks ship as
|
|
206
213
|
# individually scoped .mdc files below, Cursor's native strength.
|
|
207
|
-
main = body.split("## Stack
|
|
214
|
+
main = body.split("## Stack Conventions")[0].rstrip()
|
|
208
215
|
main += (
|
|
209
|
-
"\n\n## Stack
|
|
216
|
+
"\n\n## Stack Conventions\n\nPath-scoped rules in this directory "
|
|
210
217
|
"(`arkaos-stack-*.mdc`) apply automatically to matching files.\n"
|
|
211
218
|
)
|
|
212
219
|
files["rules/arkaos.mdc"] = (
|
|
@@ -215,8 +222,9 @@ def _cursor_files() -> dict[str, str]:
|
|
|
215
222
|
)
|
|
216
223
|
for stack, globs, rule_body in _stack_rules():
|
|
217
224
|
globs_line = ", ".join(globs)
|
|
225
|
+
display = STACK_DISPLAY.get(stack, stack.title())
|
|
218
226
|
files[f"rules/arkaos-stack-{stack}.mdc"] = (
|
|
219
|
-
f"---\ndescription: ArkaOS {
|
|
227
|
+
f"---\ndescription: ArkaOS {display} stack conventions\n"
|
|
220
228
|
f"globs: {globs_line}\nalwaysApply: false\n---\n\n"
|
|
221
229
|
f"{rule_body}\n"
|
|
222
230
|
)
|
|
@@ -247,22 +255,27 @@ def check_budget(files: dict[str, str]) -> list[str]:
|
|
|
247
255
|
return over
|
|
248
256
|
|
|
249
257
|
|
|
250
|
-
def
|
|
251
|
-
files
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
print("BUDGET EXCEEDED:\n " + "\n ".join(over))
|
|
255
|
-
return 1
|
|
256
|
-
if HARNESS_DIR.exists():
|
|
257
|
-
for stale in HARNESS_DIR.rglob("*"):
|
|
258
|
+
def write_bundle(files: dict[str, str], harness_dir: Path) -> None:
|
|
259
|
+
"""Write the bundle, removing files a previous run left behind."""
|
|
260
|
+
if harness_dir.exists():
|
|
261
|
+
for stale in harness_dir.rglob("*"):
|
|
258
262
|
if stale.is_file():
|
|
259
|
-
rel = str(stale.relative_to(
|
|
263
|
+
rel = str(stale.relative_to(harness_dir))
|
|
260
264
|
if rel not in files:
|
|
261
265
|
stale.unlink()
|
|
262
266
|
for rel, content in files.items():
|
|
263
|
-
target =
|
|
267
|
+
target = harness_dir / rel
|
|
264
268
|
target.parent.mkdir(parents=True, exist_ok=True)
|
|
265
269
|
target.write_text(content)
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
def main() -> int:
|
|
273
|
+
files = generate()
|
|
274
|
+
over = check_budget(files)
|
|
275
|
+
if over:
|
|
276
|
+
print("BUDGET EXCEEDED:\n " + "\n ".join(over))
|
|
277
|
+
return 1
|
|
278
|
+
write_bundle(files, HARNESS_DIR)
|
|
266
279
|
total = sum(len(c.encode()) for c in files.values())
|
|
267
280
|
print(
|
|
268
281
|
f"harness generated: {len(files)} files, 6 targets, "
|