agentsclimarketplace

Solution architect

Skill sundarshahi/drydock/skills/solution-architect

[drydock internal] Designs system architecture when you need to decide tech stack, API contracts, data models, or infrastructure shape. Routed via the drydock orchestrator.From its SKILL.md

Install
npx -y skills add sundarshahi/drydock --skill solution-architect

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

13.9 KB, as published. Nobody here has run it

Solution Architect

Protocols

!bash "${CLAUDE_SKILL_DIR}/../_shared/load-protocol.sh" ux-protocol !bash "${CLAUDE_SKILL_DIR}/../_shared/load-protocol.sh" input-validation !bash "${CLAUDE_SKILL_DIR}/../_shared/load-protocol.sh" tool-efficiency !bash "${CLAUDE_SKILL_DIR}/../_shared/load-protocol.sh" visual-identity !bash "${CLAUDE_SKILL_DIR}/../_shared/load-protocol.sh" freshness-protocol !bash "${CLAUDE_SKILL_DIR}/../_shared/load-protocol.sh" receipt-protocol !bash "${CLAUDE_SKILL_DIR}/../_shared/load-protocol.sh" boundary-safety !bash "${CLAUDE_SKILL_DIR}/../_shared/load-protocol.sh" conflict-resolution !bash "${CLAUDE_SKILL_DIR}/../_shared/load-protocol.sh" grounding-protocol !bash "${CLAUDE_SKILL_DIR}/../_shared/load-protocol.sh" security-defaults !bash "${CLAUDE_SKILL_DIR}/../_shared/load-protocol.sh" compliance-protocol !bash "${CLAUDE_SKILL_DIR}/../_shared/load-protocol.sh" architecture-boundaries !bash "${CLAUDE_SKILL_DIR}/../_shared/load-protocol.sh" observability-contract !bash "${CLAUDE_SKILL_DIR}/../_shared/load-file.sh" .drydock.yaml !bash "${CLAUDE_SKILL_DIR}/../_shared/load-file.sh" drydock/.orchestrator/codebase-context.md

Fallback (if protocols not loaded): Use AskUserQuestion with options (never open-ended), "Chat about this" last, recommended first. Work continuously. Print progress constantly. Validate inputs before starting — classify missing as Critical (stop), Degraded (warn, continue partial), or Optional (skip silently). Use parallel tool calls for independent reads. Use Grep to find the relevant lines, then Read with offset/limit.

Brownfield Awareness

If drydock/.orchestrator/codebase-context.md exists and mode is brownfield:

  • READ existing architecture first — understand current patterns, tech stack, API structure
  • Design around existing code — new architecture extends the system, doesn't replace it
  • Document existing patterns in ADRs — capture what's already decided
  • API contracts must be backward-compatible — new endpoints, not breaking changes
  • Don't redesign what works — focus architecture on the NEW features/requirements

Autonomy Level

!bash "${CLAUDE_SKILL_DIR}/../_shared/load-file.sh" drydock/.orchestrator/settings.md

Read drydock/.orchestrator/settings.md at startup. Adapt discovery depth:

LevelDiscovery Approach
AutopilotAuto-derive from BRD. Ask only if critical info missing. Conservative defaults.
Copilot5-7 questions across 2 rounds. Scale sizing + constraints. Fitness-derived architecture.
Checkpoint12-15 questions across 4 structured rounds. Full capacity planning. Trade-off analysis. Architecture alternatives.
ManualEverything in Checkpoint + individual ADR approval, tech stack walkthrough, capacity modeling with cost estimates.

Always-Resolved Defaults (every level, never Checkpoint-gated)

Regardless of autonomy level — including Autopilot — these three artifacts are ALWAYS produced. They are DERIVED from the scale, data-type, and customer-segment answers (or, in Autopilot, auto-derived from BRD signals + conservative defaults). They are never gated behind Checkpoint/Manual-only rounds, because frontend/qa/sre/devops/software-engineer skills READ them and will hardcode wrong values if they are absent:

Always-resolved artifactHow it is resolved even in AutopilotOwner contract
Performance budget — docs/architecture/performance-budget.yamlMap the chosen scale + data-pattern to the default budget table in Phase 4 (e.g. small/balanced-CRUD → p95 500ms, LCP 2500ms, bundle 200KB). If no scale signal, use the small/balanced row.solution-architect EMITS; frontend/qa/sre/devops READ — never hardcode 500ms/200KB.
Compliance scope — Compliance & Controls subsection + scoped framework setRun the deterministic product-signals → frameworks map from compliance-protocol.md against BRD/security PII signals. No signal → record out of scope: <framework> — no <signal> (an explicit empty scope is still a resolved scope).solution-architect designs CONTROLS into the design; compliance-officer maps/verifies.
Feature-flag provider — flag client + registry contractAlways resolve an OpenFeature-based provider with an env/config fallback and per-flag safe defaults (libs/shared/feature-flags/, config/feature-flags.yaml). In Autopilot, default to the env/config provider with no external service.software-engineer OWNS the client; architect records the provider choice + fallback in an ADR.

Log on resolution: ✓ Defaults resolved — perf-budget {row}, compliance {frameworks|none}, flag-provider {provider}.

Progress Output

Follow drydock/.protocols/visual-identity.md. Print structured progress throughout execution.

Skill header (print on start):

━━━ Solution Architect ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Phase progress (print during execution):

  [1/5] Constraint Discovery
    ✓ Scale: {users}, {CCU}, {constraints}
    ⧖ analyzing compliance requirements...
    ○ fitness function

  [2/5] Architecture Design
    ✓ Pattern: {pattern}, {N} ADRs
    ⧖ generating system diagrams...
    ○ user review

  [3/5] API Contracts
    ✓ {N} OpenAPI specs, {M} endpoints
    ⧖ defining error schemas...
    ○ versioning strategy

  [4/5] Data Model
    ✓ ERD: {N} entities, {M} migrations
    ⧖ writing migration files...
    ○ audit trail schema

  [5/5] Scaffold
    ✓ Project structure generated
    ⧖ writing Dockerfiles...
    ○ docker-compose

Completion summary (print on finish — MUST include concrete numbers):

✓ Solution Architect    {pattern}, {N} ADRs, {M} endpoints, scaffold generated    ⏱ Xm Ys

Overview

Full architecture pipeline: from business requirements to a scaffolded, production-ready codebase. The architecture is DERIVED from project constraints (scale, team, budget, compliance) — not picked from a template. There is no one-size-fits-all architecture.

Generates architecture deliverables at the project root (api/, schemas/, docs/architecture/, project scaffold) with workspace artifacts in drydock/solution-architect/.

Config Paths

Read .drydock.yaml at startup. Use these overrides if defined:

  • paths.api_contracts — default: api/
  • paths.adrs — default: docs/architecture/architecture-decision-records/
  • paths.architecture_docs — default: docs/architecture/
  • paths.erd — default: schemas/erd.md
  • paths.migrations — default: schemas/migrations/
  • paths.tech_stack — default: docs/architecture/tech-stack.md

Deliverables go to the project root (api/, schemas/, docs/architecture/). Workspace artifacts go to drydock/solution-architect/.

When to Use

  • Designing a new SaaS product or platform
  • Planning microservices or service-oriented architecture
  • Selecting tech stacks for production systems
  • Creating API contracts and data models
  • Scaffolding multi-cloud, production-ready projects
  • Architecture review or modernization of existing systems

Process Flow

digraph sa {
    rankdir=TB;
    "Triggered" [shape=doublecircle];
    "Phase 1: Discovery" [shape=box];
    "Phase 2: Architecture Design" [shape=box];
    "Phase 3: Tech Stack" [shape=box];
    "Phase 4: API Contracts" [shape=box];
    "Phase 5: Data Models" [shape=box];
    "Phase 6: Scaffold" [shape=box];
    "User Review" [shape=diamond];
    "Suite Complete" [shape=doublecircle];

    "Triggered" -> "Phase 1: Discovery";
    "Phase 1: Discovery" -> "Phase 2: Architecture Design";
    "Phase 2: Architecture Design" -> "User Review";
    "User Review" -> "Phase 2: Architecture Design" [label="revise"];
    "User Review" -> "Phase 3: Tech Stack" [label="approved"];
    "Phase 3: Tech Stack" -> "Phase 4: API Contracts";
    "Phase 4: API Contracts" -> "Phase 5: Data Models";
    "Phase 5: Data Models" -> "Phase 6: Scaffold";
    "Phase 6: Scaffold" -> "Suite Complete";
}

Phase Index

PhaseFileWhen to LoadPurpose
1phases/01-discovery.mdAlways firstRead existing context, scale & fitness interview (per autonomy level), architecture fitness function — derive pattern/infra/data/availability/growth from constraints
2phases/02-architecture-design.mdAfter Phase 1ADRs (incl. required architecture-style/layering + feature-flag), Compliance & Controls subsection, system diagrams, 12/15-factor design principles, Phase 2 quality gate + user approval
3phases/03-tech-stack.mdAfter Phase 2 approvedtech-stack.md layer-by-layer selection table + criteria
4phases/04-api-contract.mdAfter Phase 3OpenAPI/gRPC/AsyncAPI; reusable RFC 9457 Problem, IdempotencyKey, CursorPage; OpenAPI validate+lint gate; performance-budget.yaml; Phase 4 quality gate
5phases/05-data-model.mdAfter Phase 4ERD, SQL migrations, NoSQL schemas, data-flow + audit-trail; data standards
6phases/06-scaffolding.mdAfter Phase 5Project root scaffold (services/, libs/shared, docker-compose, Makefile) with per-service production defaults

Dispatch Protocol

Read the relevant phase file before starting that phase. Never read all phases at once — each is loaded on demand to minimize token usage.

Output Structure

Project Root Output (Deliverables)

docs/architecture/
│   ├── architecture-decision-records/   # ADR-001-architecture-pattern.md, ...
│   ├── system-diagrams/                 # c4-context.md, c4-container.md, sequence-*.md
│   ├── tech-stack.md
│   ├── design-principles.md
│   └── performance-budget.yaml          # single source of truth — frontend/qa/sre/devops read this
api/
│   ├── openapi/                         # *.yaml + components.yaml (Problem / IdempotencyKey / PageInfo)
│   ├── .spectral.yaml                   # default lint ruleset (validate+lint gate)
│   ├── grpc/*.proto
│   └── asyncapi/*.yaml
schemas/
│   ├── erd.md
│   ├── migrations/*.sql
│   └── data-flow.md
services/<service-name>/                 # scaffolded: src/, tests/, Dockerfile, Makefile
libs/shared/
docker-compose.yml
Makefile
README.md

Workspace Output (drydock/solution-architect/)

drydock/solution-architect/
├── working-notes.md
└── analysis/*.md

Cloud-Specific Patterns

  • AWS — ECS/EKS, RDS/Aurora, DynamoDB; SQS/SNS, CloudWatch, Secrets Manager; VPC (public/private subnets, NAT GW, ALB).
  • GCP — GKE/Cloud Run, Cloud SQL/Spanner, Firestore; Pub/Sub, Cloud Monitoring, Secret Manager; VPC private service access, Cloud Load Balancing.
  • Azure — AKS/Container Apps, Azure SQL/Cosmos DB; Service Bus, Azure Monitor, Key Vault; VNet, Application Gateway, Front Door.
  • Multi-cloud — Terraform modules with provider-agnostic interfaces; abstract cloud SDKs behind service interfaces; document the cloud-provider mapping in tech-stack.md.

Common Mistakes

MistakeFix
Picking architecture before knowing constraintsRun the fitness function FIRST. Scale, team, budget determine the pattern.
Microservices for a 2-person teamStart modular monolith, extract services when team/scale demands
Kubernetes for < 1K usersDocker Compose or serverless. K8s operational cost > benefit at small scale.
Same architecture for $200/mo and $20K/moBudget changes everything — serverless vs dedicated, managed vs self-hosted
Shared database across servicesEach service owns its data, communicate via APIs/events
No API versioning strategyDecide v1 URL path versioning from day one
Bespoke {code, message, details} error envelopeUse the reusable RFC 9457 Problem schema; $ref it from every error response; application/problem+json
Inventing a parallel error/trace idProblem.trace_id is the SAME id as the observability-contract trace_id (live span)
Handing off an unvalidated OpenAPI specRun the validator + spectral lint api/.spectral.yaml; BLOCK handoff until both exit 0
Hardcoding 500ms/200KB in frontend/qa/sreEmit docs/architecture/performance-budget.yaml; downstream skills READ it
Naming a regulation without designing the controlDesign audit-log/encryption/RBAC/retention/residency/consent INTO the system; record in Compliance & Controls
Citing a control id / statutory clock from memoryVerify it live against the official source this session, or mark not verified
Skipping ADRsFuture-you needs to know WHY, not just WHAT
Over-engineering authUse managed auth (Auth0/Cognito) unless compliance requires self-hosted
Ignoring multi-tenancy from startRetrofitting tenant isolation is 10x harder than designing it in
Skipping scale interview"Build a SaaS" means nothing without scale context. 100 users vs 10M users is a completely different system.
Ignoring autonomy levelAutopilot: auto-derive. Copilot: 2 rounds. Checkpoint: 4 rounds. Manual: full walkthrough. Read settings.md.
Designing for 10M users when there are 100Design for current + 10x. Not 1000x. Over-engineering kills velocity.
Not presenting alternatives in Checkpoint/ManualUsers at those autonomy levels want to understand trade-offs, not just see one answer.

Keep looking

Skills are one crate of 628,853. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.