local-agentsSAFE
Local Agents
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
A catalog of 15 specialized AI agents and 48 skills for software development, installable into Claude Code, opencode, Kiro CLI, Codex, Antigravity CLI, or any harness that can read files.
Each agent is a self-contained package: an identity, a way of reasoning, and the skills it loads on demand. They encode decision criteria, not task lists — if a section could be replaced by "just do X", it doesn't belong here.
npx github:jrodrigopuca/local-hero bootstrap --all --tool claude # install the whole suite npx github:jrodrigopuca/local-hero check # what changed upstream — writes nothing npx github:jrodrigopuca/local-hero update # pull it and refresh every install
local-hero clones the catalog where you never have to look and runs its update.py; it needs node 24+ (npm 11), git and Python 3.9+. To work from a clone of your own instead:
git clone https://github.com/jrodrigopuca/local-agents.git cd local-agents ./install.py --list # see what's available ./install.py --status # see what's installed, and if it's current ./install.py --refresh # bring every installed tool up to date ./update.py check # what changed on GitHub since you installed ./update.py update # pull it and refresh every install ./install.py --all --tool claude --dry-run # preview ./install.py --all --tool claude # install the whole suite (global) ./install.py --all --tool claude --project ~/code/repo # or vendor it into a repo
The roster
d798b2ac2531OBSERVED · 2026-10-13Install
Commands as the repository documents them. They are shown, not run.
git clone https://github.com/jrodrigopuca/local-agents.git
Host compatibility
What the documentation claims. We have not run a compatibility test.
| Host | Status | Notes |
|---|---|---|
| claude-code | mentioned | |
| codex | mentioned | |
| copilot | mentioned | |
| cursor | mentioned | |
| gemini-cli | mentioned |
What it tells the agent
The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.
---
name: code-review
description: >
Reviewing Swift/SwiftUI code as mentor: the severity system, the
Apple-specific defect checklist, and review-as-teaching. Trigger: load when
the user shares Swift, SwiftUI, UIKit, or AppKit code for review, feedback,
or "is this okay?".
license: Apache-2.0
metadata:
author: jrodrigopuca
version: "1.1"
---
_Verified against Xcode 26 / iOS 26 / macOS 26 (September 2026). Apple moves
these facts yearly — if the year has changed, re-check a claim before teaching it._
## Critical Patterns
### 1. Review in three passes, report by severity
Pass 1 — **correctness & safety** (🔴): retain cycles, force unwraps, data
races, main-thread violations, leaked resources. Pass 2 — **design** (🟡):
logic in views, missing abstractions, state ownership, testability. Pass 3 —
**style** (🟢): naming, idiom, formatting. Report blockers first; never bury
a retain cycle under twelve naming nits. Every finding carries its failure
case ("this closure captures self strongly; when X outlives Y, the whole
graph leaks") — and when the code is genuinely good, say WHAT is good with
the same precision.
### 2. The Swift-specific 🔴 checklist
- **Retain cycles**: `self` captured strongly in escaping closures stored by
`self` (handlers, subscriptions, timers); delegates declared strong. A
bare `Task { }` retains `self` only until it finishes — that is not a
cycle; the leak needs BOTH `self` storing the task AND the task never
completing (an endless `for await`). `[weak self]` sprinkled on every Task
is cargo cult: prove the ownership graph, and cancel stored tasks on scope
exit instead.
- **Force unwraps** (`!`, `try!`, `as!`): each one is a crash with a date TBD.
Acceptable only with a written invariant ("IBOutlet after viewDidLoad") —
otherwise `guard let` with a real fallback path.
- **Concurrency**: UI state touched off the main actor; shared mutable state
without actor/lock protection; `Task` fire-and-forget hiding errors;
blocking calls inside actors. In Swift 6 language mode, isolation and
Sendable violations are compile errors; blocking inside an actor and
fire-and-forget Tasks are NOT — the compiler is an ally for the first two
only. And under Xcode 26's MainActor default with caller-actor async, the
new 🔴 runs the other way: heavy work silently on main because nobody
marked it `@concurrent` (see [state-architecture #6](../state-architecture/SKILL.md)).
- **Error swallowing**: `try?` discarding errors the user needs to see;
empty catch blocks — an error that vanishes silently becomes QA's
[flow-hunting](../../../qa/skills/flow-hunting/SKILL.md) finding later.
### 3. The SwiftUI 🟡 checklist
- **Logic in the view**: formatting, filtering, network calls inline in
`body` → belongs in the ViewModel/model; `body` is a pure function of
state, and every recomputation runs it.
- **State ownership**: `@State` for view-local only; one source of truth per
piece of state — two views each "owning" a copy is the bug factory;
`@Binding` down, not state duplicated down.
- **Observation hygiene**: with `@Observable`, a view re-evaluates only when
a property its `body` READ changes — so "re-renders on unrelated changes"
is the `ObservableObject`/`@Published` smell (any published change
invalidates every observer), and `ObservableObject` in new code is the
finding. For `@Observable` models the finding is a `body` that reads far
more than it shows: narrow what `body` touches or split into subviews
(diffing works per view).
- **SwiftData**: `ModelContext` or `@Model` objects crossing actors 🔴 (not
Sendable); `@Query` inside a ViewModel 🟡 (view-only, main-actor);
relationships without delete rules 🟡; a schema change in a shipped app
without a `VersionedSchema` + migration plan 🔴 — that is a crash on
upgrade, not on first install.
- **Untested-by-omission** 🟡: a ViewModel behind a protocol-fronted service
with no Swift Testing target is testability that never cashed in; and a
`@MainActor` ViewModel's tests are `@MainActor`/awaited or they don't
compile in Swift 6.
- **The missing states**: view renders happy path only — where are loading,
empty, error? (The screen-state enum from
[state-architecture](../state-architecture/SKILL.md), and the ux-ui
[five states (`ux-flows`)](../../../ux-ui/skills/ux-flows/SKILL.md) — same table.)
### 4. Platform-honesty: iOS code isn't Mac code automatically
When the target includes macOS: check window/scene assumptions (Mac has many
windows, resizable), keyboard/menu/right-click support, `NavigationSplitView`
over stack navigation for wide layouts, sandbox entitlements for file access.
Flag "iOS-shaped" code shipped to Mac as 🟡 — it runs, and it feels like a
port, which Mac users smell instantly.
### 5. Review as teaching: pattern over instance
The user's growth beats the diff. When the same mistake appears three times,
teach the PATTERN once (with the underlying rule: "closures that outlive the
call need an ownership decision") instead of flagging three instances — then
have them find the third occurrence themselves. One concept TAUGHT per review
(mentorship contract #7); the rest goes to pending topics. That limits the
teaching, never the report: every blocker is named in this review, whatever
the count — a crash moved to pending topics is a crash shipped.
## Resources
- Sibling skills: [state-architecture](../state-architecture/SKILL.md) (where
the design findings point), [debugging](../debugging/SKILL.md) (when a
finding needs a repro)
- Generic review altitude and severity honesty:
[senior-dev/pairing](../../../senior-dev/skills/pairing/SKILL.md),
[architect/design-review](../../../architect/skills/design-review/SKILL.md)Trust audit
SAFEgrade B · trust 89/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | PASS |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (2 observation(s))
- Network
- none-observed
- Shell
- none-observed
- Dependencies
- pinned
- Secrets in source
- none-found
Findings (5)
You are a Senior Apple-Platforms Engineer — Swift since 1.0, Objective-C before
You are a Senior Software Architect and mentor — 15+ years of experience, GDE and
You are a Senior Data & Machine Learning Engineer — you turn raw data into
You are a Senior Database Engineer — the OWNER of the data. Applications get
You are a Senior DevOps / Site Reliability Engineer — you own the path from
Gates applied: no_behavioural_pass.
d798b2ac2531full audit observations/trust-audit/skill/jrodrigopuca__local-agents.json · Report an issue / request a re-scanAudit history
Every audit this skill has had.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-13 | d798b2ac2531 | SAFE | B | 89 | first audit |
Questions
What does the local-agents skill do?
Local Agents
Is local-agents safe to install?
The audit found nothing in the source that contradicts what it says it does, and graded it B (89/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean skill reads B.
What can local-agents access on my machine?
The audit observed that it reads or writes files. Each of those is consistent with what it says it does. Secrets in the source: none found.
What do I need installed to use local-agents?
Its own instructions reference self. Dependencies are pinned to exact versions.
Which assistants does local-agents work with?
Its documentation mentions claude-code, codex, copilot, cursor and gemini-cli. That is what the text claims, not a compatibility test we ran.
How current is this page?
The grade is for one exact copy of the source (d798b2ac2531), read on 2026-10-13. The repository is watched, and a new audit runs when it changes — this is the first audit.