AWS Harness
hoodini/ai-agents-skills
Build a new AI agent on AWS and deploy it easily, OR wrap and deploy an agent you already have, using the Amazon Bedrock AgentCore harness.
A skill your agent uses when adding a new infrastructure component (worker, scheduler, database, redis, ingress, observability) to the Aegis Stack framework itself, or adding a new variant axis…
$ npx skills add lbedner/aegis-stack --skill add-component -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install lbedner/aegis-stack add-component --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/lbedner/aegis-stack.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/add-component .claude/skills/add-component && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "add-component" agent skill from https://github.com/lbedner/aegis-stack/tree/main/.claude/skills/add-component into .claude/skills/add-component/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-component", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/lbedner/aegis-stack/tree/main/.claude/skills/add-componentType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add lbedner/aegis-stack --skill add-component -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install lbedner/aegis-stack add-component --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/lbedner/aegis-stack.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/add-component .agents/skills/add-component && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "add-component" agent skill from https://github.com/lbedner/aegis-stack/tree/main/.claude/skills/add-component into .agents/skills/add-component/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-component", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add lbedner/aegis-stack --skill add-component -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install lbedner/aegis-stack add-component --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/lbedner/aegis-stack.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/add-component .cursor/skills/add-component && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "add-component" agent skill from https://github.com/lbedner/aegis-stack/tree/main/.claude/skills/add-component into .cursor/skills/add-component/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-component", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/lbedner/aegis-stack.git --path .claude/skills/add-component--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add lbedner/aegis-stack --skill add-component -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install lbedner/aegis-stack add-component --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/lbedner/aegis-stack.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/add-component .gemini/skills/add-component && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "add-component" agent skill from https://github.com/lbedner/aegis-stack/tree/main/.claude/skills/add-component into .gemini/skills/add-component/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-component", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install lbedner/aegis-stack add-componentInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add lbedner/aegis-stack --skill add-component -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/lbedner/aegis-stack.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/add-component .github/skills/add-component && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "add-component" agent skill from https://github.com/lbedner/aegis-stack/tree/main/.claude/skills/add-component into .github/skills/add-component/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-component", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add lbedner/aegis-stack --skill add-component -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install lbedner/aegis-stack add-component --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/lbedner/aegis-stack.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/add-component .opencode/skills/add-component && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "add-component" agent skill from https://github.com/lbedner/aegis-stack/tree/main/.claude/skills/add-component into .opencode/skills/add-component/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-component", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
add-componentA skill your agent uses when adding a new infrastructure component (worker, scheduler, database, redis, ingress, observability) to the Aegis Stack framework itself, or adding a new variant axis…
Add Component is an agent skill from lbedner/aegis-stack. Use when adding a new infrastructure component (worker, scheduler, database, redis, ingress, observability) to the Aegis Stack framework itself, or adding a new variant axis (like workerbackend or databaseengine) to an existing component. Covers the plugin-spec registry, dependency resolution, copier questions, generation/update plumbing, template, test, docs, and i18n files that must change together.
Its SKILL.md is about 5.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in DevOps & Cloud, covering Cloud networking, Project scaffolding and Internationalization. It works with Redis, Docker and FastAPI. The repository describes itself as: A production-ready FastAPI platform with modular components and a built-in control plane. The licence is MIT.
12 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit fb708b7. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
makeFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Add Component loads about 5.3k tokens when it runs. Until then it costs about 105 tokens; SKILL.md has 2,413 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from lbedner/aegis-stack at commit fb708b7, republished under its MIT licence (© lbedner). 2,413 words, ~5,344 tokens.
.claude/skills/add-component/SKILL.md (or your agent's skills folder).Adds a new infrastructure component (background worker, scheduler, database,
redis, ingress, observability) to the framework so generated projects can
select it via aegis init or add it later via aegis add, OR adds a new
variant axis to an existing component (a second/third backend choice like
worker_backend on worker or database_engine on database). Traced from
worker (with its worker_backend axis: arq/dramatiq/taskiq) and database
(with its database_engine axis: sqlite/postgres).
Use for either:
include_<name> copier question, addable/removable via
aegis add / aegis remove.<component>_<axis>) that changes which files render for that component,
following the worker_backend / database_engine pattern.Do NOT use for adding a service (business logic: auth, AI, blog,
finance, payment, comms, insights) - services live in
aegis/core/services.py and share the same PluginSpec shape but a
different file footprint and CLI surface (aegis add-service, not
aegis add); use the add-service skill instead. Do NOT use for changing
behavior inside an existing component with no new question or file gating;
that is ordinary feature work.
Registry (ComponentSpec is a thin alias of PluginSpec pinned to
kind=COMPONENT; see aegis/core/plugins/spec.py):
aegis/core/components.py: add a ComponentSpec entry to the COMPONENTS
dict. Set type (ComponentType.INFRASTRUCTURE; ComponentType.CORE is
reserved for backend/frontend in CORE_COMPONENTS - core components are
never prompted, never removable, and skipped by cleanup entirely),
description/long_description, required_components (hard deps, e.g.
worker requires ["redis"]), recommended_components, pyproject_deps,
docker_services (compose service names this component owns, used by
stack-generation tests), template_files (display list), marker_path
(the path used to detect the component on disk - for reconcile_answers_from_disk
and dev-mode cleanup context), docs_path (see docs section below), and
migrations=[...] only if the component owns tables (see SCHEDULER_MIGRATION
in aegis/core/migration_generator.py: the spec names the revision and its
Postgres schema, nothing more - what the revision creates comes from the
component's SQLModel classes, for every non-memory backend).aegis/core/components.py: files=FileManifest(primary=[...], extras={...})primary is the always-on add/init base;
aegis/core/post_gen_tasks.py's get_component_file_mapping() derives
from every spec's manifest via compute_file_mapping() (aegis/core/file_manifest.py),
so there is no separate hand-maintained mapping to edit. Use extras for
file groups that only render real content for a specific variant value
(e.g. scheduler's "scheduler_persistence" group, gated on
scheduler_backend != "memory") - keeping them out of primary stops
aegis add from writing 0-byte stubs when the parent variant doesn't need
them; aegis remove still deletes them via get_component_files(..., full=True).aegis/constants.py: ComponentNames - add <NAME> = "<name>" and append
it to INFRASTRUCTURE_ORDER (controls interactive prompt ordering).
AnswerKeys - add <NAME> = "include_<name>". For a new variant axis, add
the axis key (e.g. <COMPONENT>_<AXIS> = "<component>_<axis>") and, if the
axis has a fixed enum of values, a dedicated <Axis>Backends/<Axis>Type
class near WorkerBackends / StorageBackends with an ALL list.aegis/core/dependency_resolver.py: no edits needed for a plain component -
it reads ComponentSpec.requires/.recommends/.conflicts generically via
COMPONENTS. Only add logic here if the new component needs a resolution
rule beyond simple hard-dependency (worker -> redis is handled by
required_components alone, no custom code).copier.yml (repo root, not under templates/): add the include_<name>
bool question. For a variant axis, add <component>_<axis> with
choices: and when: "{{ include_<component> }}" - UNLESS the value must
survive even when the component is off (compare database_engine, which
has no when clause because templates gate on it regardless of
include_database, e.g. a persistent scheduler needs to know the engine
before database is even selected).aegis/templates/copier-aegis-project/{{ project_slug }}/.copier-answers.yml.jinja:
add include_<name>: {{ include_<name> }}. For an axis gated by when,
adding the line here is NOT required for correctness - Copier omits
when-gated fields from the rendered answers file (observed for
worker_backend, scheduler_backend, include_oauth; none of them
appear in this file today), and copier_manager.py's post-generation
patch (below) backfills every copier_data key Copier dropped. Add the
line anyway for axes that are NOT when-gated (like database_engine,
which IS listed here) since those are the ones templates read
unconditionally.Generation and update plumbing (thread the new AnswerKeys.<NAME> /
AnswerKeys.<COMPONENT>_<AXIS> answer key through every one of these; a
component that skips them generates fine at aegis init but breaks
aegis add/aegis remove/aegis update on an existing project):
aegis/core/template_generator.py (TemplateGenerator.__init__ and
get_template_context()): extract the axis value from bracket syntax
(worker[dramatiq]) the same way self.worker_backend is derived from
extract_engine_info(component), default it (WorkerBackends.ARQ), and
add it to the returned context dict. Also branch in the pyproject-deps
loop (base_name == ComponentNames.WORKER block) if different variant
values pull different pip packages.aegis/core/copier_manager.py (generate_with_copier): add
AnswerKeys.<NAME>: template_context[AnswerKeys.<NAME>] == "yes" (or
.get(..., default) for optional flags) to the copier_data dict passed
to run_copy. This is also where the backfill described above lives -
every non-underscore copier_data key gets written into
.copier-answers.yml after generation if Copier dropped it, so this dict
is the actual source of truth for what ends up in the answers file, not
the .copier-answers.yml.jinja list.aegis/core/manual_updater.py (ManualUpdater): get_copier_defaults()
(from aegis/core/component_files.py) merges copier.yml defaults under
the persisted answers at construction time, so a variant axis with a
default: in copier.yml needs no extra wiring here for the default
case. But add_component/remove_component must reference
AnswerKeys.<COMPONENT>_<AXIS> explicitly anywhere the render context
needs it - as of this trace, manual_updater.py has zero references
to worker_backend, which is why aegis add worker[dramatiq] on an
existing project silently ignores the bracket and always adds arq (the
default). Don't repeat this gap for a new axis: thread it through
add_component's context building, mirroring how aegis/commands/add.py
threads AnswerKeys.DATABASE_ENGINE/AnswerKeys.SCHEDULER_BACKEND into
component_data before calling updater.add_component(component, component_data).aegis/commands/add.py (add_command): parse the variant out of bracket
syntax via extract_engine_info(comp) for the new component (mirrors the
scheduler-backend block), validate it against the axis's ALL list, and
populate update_data[AnswerKeys.<COMPONENT>_<AXIS>] / the per-component
component_data dict passed to updater.add_component(...).aegis/commands/update.py: no per-component AnswerKeys threading exists
here today (verify this still holds before skipping it) - aegis update
runs the full Copier update flow and re-derives context from the project's
own (reconciled) answers file, not from a hand-maintained key list.aegis/cli/guided.py / aegis/cli/interactive.py: add a
choose_<component>_backend(self) -> str method (on the guided-setup UI
class) following choose_worker_backend() / choose_database_engine() -
a list of _Choice(value, label, description) tuples fed to self._select(...)
with an i18n-backed prompt string (_g("prompt.<component>_backend", "..."))
and per-choice description keys (choice.<component>.<value>).Template side (aegis/templates/copier-aegis-project/{{ project_slug }}/):
app/components/<name>/: the component's own package.docker-compose.yml.jinja / .dev / .prod: gate services behind
{%- if include_<name> %} (full-body wrap, never a Jinja expression
inside a YAML value Copier can't parse standalone). These compose
templates carry no inline comments - which components a given
project selects varies per stack, so a comment written for one
combination misleads for another; state conditions through the Jinja
gate itself, not prose beside it.Makefile.jinja: gate any new make targets the component needs
(compare how worker/scheduler targets are conditioned).app/components/backend/startup/component_health.py.jinja: register the
health check behind {%- if include_<name> %}, following the existing
include_worker / include_database blocks. For a variant axis, nest a
second {%- if <component>_<axis> == "value" %} inside.pyproject.toml.jinja: gate the component's pyproject_deps behind
{%- if include_<name> %}. For a variant axis with per-value deps (arq
vs dramatiq vs taskiq each pull different packages), branch on the axis
value inside that same gate.docs/components/<name>/index.md (+ configuration.md, examples.md,
extras/<topic>.md as applicable - this is the multi-page convention
worker and scheduler use; a single docs/components/<name>.md file
also satisfies the docs_path test, matching database/scheduler's
top-level file). Wire the new pages into the root mkdocs.yml nav under
the Components: block.tests/components/test_<name>.py,
and API/frontend tests if the component ships routes or dashboard
cards/modals (app/components/frontend/dashboard/cards/<name>_card.py,
modals/<name>_modal.py, exported from the matching __init__.py.jinja
files, same wiring shape as the service card/modal pattern in add-service).Cross-cutting:
FileManifest claims; aegis add/remove finds it
by rendering the tree at the old and new answers and diffing. Put
{% if include_<name> %} conditionals in docker-compose.yml,
pyproject.toml, Makefile, component_health.py, app/core/config.py,
.env.example — or in a brand-new shared file — and it is handled
automatically. There is no list to add it to.FileManifest instead (see "Files this component owns" above). That is
the only file declaration there is.tests/core/test_shared_scope_completeness.py fails, naming the file,
if a stack-dependent file somehow ends up handled by nothing.docs/components/<name>/index.md (or <name>.md) is pinned by
tests/core/test_spec_docs_paths.py once docs_path is set on the specdocs/<docs_path>.md or docs/<docs_path>/index.md.
Leave docs_path="" until the page exists.i18n:
aegis/i18n/locales/en.py: add "component.<name>" (short description,
shown by aegis add --help component listings and the guided setup) and
"component.<name>.long" (long-form description) with real English
strings. For a variant axis, also add "prompt.<component>_<axis>" and
one "choice.<component>.<value>" key per choice (see
choice.worker.arq / choice.worker.dramatiq / choice.worker.taskiq).aegis/i18n/locales/{de,es,fr,ja,ko,ru,zh,zh_hant}.py: add the SAME keys
to every other locale, using the English string as a placeholder. This is
required for parity: tests/core/test_i18n.py asserts every locale
carries the same keys as English (one test_<locale>_has_all_keys per
locale) and fails naming the missing key otherwise. Real translation is a
separate translator-reviewed pass; do not attempt it here, but the keys
must exist now.Tests (this repo's own CLI/core test suite):
tests/cli/test_stack_generation.py: add a StackCombination entry to
STACK_COMBINATIONS (mirrors the worker/scheduler/full entries) with
expected_files, expected_docker_services, and expected_pyproject_deps.tests/cli/conftest.py: add a <name>_with_<variant> entry to
NAMED_PROJECT_SPECS for each new variant value (see
base_with_worker_taskiq / base_with_worker_dramatiq) so downstream
tests copy a cached project instead of regenerating one.tests/cli/test_add_command.py: add coverage for aegis add <name> (and,
if applicable, aegis add <name>[<variant>]) following the existing
test_add_scheduler_with_backend_flag_sqlite / test_add_worker_auto_adds_redis
style. There is no dedicated "importable regen guard" test for components
analogous to add-service's SERVICE_INVOCATIONS - add explicit add-path
assertions here instead so a missing FileManifest entry surfaces as a
test failure rather than a stub file in the wild.tests/core/test_spec_docs_paths.py and tests/core/test_i18n.py need no
edits - they parametrize over COMPONENTS/SERVICES and the locale
catalogs automatically; they just need to pass.StackCombination to
tests/cli/test_stack_generation.py::STACK_COMBINATIONS asserting the
new component's expected files/docker services/deps. Confirm it fails
for the right reason (component doesn't exist yet).ComponentNames.<NAME> (+ INFRASTRUCTURE_ORDER entry) and
AnswerKeys.<NAME> in aegis/constants.py. For a variant axis, add the
axis key and its <Axis>Backends-style enum class.ComponentSpec entry in aegis/core/components.py: identity
fields, required_components, pyproject_deps, docker_services,
marker_path, files=FileManifest(primary=[...], extras={...}), and
migrations=[...] if it owns tables.include_<name> question to copier.yml (and the axis question
with choices/when if applicable). Add the corresponding line to
.copier-answers.yml.jinja for any NOT-when-gated field; when-gated
fields are backfilled automatically (see Files that change).template_generator.py, copier_manager.py, manual_updater.py,
aegis/commands/add.py (bracket parsing + component_data), and the
guided/interactive prompt classes (guided.py/interactive.py).app/components/<name>/, docker-compose
gating (no inline comments), Makefile.jinja targets, pyproject.toml.jinja
deps, and the health check registration in component_health.py.jinja.__init__.py.jinja exports (mirror the service pattern in add-service).component.<name>, component.<name>.long, plus
prompt.<component>_<axis> / choice.<component>.<value> for a variant
axis) to en.py, then stub the same keys into every other locale for
parity; tests/core/test_i18n.py fails otherwise.tests/cli/test_stack_generation.py combination (from step 1,
now passing), the tests/cli/conftest.py cache entries per variant, and
tests/cli/test_add_command.py add-path coverage.aegis/templates/ before finishing - templates are the source of truth.docs/components/<name>/ (or
<name>.md), wire it into the root mkdocs.yml nav, and set
docs_path on the spec.make check (lint, typecheck, test) must pass.make test-stacks-quick while iterating (fast feedback: runs the stack
validation phase against a representative subset - base, everything,
insights).make test-stacks-full before calling the work done (runs the
generation-only test-stacks pass, the slow test-stacks-build
validation pass, and the kitchen-sink everything stack).aegis init --dev (working tree) or commit first; testing a template
edit with plain aegis init on an uncommitted change silently uses stale
content.{% if %}...{% endif %} wrap inside the file instead of
naming the file conditionally.copier is pinned below 9.15 in pyproject.toml (9.15+ relocates
.copier-answers.yml, breaking aegis update); a dependabot ignore rule
guards the pin - do not "fix"/bump it even if a bot PR proposes it..copier-answers.yml.jinja looks incomplete on purpose: fields gated by a
copier.yml when: clause (like worker_backend, scheduler_backend,
include_oauth) are omitted from it, because Copier itself drops
conditional answers on render. Don't "fix" this by adding them - the
actual persistence path is copier_manager.py's post-generation backfill,
which patches any copier_data key Copier dropped directly into the
written .copier-answers.yml.FileManifest.primary on the spec is the single source
get_component_file_mapping() derives from. A file present in the
template but missing from primary renders correctly on fresh init
(Copier just includes it) but is silently skipped by aegis add/aegis remove on an existing project - there is no equivalent to add-service's
SERVICE_INVOCATIONS regen-gap guard for components today, so cover this
with explicit tests/cli/test_add_command.py assertions instead.post_gen_tasks.cleanup_components
(_rename_backend_files / _remove_backend_files) is the concrete model
for a variant axis that ships parallel source files
(registry_dramatiq.py, registry_taskiq.py, canonical registry.py):
at generation time it renames the chosen backend's *_<backend>.py files
to their canonical names and deletes the other backends' files. Skipping
this for a new axis leaves all variants' files on disk simultaneously,
each importing modules that shadow each other.*_dramatiq.py) from update (only canonical
files remain from a prior run) by checking whether any *_<backend>.py
files exist before renaming. Running the arq-cleanup unconditionally on
update would delete the canonical files a previous run already renamed
into place, which is the exact bug the init-vs-update branch exists to
prevent; a new variant axis must preserve it.aegis/commands/manual_updater.py's add_component has no knowledge
of worker_backend today: aegis add worker[dramatiq] on an existing
project always installs the arq default, silently discarding the bracket
value. Don't assume bracket syntax "just works" for a new axis on the add
path - verify (and if needed, add) the threading in add.py and
manual_updater.py explicitly; it is not inherited for free from the
aegis init path.docs_path on the spec is pinned by tests/core/test_spec_docs_paths.py
to a real file under this repo's root /docs (either docs/<path>.md or
docs/<path>/index.md) - setting it before the docs page exists fails
that test.aegis/i18n/locales/en.py and the same
keys with English-placeholder values in every other locale in the same
change (required for tests/core/test_i18n.py parity); real translation is
left to a separate translator-reviewed pass.scheduler_backend != "memory" gating in
get_services_needing_migrations and the needs_migrations set in
post_gen_tasks.cleanup_components; forgetting either leaves alembic/
either missing when needed or present with no matching migration.© lbedner, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/add-component of lbedner/aegis-stack.
Open the folder on GitHubat commit fb708b7
Add Component next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Add Component this skilllbedner/aegis-stack | 143 | — | ~5.3k | Automated safety check: Pass | MIT | |
| AWS Harnesshoodini/ai-agents-skills | 281 | — | ~4.2k | Automated safety check: Notes | None | |
| Kubeshark KFL2 Filter Referencekubeshark/kubeshark | 12k | — | ~3.6k | Automated safety check: Pass | Apache-2.0 | |
| Frappe Ops DeploymentImpertio-Studio/Frappe_Claude_Skill_Package | 187 | — | ~2.4k | Automated safety check: Notes | MIT | |
| Redis Observabilityredis/agent-skills | 165 | 2 repos | ~911 | Automated safety check: Pass | MIT | |
| Kratos Developmentaide-family/moon | 253 | — | ~1.5k | Automated safety check: Pass | None |
hoodini/ai-agents-skills
Build a new AI agent on AWS and deploy it easily, OR wrap and deploy an agent you already have, using the Amazon Bedrock AgentCore harness.
kubeshark/kubeshark
Syntax reference for KFL2, the CEL-based display filter language used to search Kubernetes network traffic captured by Kubeshark, loaded before any filter is written.
Impertio-Studio/Frappe_Claude_Skill_Package
A skill your agent uses when deploying Frappe/ERPNext to production, configuring Nginx or Supervisor, setting up Docker, enabling SSL, or hardening security.
redis/agent-skills
Redis observability guidance — which metrics to monitor (memory, connections, hit ratio, ops/sec, rejected connections), which built-in commands to reach for during incident triage (SLOWLOG, INFO…
aide-family/moon
Develops Go microservices with Kratos v2 following official design philosophy, DDD/Clean Architecture layout, Protobuf API, error/config/middleware patterns, and observability.
vogler75/monster-mq
Guide for configuring, deploying, and operating the MonsterMQ broker.
lbedner/aegis-stack
A skill your agent uses when cutting a release of the aegis-stack package.
lbedner/aegis-stack
A skill your agent uses when developing or modifying Copier templates in aegis/templates, or backporting a change from a generated project (e.g.
lbedner/aegis-stack
A skill your agent uses when adding a command to the aegis tool CLI (the framework's own aegis ...
lbedner/aegis-stack
A skill your agent uses when building an Aegis Stack plugin, a separate package (aegis-stack-<name) that renders files into a project through aegis add <name.
lbedner/aegis-stack
A skill your agent uses when handed a GitHub issue (number or URL) to execute end to end.
lbedner/aegis-stack
A skill your agent uses when a code or template change introduces a new translation message key, in either the framework CLI (aegis/i18n/locales/) or a generated project's CLI (the app/i18n/locales/…
Categories
A skill your agent uses when adding a new infrastructure component (worker, scheduler, database, redis, ingress, observability) to the Aegis Stack framework itself, or adding a new variant axis…. Add Component is an agent skill from lbedner/aegis-stack. Use when adding a new infrastructure component (worker, scheduler, database, redis, ingress, observability) to the Aegis Stack framework itself, or adding a new variant axis (like workerbackend or databaseengine) to an existing component.
Add Component fits situations like: adding a new infrastructure component (worker; observability) to the Aegis Stack framework itself; adding a new variant axis (like workerbackend; databaseengine) to an existing component.
Run `npx skills add lbedner/aegis-stack --skill add-component -a claude-code`. Or copy the skill folder (.claude/skills/add-component in lbedner/aegis-stack) into .claude/skills/add-component in your project. Claude Code loads it when a task matches its description.
Run `npx skills add lbedner/aegis-stack --skill add-component -a codex`. Or copy the skill folder (.claude/skills/add-component in lbedner/aegis-stack) into .agents/skills/add-component in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add lbedner/aegis-stack --skill add-component -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/add-component, .gemini/skills/add-component, .github/skills/add-component and .opencode/skills/add-component in your project.
Going by SKILL.md and its folder, Add Component needs the command-line tools its instructions call (make). Our summary lists: Docker.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Add Component is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.3k tokens (SKILL.md is roughly 21k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Add Component: AWS Harness (hoodini/ai-agents-skills, 281 stars), Kubeshark KFL2 Filter Reference (kubeshark/kubeshark, 12k stars), Frappe Ops Deployment (Impertio-Studio/Frappe_Claude_Skill_Package, 187 stars) and Redis Observability (redis/agent-skills, 165 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
lbedner (a GitHub user) maintains it in lbedner/aegis-stack, which has 143 GitHub stars. The repository holds 9 skills in this directory. The repository was last updated on October 8, 2026.
Source: lbedner/aegis-stack on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.