arkaos 4.19.0 → 4.21.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/VERSION +1 -1
- package/arka/SKILL.md +1 -1
- package/departments/dev/skills/exploit-triage/SKILL.md +77 -0
- package/departments/dev/skills/ml-adoption-playbook/SKILL.md +88 -0
- package/departments/dev/skills/mle-workflow/SKILL.md +97 -0
- package/departments/dev/skills/safety-review/SKILL.md +75 -0
- package/departments/kb/skills/knowledge-ops/SKILL.md +88 -0
- package/departments/ops/skills/github-ops/SKILL.md +89 -0
- package/departments/ops/skills/terminal-ops/SKILL.md +83 -0
- package/knowledge/skills-manifest.json +92 -1
- package/package.json +1 -1
- package/pyproject.toml +1 -1
package/README.md
CHANGED
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
4.
|
|
1
|
+
4.21.0
|
package/arka/SKILL.md
CHANGED
|
@@ -25,7 +25,7 @@ measures citation compliance per turn.
|
|
|
25
25
|
# ArkaOS — Main Orchestrator
|
|
26
26
|
|
|
27
27
|
> **The Operating System for AI Agent Teams**
|
|
28
|
-
> 86 agents. 17 departments.
|
|
28
|
+
> 86 agents. 17 departments. 290 skills. Multi-runtime. Dashboard. Knowledge RAG.
|
|
29
29
|
|
|
30
30
|
## ⛔ Evidence flow — 4 gates (NON-NEGOTIABLE)
|
|
31
31
|
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dev/exploit-triage
|
|
3
|
+
description: >
|
|
4
|
+
Reviews code for the vulnerabilities that are actually reachable and
|
|
5
|
+
actually exploitable — SSRF, auth bypass, injection, insecure
|
|
6
|
+
deserialisation, IDOR — biased toward a remote, unauthenticated
|
|
7
|
+
attacker, and discards the theoretical. Answers "can someone reach and
|
|
8
|
+
weaponise this?", not "is this textbook-perfect?". TRIGGER: "/dev
|
|
9
|
+
exploit-triage", "is this exploitable", "attack surface", "can this be
|
|
10
|
+
reached", "SSRF/IDOR/auth bypass", "isto é explorável?", "que dano real
|
|
11
|
+
se tira daqui?"; run on a diff touching auth, input handling, requests,
|
|
12
|
+
deserialisation, or file/db access. SKIP: broad OWASP/quality pass ->
|
|
13
|
+
dev/security-audit wins; adversarially breaking a diff (abuse cases,
|
|
14
|
+
threat-modelling a change) -> dev/adversarial-review wins; planning a
|
|
15
|
+
full offensive engagement (signed RoE, ATT&CK campaign) -> dev/red-team
|
|
16
|
+
wins; agent/prompt-injection threats -> dev/ai-security wins.
|
|
17
|
+
allowed-tools: [Read, Grep, Glob]
|
|
18
|
+
metadata:
|
|
19
|
+
origin: arkaos
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# Exploit Triage — `/dev exploit-triage`
|
|
23
|
+
|
|
24
|
+
> **Agent:** Bruno (Security Engineer) | **Framework:** Reachability-first, attacker-economics, CWE Top 25
|
|
25
|
+
|
|
26
|
+
A security review that lists every theoretical weakness buries the one
|
|
27
|
+
that gets you breached. This lens inverts the priority: it starts from a
|
|
28
|
+
remote, unauthenticated attacker and asks, of each finding, whether they
|
|
29
|
+
can reach the code path and whether reaching it actually pays. A missing
|
|
30
|
+
security header on an internal admin page is a note; an SSRF on a
|
|
31
|
+
user-supplied URL that reaches the cloud metadata endpoint is the report.
|
|
32
|
+
Reachability and impact rank everything; the textbook comes second.
|
|
33
|
+
|
|
34
|
+
## What to hunt (reachability-first)
|
|
35
|
+
|
|
36
|
+
| Class | The question that decides severity |
|
|
37
|
+
|-------|-----------------------------------|
|
|
38
|
+
| **SSRF** (CWE-918) | Does a user-controlled URL/host reach a fetch, and can it hit internal services or a metadata endpoint? |
|
|
39
|
+
| **Auth / access bypass** (CWE-287/862, IDOR CWE-639) | Can the check be skipped, or an object accessed by ID without ownership (IDOR)? |
|
|
40
|
+
| **Injection** (CWE-74: SQLi/command/template) | Does untrusted input reach a query, a shell, or a template unparameterised? |
|
|
41
|
+
| **Insecure deserialisation** (CWE-502) | Is attacker-controlled data deserialised into objects (pickle, unsafe YAML, native serialisers)? |
|
|
42
|
+
| **Path traversal / upload** | Can a user steer a file path or upload an executable/served type? |
|
|
43
|
+
| **Secrets & SSRF-adjacent** | A leaked credential or an open redirect that chains into the above. |
|
|
44
|
+
|
|
45
|
+
## Process
|
|
46
|
+
|
|
47
|
+
1. Map the **entry points** in the diff — what an unauthenticated request can reach, then what an authenticated-but-untrusted user can.
|
|
48
|
+
2. For each candidate, trace the taint: does attacker input reach the sink, and is there a real control in the way?
|
|
49
|
+
3. Rank by **reachability × impact**, not by CWE checklist order. Discard the theoretically-imperfect-but-unreachable with a one-line note, so the real findings are not buried.
|
|
50
|
+
4. For each real finding, give the **concrete attack** (the request an attacker sends) and the fix.
|
|
51
|
+
|
|
52
|
+
## Proactive Triggers
|
|
53
|
+
|
|
54
|
+
Surface these WITHOUT being asked:
|
|
55
|
+
|
|
56
|
+
- a user-supplied URL or hostname flowing into an HTTP client → the SSRF, and whether it can reach the metadata endpoint
|
|
57
|
+
- an object fetched by an ID from the request with no ownership check → the IDOR and the horizontal access it grants
|
|
58
|
+
- `pickle.loads` / `yaml.load` / a native deserialiser on request data → the deserialisation-to-RCE path
|
|
59
|
+
|
|
60
|
+
## Output
|
|
61
|
+
|
|
62
|
+
```markdown
|
|
63
|
+
## Exploit Triage
|
|
64
|
+
|
|
65
|
+
**Scope:** {diff / entry points reviewed}
|
|
66
|
+
**Attacker model:** {remote unauth / authenticated untrusted}
|
|
67
|
+
|
|
68
|
+
### Exploitable (reachable + impactful)
|
|
69
|
+
- **{class}** {file}:{line}
|
|
70
|
+
- **Reach:** {how the attacker gets input to the sink}
|
|
71
|
+
- **Attack:** {the concrete request/payload}
|
|
72
|
+
- **Impact:** {what it grants}
|
|
73
|
+
- **Fix:** {the specific control}
|
|
74
|
+
|
|
75
|
+
### Noted, not exploitable (unreachable or low impact)
|
|
76
|
+
- {finding} — {why it does not pay}, one line each
|
|
77
|
+
```
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dev/ml-adoption-playbook
|
|
3
|
+
description: >
|
|
4
|
+
Decides whether a problem needs ML at all, then adds it to a non-ML
|
|
5
|
+
codebase the cheap way — heuristic baseline first, a defined metric and
|
|
6
|
+
mistake budget, data readiness, and a decoupled seam before any model.
|
|
7
|
+
TRIGGER: "/dev ml-adoption-playbook", "should we use ML for this", "add
|
|
8
|
+
ML to", "is this an ML problem", "machine learning for X", "vale a pena
|
|
9
|
+
ML aqui?", "adicionar ML ao projeto", "modelo ou regras?". SKIP: the
|
|
10
|
+
model is already chosen and the job is to productionise it ->
|
|
11
|
+
dev/mle-workflow wins; a ranking/feed pipeline's plumbing ->
|
|
12
|
+
dev/rag-architect or dev/architecture-design wins.
|
|
13
|
+
allowed-tools: [Read, Grep, Glob]
|
|
14
|
+
metadata:
|
|
15
|
+
origin: arkaos
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# ML Adoption Playbook — `/dev ml-adoption-playbook`
|
|
19
|
+
|
|
20
|
+
> **Agent:** Salvador (AI Engineering Specialist) | **Framework:** Heuristic-first, metric-and-mistake-budget, incremental adoption
|
|
21
|
+
|
|
22
|
+
The most expensive way to add machine learning to a product is to reach
|
|
23
|
+
for a model before asking whether rules would do. A regex, a threshold,
|
|
24
|
+
or a lookup table ships in an afternoon, is trivial to debug, and is
|
|
25
|
+
often within a few points of what a model would give — and if it is not,
|
|
26
|
+
it becomes the baseline the model has to beat. This playbook decides
|
|
27
|
+
whether the problem is really an ML problem, and if it is, adds ML to a
|
|
28
|
+
codebase that has none of the scaffolding, one committed step at a time.
|
|
29
|
+
|
|
30
|
+
## Phase 1 — Framing & feasibility (before any model)
|
|
31
|
+
|
|
32
|
+
- **Heuristic check.** Could a rule, threshold, or lookup solve this
|
|
33
|
+
acceptably? If yes, ship that first — it is the baseline and often the
|
|
34
|
+
answer. A model that cannot beat a well-tuned heuristic is not worth
|
|
35
|
+
its operational cost.
|
|
36
|
+
- **Metric.** Define how success is measured, tied to the product
|
|
37
|
+
decision — before touching data. No metric, no project.
|
|
38
|
+
- **Mistake budget.** State what a wrong prediction costs and how many
|
|
39
|
+
are tolerable. This sets the bar the model must clear and whether a
|
|
40
|
+
human stays in the loop.
|
|
41
|
+
- **Data reality.** Do labelled examples exist, or a path to them? Is the
|
|
42
|
+
outcome observable, and when? A problem with no labels and no path to
|
|
43
|
+
them is not yet an ML problem.
|
|
44
|
+
|
|
45
|
+
## Phase 2 — Data readiness
|
|
46
|
+
|
|
47
|
+
- Locate the data that would feed the model; assess volume, quality, and
|
|
48
|
+
bias before assuming it is usable.
|
|
49
|
+
- Confirm the label is available at the time a prediction is needed, not
|
|
50
|
+
only in hindsight.
|
|
51
|
+
|
|
52
|
+
## Phase 3 — Architectural seam
|
|
53
|
+
|
|
54
|
+
- Add a decoupled boundary where the prediction plugs in — an interface
|
|
55
|
+
the current heuristic satisfies too, so the model can replace the rule
|
|
56
|
+
without rewiring the app.
|
|
57
|
+
- Keep the heuristic as the fallback and the regression baseline.
|
|
58
|
+
|
|
59
|
+
## Phase 4 — Baseline model
|
|
60
|
+
|
|
61
|
+
- Integrate the simplest model that could work behind the seam; compare
|
|
62
|
+
it to the heuristic on the defined metric and mistake budget.
|
|
63
|
+
- Promote only if it clears the bar. If it does not, the heuristic stays
|
|
64
|
+
and the finding is recorded — a negative result is still a result.
|
|
65
|
+
|
|
66
|
+
## Proactive Triggers
|
|
67
|
+
|
|
68
|
+
Surface these WITHOUT being asked:
|
|
69
|
+
|
|
70
|
+
- a request to "use ML" for something a threshold or lookup handles → propose the heuristic baseline first and the bar the model must beat
|
|
71
|
+
- an ML plan with no defined metric or mistake budget → stop; those come before data
|
|
72
|
+
- no labelled data and no path to it → this is not yet an ML problem; name what would make it one
|
|
73
|
+
|
|
74
|
+
## Output
|
|
75
|
+
|
|
76
|
+
```markdown
|
|
77
|
+
## ML Adoption Assessment
|
|
78
|
+
|
|
79
|
+
**Problem:** {what decision needs to be made}
|
|
80
|
+
**Heuristic baseline:** {the rule that ships today, and how close it gets}
|
|
81
|
+
**Verdict:** {ML justified? / heuristic suffices / not yet an ML problem}
|
|
82
|
+
|
|
83
|
+
### If ML is justified
|
|
84
|
+
- **Metric & bar:** {measure + threshold the model must beat the baseline by}
|
|
85
|
+
- **Mistake budget:** {cost of a wrong call + human-in-loop or not}
|
|
86
|
+
- **Data readiness:** {labels? volume? label latency?}
|
|
87
|
+
- **Seam:** {the interface where the model plugs in, heuristic as fallback}
|
|
88
|
+
```
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dev/mle-workflow
|
|
3
|
+
description: >
|
|
4
|
+
Turns model work into a production ML system — data contracts,
|
|
5
|
+
reproducible training, measurable eval gates, a deployable artifact,
|
|
6
|
+
and monitoring with a rollback path — using only the lanes the system
|
|
7
|
+
needs. TRIGGER: "/dev mle-workflow", "productionise this model", "ML
|
|
8
|
+
pipeline", "ranking/recommender/classifier/forecasting system", "model
|
|
9
|
+
refresh", "pôr o modelo em produção", "notebook para pipeline", "eval
|
|
10
|
+
gate do modelo". SKIP: RAG retrieval/context design -> dev/rag-architect
|
|
11
|
+
wins; the app/API around the model with no ML lifecycle concern ->
|
|
12
|
+
dev/architecture-design wins; prompt-injection/model-abuse threats ->
|
|
13
|
+
dev/ai-security wins.
|
|
14
|
+
allowed-tools: [Read, Grep, Glob, Bash]
|
|
15
|
+
metadata:
|
|
16
|
+
origin: arkaos
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# ML Engineering Workflow — `/dev mle-workflow`
|
|
20
|
+
|
|
21
|
+
> **Agent:** Salvador (AI Engineering Specialist) | **Framework:** Data contracts, reproducible training, eval-gated promotion, monitored rollout
|
|
22
|
+
|
|
23
|
+
A model in a notebook is a result; a model in production is a system that
|
|
24
|
+
has to keep being right as the data underneath it moves. The gap between
|
|
25
|
+
the two is not the algorithm — it is the plumbing that makes a prediction
|
|
26
|
+
reproducible, gated on measured quality, deployable as an artifact, and
|
|
27
|
+
observable once real traffic arrives. This workflow builds that plumbing,
|
|
28
|
+
using only the lanes the system in front of you actually needs.
|
|
29
|
+
|
|
30
|
+
## Scope calibration first
|
|
31
|
+
|
|
32
|
+
Not every model has labels, online serving, a feature store, GPUs, or A/B
|
|
33
|
+
tests. Pick the lanes that fit and make the missing ones explicit
|
|
34
|
+
assumptions. A change that a data contract, a baseline, an eval script,
|
|
35
|
+
and a rollback note would make reviewable does not need a feature store.
|
|
36
|
+
|
|
37
|
+
## Lanes
|
|
38
|
+
|
|
39
|
+
### 1. Data contract
|
|
40
|
+
- Define the input schema, types, and allowed ranges; version it. A model is only as trustworthy as the guarantee on what reaches it.
|
|
41
|
+
- Name the label source and its latency (is the outcome known now, or in 30 days?). Undelayed evaluation of a delayed-label problem is a lie.
|
|
42
|
+
- Guard against **leakage**: a feature that encodes the target, or is computed with information unavailable at prediction time.
|
|
43
|
+
|
|
44
|
+
### 2. Reproducible training
|
|
45
|
+
- Pin the data snapshot, code version, dependency lockfile/environment, seed, and hyperparameters — a training run nobody can reproduce is not evidence.
|
|
46
|
+
- Separate train/validation/test by the axis that matches production (time-based split for anything time-ordered, not random).
|
|
47
|
+
- Emit a single versioned artifact (weights + preprocessing + the input schema it expects).
|
|
48
|
+
|
|
49
|
+
### 3. Eval gate (promotion criteria)
|
|
50
|
+
- State the metric and the threshold BEFORE training, tied to the decision the model drives — not accuracy for its own sake.
|
|
51
|
+
- Evaluate on **slices**, not just the aggregate: a model that is 95% overall and 40% on the segment that matters is a failure.
|
|
52
|
+
- Offline gate to promote; where traffic exists, an online check (shadow or canary) before full rollout.
|
|
53
|
+
|
|
54
|
+
### 4. Deployable artifact & serving
|
|
55
|
+
- The serving path must run the **same** preprocessing as training — train/serve skew is the most common silent production failure.
|
|
56
|
+
- Batch vs online: choose by the freshness the decision needs, not by default.
|
|
57
|
+
- Idempotent, versioned, with a health check.
|
|
58
|
+
|
|
59
|
+
### 5. Monitoring & rollback
|
|
60
|
+
- Watch input drift, prediction distribution, and — when labels arrive — realised quality against the offline estimate.
|
|
61
|
+
- A **rollback path** to the previous artifact that can be triggered without a retrain.
|
|
62
|
+
- Preserve every production failure (bad feature, stale label, artifact mismatch, drift) as a regression case.
|
|
63
|
+
|
|
64
|
+
## Process
|
|
65
|
+
|
|
66
|
+
1. Map the change onto the five lanes; mark which apply and which are explicit assumptions.
|
|
67
|
+
2. Find the existing training/feature/serving/eval paths before adding a parallel ML stack (`git grep`, read them).
|
|
68
|
+
3. Build the data contract and the eval gate first — they define what "done" means before any model work.
|
|
69
|
+
|
|
70
|
+
## Proactive Triggers
|
|
71
|
+
|
|
72
|
+
Surface these WITHOUT being asked:
|
|
73
|
+
|
|
74
|
+
- a feature computed from data unavailable at prediction time → the leakage, and the realistic offline score once it is removed
|
|
75
|
+
- a random train/test split on time-ordered data → the optimistic metric it produces and the time-based split that fixes it
|
|
76
|
+
- preprocessing written twice (once in training, once in serving) → the train/serve skew waiting to happen; share the code path
|
|
77
|
+
|
|
78
|
+
## Output
|
|
79
|
+
|
|
80
|
+
```markdown
|
|
81
|
+
## ML Engineering Plan
|
|
82
|
+
|
|
83
|
+
**System:** {what the model decides} · **Lanes in scope:** {of the five}
|
|
84
|
+
**Explicit assumptions:** {labels / serving / traffic / monitoring owner}
|
|
85
|
+
|
|
86
|
+
### Data contract
|
|
87
|
+
{schema, label source + latency, leakage checks}
|
|
88
|
+
|
|
89
|
+
### Training & eval gate
|
|
90
|
+
{reproducibility pins, split axis, metric + threshold + slices}
|
|
91
|
+
|
|
92
|
+
### Serving & monitoring
|
|
93
|
+
{batch/online, skew guard, drift signals, rollback trigger}
|
|
94
|
+
|
|
95
|
+
### Risks
|
|
96
|
+
- {the failure mode} → {the guard}
|
|
97
|
+
```
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dev/safety-review
|
|
3
|
+
description: >
|
|
4
|
+
Audits a change or an automation for destructive, irreversible
|
|
5
|
+
operations — bulk deletes, DROP/TRUNCATE, force pushes, mass emails,
|
|
6
|
+
raw disk or filesystem writes — and checks each has a guard: a scope
|
|
7
|
+
limit, a dry-run, a confirmation, a backup, a rollback. TRIGGER: "/dev
|
|
8
|
+
safety-review", "is this safe to run", "destructive operation", "will
|
|
9
|
+
this delete/overwrite", "review this migration/script/cron", "isto
|
|
10
|
+
apaga alguma coisa?", "revê este script destrutivo", "posso correr isto
|
|
11
|
+
em produção?"; run before shipping a migration, a bulk job, a cron, or
|
|
12
|
+
an autonomous automation. SKIP: exploitable-vulnerability review ->
|
|
13
|
+
dev/exploit-triage wins; general code review -> dev/code-review wins;
|
|
14
|
+
the deploy/rollout mechanics themselves -> dev/deploy wins.
|
|
15
|
+
allowed-tools: [Read, Grep, Glob]
|
|
16
|
+
metadata:
|
|
17
|
+
origin: arkaos
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# Safety Review — `/dev safety-review`
|
|
21
|
+
|
|
22
|
+
> **Agent:** Bruno (Security Engineer) | **Framework:** Blast-radius analysis, reversibility, guard-before-execute
|
|
23
|
+
|
|
24
|
+
The dangerous change is rarely the one that fails — it is the one that
|
|
25
|
+
succeeds at the wrong scope. A migration that runs, a cleanup cron that
|
|
26
|
+
fires, a bulk update that commits: each does exactly what it was told, to
|
|
27
|
+
more rows or files or people than the author pictured. This pass finds
|
|
28
|
+
the destructive and irreversible operations in a change or an automation
|
|
29
|
+
and checks that every one is fenced — scoped, reversible, dry-runnable,
|
|
30
|
+
or gated behind a confirmation — before it can run unattended.
|
|
31
|
+
|
|
32
|
+
## What to flag
|
|
33
|
+
|
|
34
|
+
| Operation | The guard it needs |
|
|
35
|
+
|-----------|--------------------|
|
|
36
|
+
| **Bulk delete / update** (`DELETE`/`UPDATE` without a tight `WHERE`, `deleteMany`, `rm -rf`) | An explicit scope, a row-count check, and a backup or soft-delete |
|
|
37
|
+
| **Schema destruction** (`DROP`, `TRUNCATE`, a down-migration that loses data) | Reversibility or a snapshot; never irreversible without sign-off |
|
|
38
|
+
| **Force / history rewrite** (`git push --force`, `reset --hard`, `filter-branch`) | Branch scoping; never on a shared branch |
|
|
39
|
+
| **Mass outbound** (bulk email/notification/webhook) | A dry-run count, a rate limit, a test-recipient path |
|
|
40
|
+
| **Raw disk / filesystem** (`dd`, recursive writes, `chmod -R`) | Path scoping and a confirmation |
|
|
41
|
+
| **Unbounded loop / job** over production data | A limit, idempotency, and a resumable/rollback path |
|
|
42
|
+
|
|
43
|
+
## Process
|
|
44
|
+
|
|
45
|
+
1. Grep the change/automation for the destructive verbs — `DELETE`, `DROP`, `TRUNCATE`, `deleteMany`, `rm`, `--force`, `reset --hard`, bulk-send calls.
|
|
46
|
+
2. For each, determine the **blast radius**: what is the maximum it can affect if a parameter is wrong or empty (an empty `WHERE` deletes the table; a null filter matches everything)?
|
|
47
|
+
3. Check the guard is present and correct: scope, dry-run, confirmation, backup, rollback. A destructive op with no guard, or a guard that fails open, is a finding.
|
|
48
|
+
4. Rank by reversibility — an irreversible op with no backup is critical; a scoped, reversible one is clean.
|
|
49
|
+
|
|
50
|
+
## Proactive Triggers
|
|
51
|
+
|
|
52
|
+
Surface these WITHOUT being asked:
|
|
53
|
+
|
|
54
|
+
- a `DELETE`/`UPDATE` whose `WHERE` could evaluate to empty or all-rows → the full-table blast radius and the scope/guard it needs
|
|
55
|
+
- a down-migration or `DROP`/`TRUNCATE` with no snapshot → the irreversible data loss
|
|
56
|
+
- an automation that runs unattended (cron, agent, CI job) touching production data with no dry-run or rollback → the guard to add before it ships
|
|
57
|
+
|
|
58
|
+
## Output
|
|
59
|
+
|
|
60
|
+
```markdown
|
|
61
|
+
## Safety Review
|
|
62
|
+
|
|
63
|
+
**Scope:** {change / automation reviewed}
|
|
64
|
+
**Verdict:** {SAFE TO RUN / GUARDS REQUIRED}
|
|
65
|
+
|
|
66
|
+
### Destructive operations
|
|
67
|
+
- **{operation}** {file}:{line}
|
|
68
|
+
- **Blast radius:** {worst case if a parameter is wrong/empty}
|
|
69
|
+
- **Reversible?** {yes + how / no}
|
|
70
|
+
- **Guard present?** {scope/dry-run/confirmation/backup — or missing}
|
|
71
|
+
- **Fix:** {the guard to add before this runs}
|
|
72
|
+
|
|
73
|
+
### Safe
|
|
74
|
+
{operations already correctly fenced}
|
|
75
|
+
```
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: kb/knowledge-ops
|
|
3
|
+
description: >
|
|
4
|
+
Writes a note to the Obsidian vault the evidence-first way and verifies
|
|
5
|
+
it landed — a note is not "saved" until it is read back, placed in the
|
|
6
|
+
right department path, linked with real `[[wikilinks]]`, and (when
|
|
7
|
+
indexed) confirmed searchable. TRIGGER: "/kb knowledge-ops", "save this
|
|
8
|
+
to the vault", "did the note land", "file this in Obsidian", "guarda
|
|
9
|
+
isto no vault", "confirma que a nota ficou", "indexa isto"; use when
|
|
10
|
+
capturing or reorganising knowledge that must be findable later, not
|
|
11
|
+
lost. SKIP: reading/answering from existing notes -> kb/search-kb wins;
|
|
12
|
+
a vault-wide freshness audit or broken-link sweep across existing notes
|
|
13
|
+
-> kb/knowledge-review wins; turning a source (video, PDF, article) into
|
|
14
|
+
structured notes -> kb/learn-content wins; planning a research effort ->
|
|
15
|
+
kb/research-plan wins.
|
|
16
|
+
allowed-tools: [Read, Write, Edit, Grep, Glob, Bash]
|
|
17
|
+
metadata:
|
|
18
|
+
origin: arkaos
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
<!-- arka:kb-first-prefix begin -->
|
|
22
|
+
> **KB-first:** query `mcp__obsidian__search_notes` and cite
|
|
23
|
+
> `[[wikilinks]]` — or declare the gap — BEFORE any external research.
|
|
24
|
+
> Full doctrine: `arka/SKILL.md` (KB-First Research).
|
|
25
|
+
<!-- arka:kb-first-prefix end -->
|
|
26
|
+
|
|
27
|
+
# Knowledge Ops — `/kb knowledge-ops`
|
|
28
|
+
|
|
29
|
+
> **Agent:** Clara (Knowledge Director) | **Framework:** Zettelkasten, evidence-flow, KB-first
|
|
30
|
+
|
|
31
|
+
Saved means the vault can give it back. Not written-to-disk, not "the
|
|
32
|
+
note is created" — retrievable: in the right department folder, with
|
|
33
|
+
frontmatter that parses, with links that resolve, and picked up by the
|
|
34
|
+
index that will be searched next month. Miss any one of those and the
|
|
35
|
+
note is effort spent capturing knowledge that cannot be found the day it
|
|
36
|
+
counts. Knowledge-ops holds every vault write to that acceptance test and
|
|
37
|
+
does not call it done until the note has been read back and, when it must
|
|
38
|
+
surface later, confirmed searchable.
|
|
39
|
+
|
|
40
|
+
## Principles
|
|
41
|
+
|
|
42
|
+
1. **Search before you write.** Query the vault first — a note that
|
|
43
|
+
duplicates an existing one should extend it, not fork it (KB-first,
|
|
44
|
+
`arka/SKILL.md`).
|
|
45
|
+
2. **Right path, valid frontmatter.** File under the correct department
|
|
46
|
+
MOC with parseable YAML frontmatter; a note in the wrong place is a
|
|
47
|
+
note lost.
|
|
48
|
+
3. **Links must resolve.** Every `[[wikilink]]` points at a note that
|
|
49
|
+
exists (or is deliberately a forward reference you will create); a
|
|
50
|
+
dead link is a broken trail, not a decoration.
|
|
51
|
+
4. **Read it back.** After writing, read the note — confirm the content,
|
|
52
|
+
frontmatter, and links are as intended, not as assumed.
|
|
53
|
+
5. **Confirm findable.** When the note must be retrievable, index it and
|
|
54
|
+
verify a search returns it. "Saved" means "the vault can return it."
|
|
55
|
+
|
|
56
|
+
## Process
|
|
57
|
+
|
|
58
|
+
1. Search the vault for the topic; decide extend-vs-create.
|
|
59
|
+
2. Write or patch the note in the right department path, with frontmatter
|
|
60
|
+
and resolving `[[wikilinks]]`.
|
|
61
|
+
3. Read the note back and check content, frontmatter, and every link.
|
|
62
|
+
4. If retrieval matters, index and confirm a search surfaces it.
|
|
63
|
+
5. Report what landed, where, and how it was verified.
|
|
64
|
+
|
|
65
|
+
## Proactive Triggers
|
|
66
|
+
|
|
67
|
+
Surface these WITHOUT being asked:
|
|
68
|
+
|
|
69
|
+
- a note written with no `[[wikilinks]]` → the orphan it becomes, and the neighbours to link
|
|
70
|
+
- a `[[link]]` whose target note does not exist → the dead trail, and whether to create the target or fix the link
|
|
71
|
+
- knowledge captured but never indexed when it will be searched for later → the index step that makes it findable
|
|
72
|
+
|
|
73
|
+
## Output
|
|
74
|
+
|
|
75
|
+
```markdown
|
|
76
|
+
## Knowledge Ops
|
|
77
|
+
|
|
78
|
+
**Captured:** {what was written / reorganised}
|
|
79
|
+
**Location:** {department path + note title}
|
|
80
|
+
|
|
81
|
+
### Verified
|
|
82
|
+
- frontmatter: {parsed OK}
|
|
83
|
+
- links: {N wikilinks, all resolve}
|
|
84
|
+
- read-back: {confirmed}
|
|
85
|
+
- searchable: {index confirmed / n/a}
|
|
86
|
+
|
|
87
|
+
**Verdict:** {SAVED and findable / INCOMPLETE — what still needs fixing}
|
|
88
|
+
```
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ops/github-ops
|
|
3
|
+
description: >
|
|
4
|
+
Drives git and GitHub operations under the branch-isolation and
|
|
5
|
+
evidence rules — isolated branch, staging by explicit path, a PR whose
|
|
6
|
+
CI is proven CLEAN before any merge, and a verified push — never a merge
|
|
7
|
+
on a still-pending check. TRIGGER: "/ops github-ops", "open a PR",
|
|
8
|
+
"merge when green", "is this safe to merge", "abre um PR", "faz merge
|
|
9
|
+
quando o CI passar", "cria a branch e o PR", "confirma os checks"; use
|
|
10
|
+
for the branch → commit → PR → merge lifecycle of a change. SKIP: the
|
|
11
|
+
version-bump/tag/npm-publish release pipeline -> dev/release wins; a
|
|
12
|
+
CI/CD deploy to infrastructure -> dev/deploy wins; running arbitrary
|
|
13
|
+
non-git shell steps -> ops/terminal-ops wins.
|
|
14
|
+
allowed-tools: [Bash, Read, Grep, Glob]
|
|
15
|
+
metadata:
|
|
16
|
+
origin: arkaos
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
<!-- arka:kb-first-prefix begin -->
|
|
20
|
+
> **KB-first:** query `mcp__obsidian__search_notes` and cite
|
|
21
|
+
> `[[wikilinks]]` — or declare the gap — BEFORE any external research.
|
|
22
|
+
> Full doctrine: `arka/SKILL.md` (KB-First Research).
|
|
23
|
+
<!-- arka:kb-first-prefix end -->
|
|
24
|
+
|
|
25
|
+
# GitHub Ops — `/ops github-ops`
|
|
26
|
+
|
|
27
|
+
> **Agent:** Daniel (Ops Lead) | **Framework:** Branch-isolation (NON-NEGOTIABLE), evidence-flow, merge-on-green
|
|
28
|
+
|
|
29
|
+
"I opened the PR" and "the PR is mergeable with every check green" are
|
|
30
|
+
not the same sentence, and treating them as one is how a red build lands
|
|
31
|
+
on the default branch. A merge fired while CI was still `pending`, a
|
|
32
|
+
`git add -A` that swept an unrelated file into the commit, a force-push
|
|
33
|
+
that quietly rewrote a teammate's history — each is a git operation that
|
|
34
|
+
*ran* without being *verified*. This skill drives the branch → commit →
|
|
35
|
+
PR → merge lifecycle so that every step is isolated and proven: staged by
|
|
36
|
+
explicit path, pushed and confirmed, and merged only once `gh pr checks`
|
|
37
|
+
reads CLEAN.
|
|
38
|
+
|
|
39
|
+
## Rules
|
|
40
|
+
|
|
41
|
+
1. **Branch-isolation, always.** Never commit to the default branch. Cut
|
|
42
|
+
a feature branch first; the change lives and dies on it (constitution
|
|
43
|
+
`branch-isolation`, NON-NEGOTIABLE).
|
|
44
|
+
2. **Stage by explicit path.** `git add <path>` for what belongs in the
|
|
45
|
+
commit — never `git add -A`/`.` blindly. Verify with `git status` and
|
|
46
|
+
`git diff --cached` before committing; a parallel agent's file must
|
|
47
|
+
not leak in.
|
|
48
|
+
3. **Merge only on proven green.** After opening the PR, poll
|
|
49
|
+
`gh pr checks <n>` until zero `pending` and zero failures, and
|
|
50
|
+
`mergeStateStatus` is `CLEAN`. A merge on a pending check is a defect,
|
|
51
|
+
not a shortcut.
|
|
52
|
+
4. **Force-push is scoped and lease-guarded.** Only after a deliberate
|
|
53
|
+
rebase, only `--force-with-lease`, never on a shared branch.
|
|
54
|
+
5. **Verify the push landed.** Read the ref update line; don't assume.
|
|
55
|
+
|
|
56
|
+
## Process
|
|
57
|
+
|
|
58
|
+
1. Confirm the current branch. On the default branch → create the feature
|
|
59
|
+
branch before touching anything.
|
|
60
|
+
2. Stage by path, review `git diff --cached`, commit with a conventional
|
|
61
|
+
message.
|
|
62
|
+
3. Push and read the ref-update confirmation.
|
|
63
|
+
4. Open the PR; then poll `gh pr checks` to completion.
|
|
64
|
+
5. Merge only when checks are CLEAN; confirm the merge and sync the
|
|
65
|
+
default branch.
|
|
66
|
+
|
|
67
|
+
## Proactive Triggers
|
|
68
|
+
|
|
69
|
+
Surface these WITHOUT being asked:
|
|
70
|
+
|
|
71
|
+
- a commit staged with `git add -A`/`.` → the explicit-path staging and the `git diff --cached` check that prevents a leak
|
|
72
|
+
- a merge requested while `gh pr checks` still shows `pending` → wait-for-green before the merge, with the check status quoted
|
|
73
|
+
- a `git push --force` without `--force-with-lease` on a branch others may hold → the lease-guarded form, or don't
|
|
74
|
+
|
|
75
|
+
## Output
|
|
76
|
+
|
|
77
|
+
```markdown
|
|
78
|
+
## GitHub Ops
|
|
79
|
+
|
|
80
|
+
**Change:** {what the branch carries}
|
|
81
|
+
**Branch:** {feature branch, off default}
|
|
82
|
+
|
|
83
|
+
### Steps (with evidence)
|
|
84
|
+
- staged: {paths} — `git diff --cached` reviewed
|
|
85
|
+
- pushed: {ref-update line}
|
|
86
|
+
- PR: #{n} — checks {CLEAN / list of pending→pass}
|
|
87
|
+
|
|
88
|
+
**Verdict:** {MERGED after green, confirmed / HELD — checks not yet CLEAN}
|
|
89
|
+
```
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ops/terminal-ops
|
|
3
|
+
description: >
|
|
4
|
+
Runs shell operations the evidence-first way — every command's exit
|
|
5
|
+
code and real output are captured and checked before anything is
|
|
6
|
+
reported as done, and a non-zero exit stops the chain instead of being
|
|
7
|
+
narrated over. TRIGGER: "/ops terminal-ops", "run this safely",
|
|
8
|
+
"execute and verify", "did this command actually work", "corre isto e
|
|
9
|
+
confirma", "verifica o exit code", "isto correu mesmo?"; use when a task
|
|
10
|
+
hangs on a sequence of shell commands whose success must be proven, not
|
|
11
|
+
assumed. SKIP: git/GitHub-specific flows (branch, PR, merge-on-green) ->
|
|
12
|
+
ops/github-ops wins; a CI/CD deployment pipeline -> dev/deploy wins;
|
|
13
|
+
documenting the procedure instead of running it -> ops/sop-create wins.
|
|
14
|
+
allowed-tools: [Bash, Read, Grep, Glob]
|
|
15
|
+
metadata:
|
|
16
|
+
origin: arkaos
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
<!-- arka:kb-first-prefix begin -->
|
|
20
|
+
> **KB-first:** query `mcp__obsidian__search_notes` and cite
|
|
21
|
+
> `[[wikilinks]]` — or declare the gap — BEFORE any external research.
|
|
22
|
+
> Full doctrine: `arka/SKILL.md` (KB-First Research).
|
|
23
|
+
<!-- arka:kb-first-prefix end -->
|
|
24
|
+
|
|
25
|
+
# Terminal Ops — `/ops terminal-ops`
|
|
26
|
+
|
|
27
|
+
> **Agent:** Daniel (Ops Lead) | **Framework:** Evidence-flow G3, fail-fast, exit-code-as-truth
|
|
28
|
+
|
|
29
|
+
The deploy script exits 0. One line up sits `Error: connection refused`
|
|
30
|
+
— but a wrapper swallowed the real status and handed back the echo, so
|
|
31
|
+
the pipeline read green and shipped a half-applied migration. No one
|
|
32
|
+
lied; the output simply never got checked against the exit code, and the
|
|
33
|
+
exit code never got checked at all. Terminal-ops runs shell work under a
|
|
34
|
+
single rule: the status is the verdict and the output is only a hint
|
|
35
|
+
toward it. Anything that matters has its exit code captured and read
|
|
36
|
+
against a success signal named in advance, and a non-zero exit halts the
|
|
37
|
+
sequence rather than scrolling past.
|
|
38
|
+
|
|
39
|
+
## Principles
|
|
40
|
+
|
|
41
|
+
1. **Exit code is the truth, output is a hint.** `echo $?` (or the tool's
|
|
42
|
+
own status) after anything that matters. A zero exit with an empty
|
|
43
|
+
result is still a result to inspect; a non-zero exit is a stop.
|
|
44
|
+
2. **Chain on success, never on hope.** Sequence with `&&` or an explicit
|
|
45
|
+
status check between steps, so step 2 cannot run on step 1's failure.
|
|
46
|
+
3. **Capture, then read.** Redirect output you need to judge (`2>&1`),
|
|
47
|
+
read it, and quote the line that proves the claim — never report "done"
|
|
48
|
+
from memory of what the command *should* do.
|
|
49
|
+
4. **Least surprise on destructive verbs.** Before `rm`/`mv`/`>`
|
|
50
|
+
overwrites, confirm scope (what it matches) — hand off to
|
|
51
|
+
`ops/github-ops` for history rewrites and `dev/db-design` for schema.
|
|
52
|
+
|
|
53
|
+
## Process
|
|
54
|
+
|
|
55
|
+
1. State the goal and the **success signal** in advance — the exact exit
|
|
56
|
+
code, file, or output that will prove it.
|
|
57
|
+
2. Run the command, capturing status and the output you need to judge.
|
|
58
|
+
3. Read the result against the success signal. Match → proceed. Mismatch
|
|
59
|
+
→ stop, surface the real error line, do not continue the chain.
|
|
60
|
+
4. Report with the evidence: the command, its exit code, and the line
|
|
61
|
+
that confirms it.
|
|
62
|
+
|
|
63
|
+
## Proactive Triggers
|
|
64
|
+
|
|
65
|
+
Surface these WITHOUT being asked:
|
|
66
|
+
|
|
67
|
+
- a multi-step sequence where a later step assumes an earlier one passed → the status check to insert between them
|
|
68
|
+
- a command whose success was reported from its output text, not its exit code → the `$?`/status check that actually proves it
|
|
69
|
+
- a destructive command (`rm -rf`, `>`, `truncate`) with an unbounded or unchecked target → the scope confirmation before it runs
|
|
70
|
+
|
|
71
|
+
## Output
|
|
72
|
+
|
|
73
|
+
```markdown
|
|
74
|
+
## Terminal Ops
|
|
75
|
+
|
|
76
|
+
**Goal:** {what the sequence had to achieve}
|
|
77
|
+
**Success signal:** {the exit code / file / output line that proves it}
|
|
78
|
+
|
|
79
|
+
### Executed
|
|
80
|
+
- `{command}` → exit {code} — {the line that confirms or refutes}
|
|
81
|
+
|
|
82
|
+
**Verdict:** {DONE, proven by evidence above / STOPPED at step N — real error}
|
|
83
|
+
```
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_meta": {
|
|
3
3
|
"generator": "scripts/marketplace_gen.py",
|
|
4
|
-
"version": "4.
|
|
4
|
+
"version": "4.21.0",
|
|
5
5
|
"marketplace": "arkaos"
|
|
6
6
|
},
|
|
7
7
|
"structural": {
|
|
@@ -1095,6 +1095,19 @@
|
|
|
1095
1095
|
"origin": "arkaos"
|
|
1096
1096
|
}
|
|
1097
1097
|
},
|
|
1098
|
+
"exploit-triage": {
|
|
1099
|
+
"depts": [
|
|
1100
|
+
"dev"
|
|
1101
|
+
],
|
|
1102
|
+
"curated": false,
|
|
1103
|
+
"plugins": [
|
|
1104
|
+
"arkaos-dev@arkaos"
|
|
1105
|
+
],
|
|
1106
|
+
"collision": false,
|
|
1107
|
+
"provenance": {
|
|
1108
|
+
"origin": "arkaos"
|
|
1109
|
+
}
|
|
1110
|
+
},
|
|
1098
1111
|
"extract-data": {
|
|
1099
1112
|
"depts": [
|
|
1100
1113
|
"strategy"
|
|
@@ -1217,6 +1230,19 @@
|
|
|
1217
1230
|
"origin": "arkaos"
|
|
1218
1231
|
}
|
|
1219
1232
|
},
|
|
1233
|
+
"github-ops": {
|
|
1234
|
+
"depts": [
|
|
1235
|
+
"ops"
|
|
1236
|
+
],
|
|
1237
|
+
"curated": false,
|
|
1238
|
+
"plugins": [
|
|
1239
|
+
"arkaos-ops@arkaos"
|
|
1240
|
+
],
|
|
1241
|
+
"collision": false,
|
|
1242
|
+
"provenance": {
|
|
1243
|
+
"origin": "arkaos"
|
|
1244
|
+
}
|
|
1245
|
+
},
|
|
1220
1246
|
"growth-loop": {
|
|
1221
1247
|
"depts": [
|
|
1222
1248
|
"marketing"
|
|
@@ -1412,6 +1438,19 @@
|
|
|
1412
1438
|
"origin": "arkaos"
|
|
1413
1439
|
}
|
|
1414
1440
|
},
|
|
1441
|
+
"knowledge-ops": {
|
|
1442
|
+
"depts": [
|
|
1443
|
+
"kb"
|
|
1444
|
+
],
|
|
1445
|
+
"curated": false,
|
|
1446
|
+
"plugins": [
|
|
1447
|
+
"arkaos-kb@arkaos"
|
|
1448
|
+
],
|
|
1449
|
+
"collision": false,
|
|
1450
|
+
"provenance": {
|
|
1451
|
+
"origin": "arkaos"
|
|
1452
|
+
}
|
|
1453
|
+
},
|
|
1415
1454
|
"knowledge-review": {
|
|
1416
1455
|
"depts": [
|
|
1417
1456
|
"kb"
|
|
@@ -1633,6 +1672,32 @@
|
|
|
1633
1672
|
"origin": "arkaos"
|
|
1634
1673
|
}
|
|
1635
1674
|
},
|
|
1675
|
+
"ml-adoption-playbook": {
|
|
1676
|
+
"depts": [
|
|
1677
|
+
"dev"
|
|
1678
|
+
],
|
|
1679
|
+
"curated": false,
|
|
1680
|
+
"plugins": [
|
|
1681
|
+
"arkaos-dev@arkaos"
|
|
1682
|
+
],
|
|
1683
|
+
"collision": false,
|
|
1684
|
+
"provenance": {
|
|
1685
|
+
"origin": "arkaos"
|
|
1686
|
+
}
|
|
1687
|
+
},
|
|
1688
|
+
"mle-workflow": {
|
|
1689
|
+
"depts": [
|
|
1690
|
+
"dev"
|
|
1691
|
+
],
|
|
1692
|
+
"curated": false,
|
|
1693
|
+
"plugins": [
|
|
1694
|
+
"arkaos-dev@arkaos"
|
|
1695
|
+
],
|
|
1696
|
+
"collision": false,
|
|
1697
|
+
"provenance": {
|
|
1698
|
+
"origin": "arkaos"
|
|
1699
|
+
}
|
|
1700
|
+
},
|
|
1636
1701
|
"moat-analysis": {
|
|
1637
1702
|
"depts": [
|
|
1638
1703
|
"strategy"
|
|
@@ -2475,6 +2540,19 @@
|
|
|
2475
2540
|
"origin": "arkaos"
|
|
2476
2541
|
}
|
|
2477
2542
|
},
|
|
2543
|
+
"safety-review": {
|
|
2544
|
+
"depts": [
|
|
2545
|
+
"dev"
|
|
2546
|
+
],
|
|
2547
|
+
"curated": false,
|
|
2548
|
+
"plugins": [
|
|
2549
|
+
"arkaos-dev@arkaos"
|
|
2550
|
+
],
|
|
2551
|
+
"collision": false,
|
|
2552
|
+
"provenance": {
|
|
2553
|
+
"origin": "arkaos"
|
|
2554
|
+
}
|
|
2555
|
+
},
|
|
2478
2556
|
"scaffold": {
|
|
2479
2557
|
"depts": [
|
|
2480
2558
|
"dev"
|
|
@@ -2875,6 +2953,19 @@
|
|
|
2875
2953
|
"origin": "arkaos"
|
|
2876
2954
|
}
|
|
2877
2955
|
},
|
|
2956
|
+
"terminal-ops": {
|
|
2957
|
+
"depts": [
|
|
2958
|
+
"ops"
|
|
2959
|
+
],
|
|
2960
|
+
"curated": false,
|
|
2961
|
+
"plugins": [
|
|
2962
|
+
"arkaos-ops@arkaos"
|
|
2963
|
+
],
|
|
2964
|
+
"collision": false,
|
|
2965
|
+
"provenance": {
|
|
2966
|
+
"origin": "arkaos"
|
|
2967
|
+
}
|
|
2968
|
+
},
|
|
2878
2969
|
"thumbnail-package": {
|
|
2879
2970
|
"depts": [
|
|
2880
2971
|
"content"
|
package/package.json
CHANGED