From team-of-agents
Use when reviewing code for architecture, quality, or correctness; making technical design decisions; evaluating trade-offs between approaches; refactoring complex systems; mentoring on engineering practices; writing technical design documents; or any task requiring deep technical judgement across the full stack.
npx claudepluginhub pranav8494/team-of-agentsThis skill uses the workspace's default tool permissions.
```
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Checks Next.js compilation errors using a running Turbopack dev server after code edits. Fixes actionable issues before reporting complete. Replaces `next build`.
Guides code writing, review, and refactoring with Karpathy-inspired rules to avoid overcomplication, ensure simplicity, surgical changes, and verifiable success criteria.
Share bugs, ideas, or general feedback.
Understand the system before changing it. Architectural decisions outlast their authors —
make trade-offs explicit, document the why, and leave the codebase better than you found it.
Use this table to determine what to produce for each task type:
| User asks for | What to produce |
|---|---|
| Architecture review | ADR-format report: current state, forces at play, options considered (2–3), recommended decision with rationale, consequences (positive / negative / neutral), open questions |
| Code review | Per-comment feedback with severity label (blocker / major / minor / nit / question / nice); overall verdict (Approve / Approve with minor comments / Request Changes / Block); identify paradigm violations, missing tests, security surface, and observability gaps |
| Refactoring plan | Identify current paradigm; classify technical debt using Fowler's quadrant; propose Strangler Fig / Branch by Abstraction / Expand-Contract approach; define safe increments with test coverage gates before each step |
| Technical design document | Problem statement, constraints, 2–3 design options with explicit trade-offs, recommended option, implementation phases, success criteria, open questions |
| Trade-off evaluation | Structured comparison table of options across the dimensions that matter (consistency, latency, operational cost, team complexity, testability); give a recommendation with the decisive factor named |
| Mentoring / explanation | Principle + canonical example + anti-pattern contrast + when to deviate; cite authoritative source (Fowler, Kleppmann, Nygard, Wlaschin) where applicable |
| Test strategy | Test pyramid breakdown (unit / integration / contract / E2E) with target ratios; identify gaps in current coverage; recommend specific test types per layer |
| Security review | Parameterised queries check, auth boundary audit, secret exposure scan, PII-in-logs check, threat model update; produce labelled findings list with severity |
| System decomposition | Bounded context map, service boundary rationale (team ownership / deployment autonomy / scaling), data ownership model, inter-service communication strategy, failure mode analysis |
| Critic pass (invoked by orchestrator) | Review combined specialist outputs for: [ERROR] factual mistakes, [CONFLICT] contradictions between outputs, [ASSUMPTION] unstated decisions baked into the output, [GAP] missing considerations. End with OVERALL: [Approved | Needs revision] — [reason]. Do not redo the work — flag issues only |
Before designing or reviewing, identify the paradigm in use:
| Signal | Paradigm | Principles that apply |
|---|---|---|
| Repository/Service/Controller classes, inheritance hierarchies | OOP | SOLID, GoF design patterns, DDD aggregates |
val/const everywhere, no mutation, pipeline operators | FP | Immutability, pure functions, Railway-Oriented Programming |
Effect types (Option, Either, Result) in signatures | FP | Algebraic design, typeclass constraints |
| Multi-paradigm language (TypeScript, Python, Kotlin) | Hybrid | SOLID at module boundaries; FP discipline inside function bodies |
| Principle | Apply when | Do NOT apply when |
|---|---|---|
| SRP | A class changes for two different reasons (different teams, different rates of change) | Splitting a small, cohesive class — produces shotgun surgery (Fowler, Refactoring) |
| OCP | Stable behaviour with variant implementations (payment processors, notification channels) — abstract on the third repetition | Early in the system's life before variation axes are clear |
| LSP | Always, when using inheritance or interface implementation — violations must be fixed | N/A |
| ISP | Fat interfaces force clients to depend on methods they don't use | Micro-interfaces (one method) in languages without structural typing — navigation overhead |
| DIP | Every boundary you want to test or swap: DB access, external APIs, clock | Value objects, utilities, pure functions — injecting StringFormatter is over-engineering |
| Pattern | Use case | Watch out for |
|---|---|---|
| Strategy | Multiple algorithms at runtime: payment processors, pricing rules, discount strategies | Using it for a fixed enum where if/switch adds no indirection cost |
| Factory Method | Creating objects from runtime context: event deserialisation, DB connection from config | — |
| Observer / Domain Events | Notify downstream systems after a write without direct coupling | In-process observer for durable events — use a message broker (Kafka, RabbitMQ) for durability |
| Decorator | Cross-cutting concerns layered on core behaviour: caching, retry, metrics, circuit breaker | — |
| Adapter | Wrap third-party SDK behind a domain interface; map errors to domain types | Coupling domain code directly to Stripe/Twilio types |
| Strangler Fig | Incrementally replace a legacy system by routing traffic to new components | — |
| Repository (DDD) | Abstract data access so domain logic doesn't depend on SQL/ORM specifics | — |
| Reckless | Prudent | |
|---|---|---|
| Deliberate | "No time for design" — no mitigation plan; dangerous | "We'll ship now and refactor when we understand the pattern" — tracked, intentional |
| Inadvertent | "What's layering?" — discovered in review; needs immediate attention | "Now we know how we should have done it" — retrospective learning |
Deliberate-Reckless debt blocks PRs. Inadvertent-Prudent debt gets an ADR documenting the learning. All debt gets a ticket.
has-a over is-a; inheritance hierarchies deeper than 2 levels are a smellEvery review comment must have a label:
[blocker] — must fix before merge: security issue, correctness bug, missing test, architectural violation[major] — should fix: significant idiom problem, missing observability, performance regression[minor] — fix if easy: style that affects readability, unnecessary complexity[nit] — optional: formatting, naming preference[question] — seeking clarification before judging[nice] — positive feedback on clean abstraction, well-written test, elegant designOverall verdict:
Write an ADR for every significant technical decision. Minimum structure:
# ADR-NNN: [Title]
## Status
[Proposed / Accepted / Superseded by ADR-NNN]
## Context
[What is the situation that forces a decision?]
## Decision
[What was decided?]
## Consequences
### Positive
- [Benefits]
### Negative / Trade-offs
- [Costs and risks]
### Neutral
- [Things that change but are neither good nor bad]
| Test type | What it covers | When it fails, it means |
|---|---|---|
| Unit | Domain logic, calculations, state machines — isolated, no I/O | The logic is wrong |
| Integration | Real DB (Testcontainers), real HTTP (WireMock) | The wiring or query is wrong |
| Contract (Pact) | Service-to-service API boundaries | The producer broke the consumer's expectations |
| E2E | Critical user journeys in a full environment | A user-facing regression |
Target ratio: ~70% unit, ~20% integration, ~10% E2E. Deviating toward E2E means you have confidence in the happy path but poor isolation of failure causes.
/health, /ready) on every serviceEnd every response with a confidence signal on its own line:
CONFIDENCE: [High|Medium|Low] — [one-line reason]
If the task is outside this skill's scope or you lack the information needed to proceed, return this instead of a confidence signal:
BLOCKED: [reason] — [what information would unblock this]
Do not guess or produce low-quality output to avoid returning BLOCKED. A precise BLOCKED is more useful than a low-confidence guess.