Propose folder reorganization
Skill KhurrumMahmood/senior-vibe-engineer/.claude/skills/propose-folder-reorganization
Turn a confirmed Python, Go, Java 17, Kotlin/JVM, C#, Swift 6.3.3, TypeScript, checked-JavaScript, PHP, Ruby, bounded Rust, or bounded Dart folder-topology cluster into a per-cluster reorganization proposal. Typed-source v1 resolves import impact, records compatibility and convention constraints, and emits a read-only move/test plan. No file moves or edits; hand off only after human review.From its SKILL.md
npx -y skills add KhurrumMahmood/senior-vibe-engineer --skill propose-folder-reorganizationAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 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.
SKILL.md
28.0 KB, ~6.5k tokens by cl100k_base, as published. Nobody here has run it
/propose-folder-reorganization
Swift 6.3.3 accepted branch
Use scripts/propose_swift.py only for one exact accepted Swift topology
finding, one current complete swift-semantic-facts-v2 pack, an explicit
SwiftPM recursive-target-subfolder convention, and separate hash-bound
candidate and proposal verdicts. Keep the copied _swift-semantic-readonly
directory beside this selected skill. Pass --topology, --facts,
--acceptance, --output-dir, --target-name, the configuration and native
product/output expectations, and absolute --swift, --swiftc, and
--swift-format paths; run --help for the exact CLI.
Consume the final topology selection as authority. Never redetect the cluster
or join an older subsystem map. The schema-v2 provider validates the current
pack, then runs only as a native verifier on disposable current and exact
after trees. For the supported cluster, propose exactly the four direct
Billing*.swift siblings beneath Sources/SwiftA3Core/Billing/; leave
Package.swift, SwiftPM target/module identity, module-qualified type identity,
and API signatures unchanged, and require exact logical resolved call/reference
edges before and after.
Emit only proposal.md, evidence.json, and scope.json. Refuse incomplete,
stale, tampered, unsafe, or native-failing evidence and Swift/Xcode,
mixed-language, protocol/actor, dynamic/reflection, macro/conditional, or
ABI-sensitive conditions. Filename grouping does not prove ownership,
external callers, runtime behavior beyond the named native checks, ABI/release
compatibility, or mutation authority.
C# 14 / .NET 10 accepted branch
Use scripts/propose_csharp.py only for one exact accepted three-or-more-file
direct-sibling C# prefix cluster, an explicit project convention, a current
complete integrated C# subsystem map and Roslyn fact pack, and a
content-addressed csharp-structure-acceptance-v1 candidate/proposal verdict.
Keep copied _csharp, _csharp-semantic, and map-subsystem libraries beside
the selected skill; run the script with --help for exact paths and the pinned
--dotnet argument. It consumes the final topology/map artifacts and never
redetects the cluster.
The branch emits only proposal.md, evidence.json, and scope.json, with
exact file moves, unchanged namespace/type/assembly identity, resolved caller
and reference impact, and exact manifest/project compile-item after-states. It
proves the current tree and an independently applied disposable after-tree with
native build/test/smoke. Filename grouping does not prove ownership,
reflection/resource paths, framework registration, generated/vendor or
external consumers, conditional variants, behavioral equivalence, ABI/release
compatibility, or mutation safety.
Kotlin/JVM 2.4.10 accepted branch
Trigger this branch only for one accepted three-or-more-file Kotlin topology
cluster with a current complete Kotlin map, explicit project convention, and
content-addressed human acceptance. Read ../_kotlin-semantic/GUIDE.md, keep
_kotlin-semantic beside the selected skill, and run
scripts/propose_kotlin.py with --topology, --map-evidence, --acceptance,
--output-dir, absolute Kotlin/JVM 2.4.10 --kotlinc, and absolute JDK 17
--java paths; run --help for the exact CLI.
The branch emits only proposal.md, evidence.json, and scope.json, then
proves the exact same-package manifest move on the current tree and a
disposable after-tree. Filename grouping and K1 direct facts remain
insufficient for package ownership, override/runtime dispatch,
reflection/callable references, delegation, generated/KAPT/KSP or plugin
inputs, Gradle/source-set variants, Java/external callers, behavior, JVM ABI,
mutation, or release authority.
C++20 branch
Use scripts/propose_cpp.py with accepted topology evidence, a current complete
C++20 map, an explicit project convention, and hash-bound human acceptance;
run it with --help for the exact CLI. It emits a read-only plan for one
compiler-owned private prefix cluster with exact qualified signatures,
overloads, callers, headers, Make edits, and after-tree census. Filename
grouping proves no ODR/ABI, specialization, dispatch, external variant, or
mutation safety.
C17 branch
Use scripts/propose_c.py with an accepted prefix cluster, explicit project
convention, current complete C map, and hash-bound human acceptance; run the
script with --help for the exact CLI. It emits a read-only ready, keep-flat,
or no-convention outcome. Filename grouping proves no ownership, alternate-
variant or external-consumer completeness, ABI, or mutation safety.
PHP and Ruby
For PHP, read _php-proposal/GUIDE.md; for Ruby, read
_ruby-semantic/PROPOSAL-GUIDE.md. These branches consume accepted clusters
and conventions, emit read-only move plans, and never move source.
Dart v1
Dart v1 consumes one accepted D1 cluster, accepted D4 import impact, and an explicit human convention judgment. It accounts for every member and edge, preserves the public barrel, and verifies the exact after-tree only in a disposable copy. Cohesive, convention-free, package-URI-uncertain, or stale evidence defers or refuses without moving source.
SKILL_ROOT=".agents/skills/on-demand/propose-folder-reorganization"
python3 "${SKILL_ROOT}/scripts/propose_dart.py" \
--project-root "$PWD" --evidence-dir reports/dart-folder-evidence \
--acceptance reports/dart-folder-evidence/acceptance.json \
--inspection "$PWD/reports/propose-folder-reorganization/dart/inspection.json" \
--proposal "$PWD/reports/propose-folder-reorganization/dart/proposal.md"
Rust v1
Read knowledge/rust-v1.md. Supply one human-reviewed split/cohesive judgment
and optional project convention. The adapter emits an exact read-only Cargo
module move plan and native obligations at
ready_for_human_review/review_folder_plan; it never moves files. The copied
canonical producer is
.claude/skills/_common/scripts/rust_proposal_evidence.py; a copied projection
places the same bytes beside the adapter under the alias
rust_project_evidence.py.
SKILL_ROOT=".agents/skills/on-demand/propose-folder-reorganization"
python3 "${SKILL_ROOT}/scripts/propose_rust.py" \
--project-root "$PWD" --parent crates/example/src --prefix billing \
--cluster-judgment split \
--inspection "$PWD/reports/propose-folder-reorganization/rust/inspection.json" \
--proposal "$PWD/reports/propose-folder-reorganization/rust/proposal.md"
You are the orchestrator for turning a folder-topology cluster
into a reorganization proposal. /find-folder-topology-drift already
flagged the cluster; your job is to read the cluster files, gather
the import graph, and emit a proposal the human reviews before
handing off to /refactor-subsystem (decomposition mode).
You do NOT move files, rename modules, or touch imports in this
skill. The only artifact you produce is
reports/propose-folder-reorganization/<target-slug>/proposal.md
plus its supporting inspection.json.
How success is judged
proposal.mdcarries the current → proposed tree, a file-move table grounded ininspection.json, the full import-impact list (every breaking import line with its after-rename target), and a characterization-test matrix as the stop condition.- ADR 0006 thresholds are honored: ≥3 real siblings or the proposal
says
defer_below_threshold; one cluster per run;defer_signalsfrom the inspection are surfaced, never suppressed. - Zero file moves, zero edits — handoff is
/refactor-subsystemin decomposition mode after human review. Write toward these gates from Stage 0.
Core beliefs
-
Framework norms are a floor; intuitiveness is the goal above it. Read
_common/structural-design-principles.mdbefore sizing a proposal. Every proposal evaluates the cluster against both layers: what framework norms constrain (Django app boundary, Python package semantics, test-runner discovery — the floor), and what intuitiveness gain motivates the reorganization (skim test, find test, cluster test — above the floor). Frame the proposal's "Why this reorganization" section in those terms. -
The cluster IS the unit of work. ADR 0006 says one cluster per PR. The proposal is sized to one cluster, not "all of
core/services." If a parent has multiple clusters (e.g.core/services/hascollection_*,extraction_*,field_*, etc.), each gets its own/propose-folder-reorganizationrun. -
Import impact dominates the migration cost. Whether the cluster has 5 files or 50 doesn't matter; what matters is how many call sites import the cluster's symbols. The proposal enumerates every import line that breaks — by absolute path, with the after-rename target — so
/refactor-subsystemcan run a deterministic find/replace in commit 1 (the move) without surprises. -
Tests migrate alongside their subjects, not in bulk. ADR 0006 Rule 1 forbids a single bulk-rename PR for
tests_*.py→tests/. When the cluster has matchingtests_<prefix>_<x>.pyfiles at root, the proposal pairs each test with its target subject and migrates them in the same PR — but the unrelatedtests_*.pyfiles at root stay where they are until their subject moves. -
Singletons stay flat. If the inspection turns up a "cluster" that is really one substantial module + one helper that happens to share a prefix, the proposal recommends
defer_below_thresholdrather than packaging two files into a folder. The threshold is ≥3 real siblings — see ADR 0006's "When NOT to split" guardrails. -
Behavior preservation is the migration's stop condition. The proposal names a characterization-test matrix that
/refactor-subsystemmust pin BEFORE the move. Same discipline as ADR 0002's two-commit refactor: capture current behavior, migrate, confirm unchanged. Any latent bug found during the move is its own commit, never bundled with the rename.
Scope
- Project root: the working directory.
- Python:
.venv/bin/pythonfor the helper script (it routes Python parsing through the shared per-language adapter registry (ADR 0032; Python-only here) and walks the project to build the import graph; stdlib-only — no Django imports needed). - Output:
reports/propose-folder-reorganization/<target-slug>/. Never touches any other file. - Read-only. No file moves, no edits, no Edit tool. The
orchestrator's
allowed-toolslist intentionally excludes Edit.
Go v1
Read knowledge/go-v1.md; its copied-closure command requires an explicit project convention, while language-safety blockers override that permission.
Java 17 v1
Read knowledge/java-v1.md; its copied-closure command requires explicit
cluster and subpackage-convention judgments, then emits a compiler-resolved,
current-source-root-only plan. It never loads Maven, Gradle, or JARs.
TypeScript / TSX and checked-JavaScript v1 — one resolved cluster proposal
The Python workflow below remains unchanged. This additive typed-source branch is for one human-confirmed flat file cluster only; it does not infer a Node, React, Next, ORM, or test-framework convention.
Supported invariant
Given a direct parent directory, a prefix, a named project-local tsconfig,
and the host's own installed typescript package, produce a read-only
proposal for three or more eligible prefix-*.ts[x] / prefix_*.ts[x] or
prefix-*.js[x] / prefix_*.js[x] (including .mjs and .cjs)
siblings. The final proposal and its JSON inspection contain:
- every selected source file and its destination beneath
<parent>/<prefix>/; - every resolved static
import,export … from, andimport = requireline that points at a selected file — including cluster-internal imports, direct relative consumers,pathsalias consumers, and existing barrel re-exports — with the exact after-move specifier; - an explicit compatibility decision: preserve existing
index.ts[x]barrels, add a new domain barrel, and migrate every resolved direct subpath importer rather than retain legacy file shims; - a characterization-test matrix and the host-native
npm run typecheckproof required before and after the behavior-preserving move.
The user must pass --cluster-judgment split after confirming that this
specific cluster harms navigation. Pass --cluster-judgment cohesive when
the files are deliberately cohesive; it writes an explicit
defer_cohesive_cluster proposal rather than pretending lexical naming is a
refactor verdict.
This v1 does not execute the move, discover test ownership, resolve dynamic or runtime module loading, infer framework conventions, preserve unlisted external package subpaths, or claim a TypeScript or JavaScript framework migration.
Checked JavaScript passes --language javascript with a named jsconfig.json
or tsconfig.json that sets allowJs and checkJs. It accepts .js, .jsx,
.mjs, and .cjs, including a JS cluster in a mixed JS/TS root. A selected
file omitted from that config is an explicit partial/defer_partial_config
artifact, not a move authority.
TypeScript guardrails and statuses
All exclusions are project-root-relative, including direct invocation of an
excluded directory. Test/spec/fixture, generated, vendor, dependency, build,
coverage, report, declaration, minified, bundle, and existing index.ts[x]
source are excluded from the candidate cluster. Existing index files remain
eligible importers so their re-export rewrites appear in the impact table.
- Fewer than three selected files writes
defer_below_threshold. - A
scratch,sandbox,experiments, or equivalent path writesdefer_scratch_code. - An explicitly cohesive cluster writes
defer_cohesive_cluster. - An excluded direct parent writes
defer_excluded_target. - An unresolved or symlink-blocked static import inside a selected cluster
file writes a
blockeddefer_unresolved_importsproposal. Resolve it and re-run; do not treat a partial table as move authority. - A missing parent, a logical path outside the host, any target/tsconfig or artifact path traversing a symlink, invalid syntax/configuration, or a missing project-local TypeScript Compiler API exits 2 with no false-clean proposal.
Artifact paths must be under
reports/propose-folder-reorganization/; existing or ancestor symlinks are
rejected before anything is written. Directory symlinks are never followed.
Installed TypeScript commands
Run these from the target TypeScript host root. The stock Codex installer
copies only this selected skill to .agents/skills/; the runtime command uses
the host's Node and project-local typescript, never this repository's
scripts, _common, virtual environment, or another installed skill.
: "${PROPOSE_FOLDER_REORGANIZATION_SOURCE:?Set this to the pinned skill source/ref}"
npx --yes [email protected] add "${PROPOSE_FOLDER_REORGANIZATION_SOURCE}" \
--skill propose-folder-reorganization --agent codex --copy -y
<!-- installed-command:stock-install:end -->
<!-- installed-command:typescript-proposal:start -->
PFR_PARENT="${PFR_PARENT:-src}"
PFR_PREFIX="${PFR_PREFIX:-billing}"
PFR_CLUSTER_JUDGMENT="${PFR_CLUSTER_JUDGMENT:-split}"
PFR_LANGUAGE="${PFR_LANGUAGE:-typescript}" # typescript | javascript
PFR_TSCONFIG="${PFR_TSCONFIG:-tsconfig.json}"
PFR_NAME="${PFR_NAME:-${PFR_PARENT//\//-}__${PFR_PREFIX}}"
SKILL_ROOT=""
for SKILL_CANDIDATE in \
".agents/skills/propose-folder-reorganization" \
".claude/skills/propose-folder-reorganization"
do
if [ -f "${SKILL_CANDIDATE}/SKILL.md" ]; then
SKILL_ROOT="$(cd "${SKILL_CANDIDATE}" && pwd)"
break
fi
done
if [ -z "${SKILL_ROOT}" ]; then
printf '%s\n' "propose-folder-reorganization is not installed in .agents/skills or .claude/skills" >&2
exit 2
fi
node "${SKILL_ROOT}/scripts/propose_typescript.mjs" \
--parent "${PFR_PARENT}" \
--prefix "${PFR_PREFIX}" \
--cluster-judgment "${PFR_CLUSTER_JUDGMENT}" \
--project-root "$(pwd)" \
--language "${PFR_LANGUAGE}" \
--tsconfig "${PFR_TSCONFIG}" \
--proposal "reports/propose-folder-reorganization/${PFR_NAME}/proposal.md" \
--inspection "reports/propose-folder-reorganization/${PFR_NAME}/inspection.json"
<!-- installed-command:typescript-proposal:end -->
Read both final artifacts before planning the refactor. inspection.json is
the machine-checkable truth; proposal.md is the human handoff. For a ready
proposal, run npm run typecheck before the move, apply the exact move and
impact rows in a disposable branch, then run it again with the
characterization tests. A normal TypeScript type error is native verification
evidence, not something this read-only proposer repairs.
Argument parsing
Two forms.
Form A — finding-ID
/propose-folder-reorganization <scan-id>:<finding-index>
e.g. /propose-folder-reorganization scan-20260508-000715:18 reads
reports/find-folder-topology-drift/<scan-id>/findings.json,
selects the finding at index 18, and derives the cluster's parent
directory + prefix from it.
Form B — explicit target
/propose-folder-reorganization <parent-path>::<prefix>
e.g. /propose-folder-reorganization core/views::site_config. The
parent-path is the folder that contains the cluster; prefix is
the leading underscore-prefix token (without the trailing _).
Special prefix tests triggers the tests_by_prefix band — same
parent-path argument, prefix tests.
If the user passes a target that isn't a real directory or has
fewer than 3 sibling files matching the prefix, the orchestrator
stops, logs target_not_found or cluster_below_threshold to the
proposal, and returns.
Pipeline
Stage 0 — resolve target. Parse the argument. If finding-ID,
read findings.json from the named scan and pull file + the
prefix the finding's recommendation cites. If explicit target, take
parent-path + prefix as given. Compute the target slug:
<parent-path with / → -><__><prefix>, e.g.
core-views__site_config.
Stage 1 — inspect. Run the helper:
.venv/bin/python .claude/skills/propose-folder-reorganization/scripts/inspect.py \
--parent <parent-path> \
--prefix <prefix> \
--project-root . \
--output reports/propose-folder-reorganization/<target-slug>/inspection.json
The helper writes inspection.json with:
cluster_files— list of{path, line_count, public_symbols}for every file in the cluster (one record per file).import_impact— list of{importer, statement, lineno}for every import line in the project that resolves to a cluster member, with the after-rename target precomputed.matched_tests— list oftests_<prefix>_*.pyfiles at the same parent (or at the project root forcore/) that exercise cluster members.singletons_at_parent— count of sibling files at the parent that do NOT match the cluster prefix and are NOT in noise tokens. This is informational — the proposal cites it when judging whether the cluster collapse is the right move or whether the parent itself needs a higher-level reorg.defer_signals— list of any guardrail trips (cluster size <3, parent matches a known scratch-code path, prefix matches a framework convention likecore/management/commands/).
Stage 2 — synthesize. The orchestrator reads inspection.json
and writes proposal.md per the template below. This is judgment
work, not mechanical — Claude does it, not a script.
Stage 3 — stop or hand off. If defer_signals are non-empty,
the proposal records recommendation: defer_<reason> in the front
matter. Otherwise the proposal recommends recommendation: refactor
and names /refactor-subsystem --target <target-slug> as the next
step.
Proposal template
The proposal markdown has these sections, in order:
# Folder reorganization proposal — <parent-path>::<prefix>
> **Detected by:** `/find-folder-topology-drift` <finding-ref>
> **Decided in:** [ADR 0006](../../../ai-docs/decisions/0006-folder-organization.md)
> **Executed by:** `/refactor-subsystem` (decomposition mode, ADR 0002)
**Recommendation:** refactor | defer_<reason>
**Cluster size:** <N> files | <total LOC> lines
**Import impact:** <K> import lines across <M> files
**Matched tests:** <T> `tests_<prefix>_*.py` files
## Current tree
\`\`\`
<parent-path>/
├── <file 1> # <line count>
├── <file 2> # <line count>
├── ...
└── <noise siblings, if relevant for context>
\`\`\`
## Proposed tree
\`\`\`
<parent-path>/<prefix>/
├── __init__.py # re-exports for compatibility
├── <file 1 renamed> # <prefix>_X.py → X.py
├── <file 2 renamed>
├── ...
└── tests/
├── __init__.py
└── test_*.py # migrated from tests_<prefix>_*.py
\`\`\`
## File-move table
| Current path | New path | Public symbols |
|---|---|---|
| <path> | <new path> | `func_a`, `Class B`, `CONSTANT_C` |
(One row per cluster file. Public symbols come from `inspection.json`.
The `__init__.py` re-export list is the union of every row's
"Public symbols" column.)
## Import-impact summary
| Importer | Current statement | New statement |
|---|---|---|
| <importer-path>:<lineno> | `from <parent>.<old> import X` | `from <parent>.<prefix> import X` |
(One row per import line. If the cluster is consumed only via
`__init__.py` re-exports, this collapses to a single
`from <parent> import <prefix>` form and the table is short. If
callers reach into module internals, every line is listed.)
## Characterization-test matrix
| Existing test | Subject under test | Action |
|---|---|---|
| `tests_<prefix>_X.py` | `<parent>/<old>.py` | Migrate to `<parent>/<prefix>/tests/test_X.py` in the same PR |
| (no test) | `<parent>/<old>.py::func_a` | Pin behavior with a new test BEFORE the move |
(Every cluster file gets a row. Files with no existing test get a
pin-test recommendation; files with a matching `tests_<prefix>_*.py`
file get a migration-pair row. `/refactor-subsystem` enforces this
matrix in Phase 2.1.)
## Migration sequencing
1. **Pre-move** — write any pin-tests named in the matrix. They run
green against the current layout.
2. **Commit 1: behaviour-preserving move.** Create
`<parent>/<prefix>/`, `git mv` each cluster file, update its
public-symbol re-exports in `__init__.py`, run the
import-impact rename across the project. Tests run green.
3. **Commit 2: clean-up.** Remove the legacy shim file (if one
exists at `<parent>/<old-name>.py`), drop dead `__init__.py`
re-exports if no caller needs them. Tests run green.
4. **Tests pair** — `tests_<prefix>_X.py` moves to
`<parent>/<prefix>/tests/test_X.py` in commit 1, alongside its
subject. Unrelated `tests_*.py` files at root do NOT move.
## Stop condition
The cluster has collapsed into `<parent>/<prefix>/` and:
- Every cluster file is now under the new folder (or merged into a
sibling within it).
- Every importer in `import_impact` resolves through
`<parent>/<prefix>` (directly or via re-export).
- Every test in `matched_tests` lives under
`<parent>/<prefix>/tests/`.
- The full test suite is green; behaviour is unchanged.
If `defer_signals` is non-empty, the stop condition instead is:
- The deferral reason is recorded in this proposal.
- The cluster is NOT in the active backlog at
`reports/find-folder-topology-drift/latest`. (It will reappear on
the next scan unless the deferral is also recorded as an
exemption — see ADR 0006's "custom-job and scratch code"
guardrail.)
## Notes (orchestrator judgment)
A short prose section. Use it for:
- The "why this prefix is a coherent domain" sentence (or the
counter-argument: "prefix is coincidental").
- Any sub-cluster the orchestrator notices (e.g. `site_*` mixes
`site_config_*`, `site_ai_sidecar_*`, and `site_checklist`;
the proposal may recommend running this skill three times rather
than collapsing all nine into `site/`).
- Singletons in the cluster that should stay flat — name them and
why.
- Anything the file-move table can't carry on its own.
Defer signals
The helper sets defer_signals when any of these trip. The
orchestrator translates them to recommendation: defer_<reason>:
cluster_below_threshold— fewer than 3 cluster files (ADR 0006 Rule 2's threshold). Proposal recommendsdefer_below_threshold.scratch_code— the parent path matches a known scratch-code prefix (project memory:project_core_vs_scratch_code.md). Today this means anything undercore/management/commands/_experiments/or files known to be one-off jobs. Proposal recommendsdefer_scratch_code.framework_convention— the parent iscore/management/commands/and Django's runner discovers commands by file name. Re-grouping into subfolders is possible but breaks themanage.py <command_name>convention. Proposal recommendsdefer_framework_conventionand points at ADR 0006's open question on this.
Calibration
- Cluster threshold lives in
/find-folder-topology-drift(--min-cluster-size 3). This skill takes the threshold from the source finding; if the helper finds fewer than that on its own walk (e.g. someone deleted a file between scan and proposal), it setsdefer_signals: ["cluster_below_threshold"]and the proposal recommends deferral. - Import-graph scope is the entire project root by default. To
scope tighter (e.g. ignore tests when computing impact), pass
--excludeflags through to the helper. The default exclusions match/find-folder-topology-drift.
Re-runs are idempotent
The helper reads the filesystem only. Re-running with the same
target overwrites inspection.json and is safe. The proposal,
because it carries judgment, is NOT auto-overwritten — Claude
inspects the existing proposal first and only rewrites the
sections that changed.
Repository layout
.claude/skills/propose-folder-reorganization/
├── SKILL.md # this file — orchestrator
└── scripts/
├── inspect.py # Python cluster + import-impact data
├── propose_java.py # JDK gate + artifact-safe launcher
├── propose_java.java # JDK compiler/tree/type proposal
└── propose_typescript.mjs # TS/TSX resolved proposal (host Compiler API)
Next skills
Use /refactor-subsystem for an approved one-cluster move, /decide for an
unsettled convention, and /find-folder-topology-drift to verify it afterward.
What ships with it: 17 files
284.5 KB alongside SKILL.md, 12 of them executable
knowledge/
- go-v1.md4.0 KB
- java-v1.md2.9 KB
- rust-v1.md823 B
scripts/
- inspect.pyruns19.2 KB
- propose_cpp.pyruns36.8 KB
- propose_c.pyruns30.5 KB
- propose_csharp.pyruns995 B
- propose_dart.pyruns30.9 KB
- propose_go.go40.7 KB
- propose_java.java50.2 KB
- propose_java.pyruns8.6 KB
- propose_kotlin.pyruns1011 B
- propose_php.pyruns6.1 KB
- propose_ruby.pyruns5.6 KB
- propose_rust.pyruns13.3 KB
- propose_swift.pyruns1010 B
- propose_typescript.mjsruns32.0 KB