Skip to content
Back to skills

Component Like Existing

ASecurity

Bootstrap a new component from an existing one, preserving its provided interfaces and receptacles under a different component name.

  • 2 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 9, 2026
developmentgogit

Security analysis

A100/100

Scanned September 9, 2026

npx -y skills add AI-native-Systems-Research/ai-native-storage-certus --skill component-like-existing --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Component Like Existing?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Component Like Existing
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/ai-native-systems-research-component-like-existing/badge)](https://www.skillsdirectory.com/skills/ai-native-systems-research-component-like-existing)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: component-like-existing
description: Bootstrap a new component from an existing one, preserving its provided interfaces and receptacles under a different component name.
argument-hint: "[existing-component-name, new-component-name]"
---

Bootstrapping a new component named $1 from the existing component named $0 involves the
following steps. The intent is to clone the *contract* of $0 — the interfaces it provides
and the receptacles it consumes — while giving it a new component name and its own crate.
Provided interfaces and receptacles are **preserved as-is**: they reference the existing
shared interface definitions in `components/interfaces`. Do **not** create new `I...`
interface files for the clone.

Only the *contract and scaffolding* are carried over — the component declaration, its
`provides:`/`receptacles:`, and the interface `impl` blocks. The method bodies are left
**empty** (`todo!()` stubs); the source's private implementation (helper modules, data
structures, behavioral tests) is **not** copied. The clone also starts a **fresh** spec-kit
session that inherits only the source's constitution.

1. The source component is $0 and the new component is $1. Locate the source component's
   sub-directory under `components/` (the lower-case, hyphen-ized form of $0, or the
   directory whose `define_component!` block declares $0). If it does not exist, return an
   error and stop.

2. If $1 was not supplied, interactively ask the user for the new component name and stop
   until provided. If a directory for $1 (lower-case, hyphen-ized) already exists under
   `components/`, return an error and stop.

3. Read the source component's `define_component!` block and record its `provides:`
   interface list and its `receptacles:` block verbatim. These are preserved unchanged in
   the clone.

4. Create a new sub-directory under `components/` whose name is the lower-case,
   hyphen-ized form of $1.

5. Copy the source component's implementation into the new directory — `src/` and
   `Cargo.toml`. Do **not** copy generated or spec directories: `target/`, `specs/`,
   `.specify/`, `info/`, or the source's `.claude/` directory.

6. Reduce the copied source to a compiling skeleton and rename it:
   - Rename the component type from the $0 name to the $1 name throughout (e.g.
     `FooBarComponent` → `BazComponent`), and update crate-name references, `//!` module
     docs, and doc-comment examples to match.
   - Keep the `define_component!` (and any `define_interface!`) declarations with their
     `provides:` and `receptacles:` entries exactly as recorded in step 3 — the clone
     provides the same interfaces and consumes the same receptacles as $0.
   - Replace the body of **every** method that implements a provided interface with a
     `todo!("$1: <method>")` stub, so the clone compiles but carries none of the source's
     logic.
   - Delete private helper modules, types, and fields that existed only to support the
     source's implementation, keeping `fields:` minimal but sufficient to construct the
     component. Remove any now-unused `use` imports.
   - Replace the source's behavioral tests with a minimal smoke test that constructs the
     component and queries each provided interface via `query_interface!`.

7. In the new `Cargo.toml`, set `[package] name` to the lower-case, hyphen-ized form of $1.
   Preserve all `[dependencies]` from the source (they reflect the interfaces and
   receptacles being kept).

8. Register the new crate in the workspace root `Cargo.toml`:
   - Add the new component path to `members`.
   - If the source component is listed in `default-members`, add the new one there too.
   - Add a `[workspace.dependencies]` entry: `<crate-name> = { path = "components/<dir>" }`,
     mirroring any options (e.g. `default-features = false`) used by the source's entry.

9. Add a permissions file `.claude/settings.json` in the new sub-directory that allows
   access to the component itself, `lib/component-framework`, `components/interfaces`,
   and the directories of any components corresponding to its receptacles. Avoid granting
   access to components that are not directly used. Model it on the source component's
   `.claude/settings.json` if present.

10. Copy into the new component directory's `.claude/skills` only the skills whose names
    match an `include` pattern in `.claude/component-local-skills.json` (patterns support a
    trailing `*` wildcard; other entries match exactly). This allowlist is the single source
    of truth for which skills are component-local — do not hard-code the list here. Skip any
    skill that does not match.

11. Run `specify init . --ai claude` in the new component source directory. This is a
    **fresh** spec-kit session — do not copy the source's specs, plans, tasks, or
    `.specify/sync` artifacts.

12. Copy **only** the source component's constitution into the new component, overwriting
    the freshly-initialized default: copy `.specify/memory/constitution.md` from the source
    to the same path under the new component. Leave all other spec-kit state fresh.

13. Run `specify extension add spec-kit-sync --from https://github.com/bgervin/spec-kit-sync/archive/refs/heads/master.zip`
    in the new component directory.

14. Verify the clone builds with `cargo build -p <new-crate-name>`. Report any errors.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.