Ref sp dev projects architecture
Skill swiftpostlabs/agentic-tools/.agents/skills/ref-sp-dev-projects-architecture
Portable architecture guidance for feature folders, boundaries, shared utilities, and separating product code from maintenance scripts. Use when: deciding where code should live, splitting features, or reviewing repository structure.From its SKILL.md
npx -y skills add swiftpostlabs/agentic-tools --skill ref-sp-dev-projects-architectureAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 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.
What its file declares
Copied from the file, not written here
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
7.6 KB, ~1.5k tokens by cl100k_base, as published. Nobody here has run it
Projects Architecture
Purpose
Provide portable repository and feature-structure defaults that keep codebases modular, discoverable, and resistant to accidental coupling.
When to use this skill
- Designing the folder layout for a new feature or tool.
- Deciding whether code belongs in product source or in maintenance scripts.
- Reviewing whether a feature has grown beyond one file or one folder.
- Choosing when shared utilities are justified.
- Refactoring a repository that has started to blur boundaries.
Scope Boundaries
- Use this skill for portable structure decisions such as feature boundaries, shared-utility thresholds, and product-versus-maintenance separation.
- Use a repo-local conventions skill (in this repo,
ref-sp-dev-repo-conventions) when the question is about a specific repository's exact top-level folders,pyproject.toml, or agent wiring. - Use
ref-sp-py-python,ref-sp-js-javascript, orref-sp-js-typescriptwhen the question is about language-specific folder shapes. - Use
ref-sp-js-web-standalone-templatewhen the structure question is specific to a browser-only local app or mini-tool.
Defaults
- Prefer feature-first organization over type-based dumping grounds.
- Keep product code under the main source tree.
- Keep maintenance and repo automation separate from product features.
- Keep tests near the code they explain when the project layout allows it.
- Add a short
README.mdat the root of each real feature folder so the feature's purpose and entrypoints are obvious without reading code first. - Extract shared utilities only after real reuse appears.
- In mixed Python and Node repositories, keep Python package features under
src/<package>/<feature>/and keep Node or TypeScript package features in the matching feature slice instead of inventing a parallel top-level tree. - In mixed Python and Node repositories, use
scripts/for thin runtime entrypoint shims, dev automation, migrations, or one-off maintenance, not for the owning implementation of installed commands.
Task Framing
| Command or action | What | Why | When | Expected outcome |
|---|---|---|---|---|
| Define feature boundaries | Decide what belongs inside one feature slice and what should stay outside it. | Clear ownership reduces coupling and makes refactors cheaper. | When creating a new feature or splitting a large one. | The owning folder is obvious and internal details stay internal. |
| Promote product code out of maintenance paths | Move shipped or user-facing behavior under the main source tree instead of leaving it in scripts/. | Prototype placement often lingers long after the code becomes part of the product. | When a script becomes a real feature or installed command. | Product code is discoverable and tested like the rest of the source tree. |
| Decide whether to share a utility | Judge whether repeated logic is stable enough to extract or still cheap to duplicate locally. | Premature sharing creates invisible dependencies and vague utility buckets. | When two or more features start to reuse similar helpers. | Shared code exists for real reuse and has a clear home. |
Core Rules
Feature boundaries
- Give each feature a folder or slice that is easy to find and reason about.
- Keep the code, tests, and local assets that change together close together.
- When a feature has its own folder, add a short
README.mdthere that explains what the feature owns, where the main entrypoints live, and how to validate it. - Avoid letting one feature depend directly on another feature's internals.
Shared code
- Create shared utilities only when reuse is real and stable.
- Do not create a global
utilsorhelpersbucket unless it has clear internal categories. - Prefer duplication of tiny stable code over premature shared abstractions that create coupling.
Product code vs maintenance scripts
- If code is a user-facing feature of the product or package, keep it under the main source tree.
- If code is repo maintenance, migration, scaffolding, or one-off automation, keep it in
scripts/or the equivalent maintenance area. - If an installed CLI needs a runtime entry file, keep the implementation under the owning feature in
src/and letscripts/hold only the smallest executable shim that calls into that feature. - Do not leave product behavior buried in maintenance scripts just because it started as a prototype.
Mixed Python and JavaScript or TypeScript setup
- When a repo ships both Python and Node surfaces, let each language keep its normal packaging and config entrypoints while sharing the same feature names and folder ownership.
- Prefer colocated
main.pyandmain_test.pyfor Python plus the matching Node files for the same feature when both runtimes expose that surface. - For no-build npm packages or Git-installed CLIs that run from
node_modules, prefer.mjsplus JSDoc, such asmain.mjsandmain.test.mjs, so the package does not rely on TypeScript runtime stripping. - When TypeScript is the selected Node surface and it is not shipped as directly executed package runtime, use
main.tsandmain.test.tsfor the same feature. - Keep Python packaging in
pyproject.toml, keep Node packaging inpackage.json, and split language-specific config such astsconfigfiles by runtime surface instead of forcing one config file to describe everything. - Keep shared cross-runtime helpers narrow and explicit so a feature does not quietly depend on another language surface's internals.
Naming and discoverability
- Choose folder names that match the domain or workflow they contain.
- Keep file names descriptive enough that a reader can predict the contents before opening them.
- Avoid over-generic folder names when a narrower domain name exists.
Growth path
- Start small, but keep a path open for splitting files as complexity grows.
- Extract pure helpers before extracting stateful orchestration.
- If a file is hard to scan, split by responsibility inside the same feature before introducing repo-wide infrastructure.
Example Layouts
Python package with feature-first layout
scripts/ (only for devs, not installed with the package)
data-migration.py
generate-docs.py
src/package_name/
billing/
main.py
main_test.py
service.py
service_test.py
Mixed Python and no-build Node package
scripts/
billing-cli.mjs
src/package_name/
billing/
main.py
main_test.py
main.mjs
main.test.mjs
utils/
common.mjs
Standalone browser tool with local assets
scripts/ (only for devs, not installed with the package)
data-migration.mjs/mts
generate-docs.mjs/mts
src/features/billing/
index.html
app.js
styles.css
Validation
- A new engineer can find the owning feature quickly.
- Product code is not hidden inside maintenance paths.
- Shared utilities exist because of real reuse, not prediction.
- Feature boundaries are explicit and avoid backdoor dependencies.
- Tests live close enough to their source that maintenance stays cheap.
References
- Read
./references/checklist.mdfor a quick repository-structure review pass. - Read
./assets/trigger-eval-queries.example.jsonwhen testing whether architecture requests activate this skill cleanly.
What ships with it: 2 files
1.3 KB alongside SKILL.md
assets/
references/
- checklist.md528 B