Skip to content
Skills Library
Programming · Planning

stack-profile

/stack-profile

Defines the optional per-project technology stack profile that overrides the implementation skills' built-in default stack. Invoked when the user says "set the stack", "init stack", "what stack", "use a different stack", "stack profile", "configure the project stack", "we use Python/Django/Vue/etc", or runs "/init-stack" — and read by the implementation skills (react-component-library, backend-service-patterns, pages-templates, cloud-infra, data-modeling) before they build, so a project on a non-default stack adapts instead of forcing the defaults.

Repository
compainy ↗
Licence
MIT
Last repository change
29.06.2026

Assessment and security

100/ 100Class: good
Format25 / 25
Frontmatter with name and description, valid name, description up to 1,024 characters, name matching the folder.
Discoverability25 / 25
Description explains when to use the skill, has a reasonable length and uses third person.
Content35 / 35
At least 150 words and at most 500 lines, headings, step lists, examples or code.
Hygiene15 / 15
No placeholders such as TODO, no Windows paths, with a licence.
Riskno signals detected in the scan
Files in this package
1
Scripts
0
HTML comments
1
URLs in SKILL.md
0
Deprecation

No signals detected. Repository changed on 29.06.2026, without references to retired models or APIs.

Licence

MIT, open: use and modify while retaining author attribution.

What to check before installing
  • SKILL.md zawiera komentarze HTML (1). Nie widać ich w podglądzie Markdown, a model je czyta.

What it does and when to use it

Defines the optional per-project technology stack profile that overrides the implementation skills' built-in default stack. Invoked when the user says "set the stack", "init stack", "what stack", "use a different stack", "stack profile", "configure the project stack", "we use Python/Django/Vue/etc", or runs "/init-stack" — and read by the implementation skills (react-component-library, backend-service-patterns, pages-templates, cloud-infra, data-modeling) before they build, so a project on a non-default stack adapts instead of forcing the defaults.

Triggers from the description

built-in default stack. Invoked when the user saysinit stackwhat stackuse a different stackstack profileconfigure the project stackwe use Python/Django/Vue/etc
Original author description

Defines the optional per-project technology stack profile that overrides the implementation skills' built-in default stack. Invoked when the user says "set the stack", "init stack", "what stack", "use a different stack", "stack profile", "configure the project stack", "we use Python/Django/Vue/etc", or runs "/init-stack" — and read by the implementation skills (react-component-library, backend-service-patterns, pages-templates, cloud-infra, data-modeling) before they build, so a project on a non-default stack adapts instead of forcing the defaults.

How it works

  1. Where the profile lives
  2. How implementation skills use it
  3. Built-in defaults (and what stays invariant)
  4. Profile format
  5. Seeding the profile
Original SKILL.md headings · 93 lines, 872 words
SKILL.md preview
---
name: stack-profile
description: Defines the optional per-project technology stack profile that overrides the implementation skills' built-in default stack. Invoked when the user says "set the stack", "init stack", "what stack", "use a different stack", "stack profile", "configure the project stack", "we use Python/Django/Vue/etc", or runs "/init-stack" — and read by the implementation skills (react-component-library, backend-service-patterns, pages-templates, cloud-infra, data-modeling) before they build, so a project on a non-default stack adapts instead of forcing the defaults.
---

# Stack Profile Skill

This plugin is **opinionated by default**: its implementation skills ship concrete, battle-tested code for a specific stack. That concreteness is the value — it's what makes the agents produce deep output fast, not generic scaffolding.

But the stack is a **default, not a cage**. A project can declare its own stack in a profile file; the implementation skills read it and adapt. Two layers, treated differently:

- **Discipline is invariant.** TDD (red/green/refactor, the unit/integration/e2e tiers, `Subject_Scenario_Expectation` naming), DDD (strategic boundaries, aggregates when earned), pragmatic SOLID (DI + interfaces, no ceremony), DRY/KISS/YAGNI, ports-and-adapters, architecture/ADR rigor — these do **not** change with the stack. The discipline skills never read the profile.
- **Stack is a parameter.** Languages, frameworks, component library, data stores, infra target, test runner — these are what the profile sets, and what the implementation skills swap.

## Where the profile lives

`.ai/stack-profile.md` at the project root. When present, it **overrides** the built-in default stack named in any implementation skill. When absent, the defaults apply unchanged — zero friction on a default-stack project.

## How implementation skills use it

Before building, an implementation skill (or the engineer agent running it) must:

1. **Read `.ai/stack-profile.md`** if it exists.
2. If it **matches** the skill's built-in default (or is absent) → use the skill's concrete examples directly.
3. If it **diverges** (names a framework/language/store the skill doesn't default to) → treat the skill's code examples as *patterns to translate*, not literal output. **Research the chosen technology's current idioms** (official docs via WebFetch, existing project code via Grep/Glob) **before writing**, then build to the same discipline. Never paste a default-stack example into a project that declared a different stack.
4. Apply the discipline regardless — the profile changes *what* you build with, never *how rigorously*.

## Built-in defaults (and what stays invariant)

So divergence is detectable, these are the skills' defaults. Rows marked **invariant** are discipline, not stack — the profile does not override them:

| Dimension | Default | Owning skill |
|---|---|---|
| Frontend framework | TanStack Start + TanStack Router | `pages-templates` |
| Component primitives | shadcn/ui pattern on Base UI (`@base-ui-components/react`) | `react-component-library` |
| Styling | Tailwind + `cva` + `cn()` | `react-component-library` |
| Forms / validation | TanStack Form + zod@^4 | `pages-templates` |
| URL/query state | nuqs | `pages-templates` |
| Backend language(s) | Go / Node / Rust | `backend-service-patterns` |
| HTTP framework | Gin (Go) / Fastify (Node) / Axum (Rust) | `backend-service-patterns` |
| Backend validation | go-playground/validator / zod / validator crate | `backend-service-patterns` |
| Service architecture | ports-and-adapters (**invariant — not overridable**) | `backend-service-patterns` |
| Data stores | chosen per workload (already profile-driven) | `data-modeling` |
| Infra target | AWS / Cloudflare / Hetzner | `cloud-infra` |
| IaC | IaC-first, provider-appropriate | `cloud-infra` |
| Test tiers | unit / integration / e2e (**invariant**); runner per language | `principles-tdd` |

## Profile format

`/init-stack` writes this; edit it by hand anytime. Keep only the lines that differ from the defaults — anything omitted, left blank, or still at its placeholder is treated as the default. Architecture (ports-and-adapters) and the test tiers are **not** fields here: they are invariant, so they appear only as reminders, never as editable values.

```markdown
# Project Stack Profile
<!-- Read by the `compainy` plugin implementation skills; overrides their defaults.
     Discipline (TDD/DDD/pragmatic-SOLID/DRY-KISS, ports-and-adapters,
     test tiers, Subject_Scenario_Expectation naming) is invariant. -->

## Languages
- e.g. TypeScript, Go

## Frontend
- Framework:           # e.g. TanStack Start | Next.js | Remix | SvelteKit | none
- Component primitives:# e.g. Base UI | Radix | Ark | native | <none>
- Styling:             # e.g. Tailwind+cva | CSS Modules | vanilla-extract
- Forms / validation:  # e.g. TanStack Form + zod | react-hook-form + zod
- URL / query state:   # e.g. nuqs | search params | none

## Backend
- Language(s):         # e.g. Go | Node | Rust | Python
- HTTP framework:      # e.g. Gin | Fastify | Axum | FastAPI | Django
- Validation:          # e.g. go-playground/validator | zod | pydantic
# Architecture is invariant: ports-and-adapters / DI (not a stack parameter)

## Data
- Primary store(s):    # e.g. Postgres, MongoDB
- Cache:               # e.g. Redis | none
- Search / vector:     # e.g. pgvector | OpenSearch | none

## Infra
- Target:              # e.g. AWS | Cloudflare | Hetzner | self-host | local-only
- IaC:                 # e.g. Terraform | Pulumi | SST | none
- Local infra:         # e.g. docker-compose (mongodb, postgres, redis, rabbitmq)

## Testing
- Runner(s):           # e.g. vitest (TS), go test (Go)
- E2E:                 # e.g. Playwright | none
# Test tiers are invariant: unit / integration / e2e (not a stack parameter)

## Notes / constraints
- # anything an agent must know: monorepo layout, banned deps, version pins, etc.
```

## Seeding the profile

- **`/init-stack`** runs an interview and writes `.ai/stack-profile.md`.
- In `feature-delivery`, the main session should seed or confirm the profile **before the build phase** so every dispatched specialist reads the same stack. A profile that matches the defaults is fine to leave implicit; write one only when the project diverges or when you want it explicit for other contributors.

Versions

RepositoryScoreLicence
This page · brrritscold/compainy100MIT
leanstacks/lstk90MIT

Database snapshot: 13.11.2026 · package version 0ade512e18c8 (SHA-256 digest of the entire package)

Downloads in the last 30 days: 0 · ranking

Report a problem with this skill: harmful content, incorrect descriptions or an author’s removal request.

Similar skills

  • 100prism-stack
    Use when asked for framework-specific best practices, implementation guidelines for React/Vue/Svelte/Next.js, or stack-specific patterns. Examples: "React best practices", "Vue component patterns", "Next.js performance
  • 100tech-stack
    Interactively discovers and configures the technology stack for a new product from a business plan. This skill should be used when the user asks to "discover tech stack", "configure technology stack", "select technologies", "run Stage 0", "start tech stack discovery", "define…
  • 90stack-guard
    Enforces the fixed technology stack of this project. Use before writing any code, adding a dependency, or scaffolding a module — and always when tempted to choose a library, framework, or tool. Check this skill whenever a change might introduce a new dependency or drift from the approved stack.
  • 100set-up-stack-profile
    Use when starting in a repo with no .claude/stack-profile.md, when the stack changed, or when the user asks which plugins and skills to use. Detects the stack, asks only the gaps, writes the profile, and lists plugins and skill order.
  • 95dev-init
    This skill should be used when the user asks to "dev-init", "技術スタックを選定", "新規プロジェクト初期化", "initialize tech stack", "プロジェクトをセットアップ", "setup project", "scaffold project", "プロジェクト作成", "tech stackを決める". インタラクティブなヒアリングでプロジェクトの技術スタックを決定し、dev-context互換のコンテキストファイルを生成する。承認制でプロジェクトスキャフォールディングも実行可能。
  • 95project-init
    Use this skill when the user says 'create project structure', 'scaffold project', 'initialize project', 'set up folder structure', 'new project from scratch', or when a new project needs folders and config files created. This skill scaffolds the full project tree based on…

Feedback and reports

Your message goes to Bartosz Sokoliński. An email address is needed only for a reply. See the privacy policy.