agentic-loadout 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- agentic_loadout-0.1.0/.gitattributes +2 -0
- agentic_loadout-0.1.0/.github/workflows/ci.yml +40 -0
- agentic_loadout-0.1.0/.github/workflows/release.yml +40 -0
- agentic_loadout-0.1.0/.gitignore +5 -0
- agentic_loadout-0.1.0/CHANGELOG.md +16 -0
- agentic_loadout-0.1.0/LICENSE +21 -0
- agentic_loadout-0.1.0/PKG-INFO +143 -0
- agentic_loadout-0.1.0/PLAN.md +371 -0
- agentic_loadout-0.1.0/README.md +121 -0
- agentic_loadout-0.1.0/pyproject.toml +41 -0
- agentic_loadout-0.1.0/scripts/release_notes.py +33 -0
- agentic_loadout-0.1.0/src/agentic_loadout/__init__.py +1 -0
- agentic_loadout-0.1.0/src/agentic_loadout/agents.py +76 -0
- agentic_loadout-0.1.0/src/agentic_loadout/assets/agents/architect.md +63 -0
- agentic_loadout-0.1.0/src/agentic_loadout/assets/agents/code-grader.head.md +7 -0
- agentic_loadout-0.1.0/src/agentic_loadout/assets/agents/coder.md +44 -0
- agentic_loadout-0.1.0/src/agentic_loadout/assets/agents/utility.md +31 -0
- agentic_loadout-0.1.0/src/agentic_loadout/assets/development-workflow.md +99 -0
- agentic_loadout-0.1.0/src/agentic_loadout/assets/templates/agents-rules.md +7 -0
- agentic_loadout-0.1.0/src/agentic_loadout/assets/templates/coders/python.md +13 -0
- agentic_loadout-0.1.0/src/agentic_loadout/assets/templates/coders/swift.md +16 -0
- agentic_loadout-0.1.0/src/agentic_loadout/assets/templates/coders/typescript.md +17 -0
- agentic_loadout-0.1.0/src/agentic_loadout/assets/templates/memory-rules.md +18 -0
- agentic_loadout-0.1.0/src/agentic_loadout/assets/templates/sdd-rules.md +18 -0
- agentic_loadout-0.1.0/src/agentic_loadout/assets/templates/worktree-rules.md +13 -0
- agentic_loadout-0.1.0/src/agentic_loadout/brew.py +98 -0
- agentic_loadout-0.1.0/src/agentic_loadout/cli.py +84 -0
- agentic_loadout-0.1.0/src/agentic_loadout/coders.py +241 -0
- agentic_loadout-0.1.0/src/agentic_loadout/detect.py +47 -0
- agentic_loadout-0.1.0/src/agentic_loadout/files.py +109 -0
- agentic_loadout-0.1.0/src/agentic_loadout/git_state.py +114 -0
- agentic_loadout-0.1.0/src/agentic_loadout/install.py +181 -0
- agentic_loadout-0.1.0/src/agentic_loadout/instructions.py +115 -0
- agentic_loadout-0.1.0/src/agentic_loadout/mcp_config.py +64 -0
- agentic_loadout-0.1.0/src/agentic_loadout/options.py +38 -0
- agentic_loadout-0.1.0/src/agentic_loadout/pins.py +15 -0
- agentic_loadout-0.1.0/src/agentic_loadout/preflight.py +23 -0
- agentic_loadout-0.1.0/src/agentic_loadout/runners.py +51 -0
- agentic_loadout-0.1.0/src/agentic_loadout/ui.py +45 -0
- agentic_loadout-0.1.0/src/agentic_loadout/vendors.py +154 -0
- agentic_loadout-0.1.0/tests/__init__.py +0 -0
- agentic_loadout-0.1.0/tests/conftest.py +73 -0
- agentic_loadout-0.1.0/tests/test_detect_and_brew.py +88 -0
- agentic_loadout-0.1.0/tests/test_install.py +230 -0
- agentic_loadout-0.1.0/tests/test_instructions.py +81 -0
- agentic_loadout-0.1.0/tests/test_mcp_config.py +54 -0
- agentic_loadout-0.1.0/uv.lock +138 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
branches: [main]
|
|
5
|
+
pull_request:
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
test:
|
|
12
|
+
name: tests (${{ matrix.os }}, py${{ matrix.python }})
|
|
13
|
+
runs-on: ${{ matrix.os }}
|
|
14
|
+
strategy:
|
|
15
|
+
fail-fast: false
|
|
16
|
+
matrix:
|
|
17
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
18
|
+
python: ["3.11", "3.13"] # the lowest supported and the newest
|
|
19
|
+
env:
|
|
20
|
+
UV_PYTHON: ${{ matrix.python }}
|
|
21
|
+
steps:
|
|
22
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
23
|
+
- uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
24
|
+
# Add `uv run ruff check .` / `uv run mypy src tests` steps (here and in release.yml) if the project uses them.
|
|
25
|
+
- run: uv run pytest -q
|
|
26
|
+
|
|
27
|
+
install-smoke:
|
|
28
|
+
name: clean install of the built wheel
|
|
29
|
+
runs-on: ubuntu-latest
|
|
30
|
+
steps:
|
|
31
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
32
|
+
- uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
33
|
+
- run: uv build
|
|
34
|
+
- name: Install the wheel into an empty venv and run the CLI away from the checkout
|
|
35
|
+
run: |
|
|
36
|
+
uv venv --python 3.12 "$RUNNER_TEMP/venv"
|
|
37
|
+
uv pip install --python "$RUNNER_TEMP/venv/bin/python" dist/*.whl
|
|
38
|
+
cd "$RUNNER_TEMP"
|
|
39
|
+
"$RUNNER_TEMP/venv/bin/agentic-loadout" --help
|
|
40
|
+
"$RUNNER_TEMP/venv/bin/python" -c "import importlib.resources as r; assert r.files('agentic_loadout').joinpath('assets/agents/coder.md').is_file()"
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
# Manual on purpose: run it (Actions -> Release -> Run workflow, with the tag, e.g. v1.0.0) after CI is
|
|
3
|
+
# green on main, the tag is pushed, the PyPI trusted publisher exists for this repo and the GitHub
|
|
4
|
+
# environment "pypi" is set up.
|
|
5
|
+
on:
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
inputs:
|
|
8
|
+
tag:
|
|
9
|
+
description: Release tag to publish, e.g. v1.0.0
|
|
10
|
+
required: true
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
publish:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
environment: pypi
|
|
16
|
+
permissions:
|
|
17
|
+
id-token: write
|
|
18
|
+
contents: write # to create the GitHub release
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
21
|
+
with:
|
|
22
|
+
ref: ${{ inputs.tag }}
|
|
23
|
+
- uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
24
|
+
- name: The tag must match the package version
|
|
25
|
+
env:
|
|
26
|
+
TAG: ${{ inputs.tag }}
|
|
27
|
+
run: |
|
|
28
|
+
v=$(python3 -c "import tomllib;print(tomllib.load(open('pyproject.toml','rb'))['project']['version'])")
|
|
29
|
+
test "v$v" = "$TAG" || { echo "tag $TAG != version $v"; exit 1; }
|
|
30
|
+
- run: uv run pytest -q
|
|
31
|
+
- run: uv build
|
|
32
|
+
- run: uvx twine check --strict dist/*
|
|
33
|
+
- uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # release/v1
|
|
34
|
+
- name: Create the GitHub release with the CHANGELOG notes and the built files
|
|
35
|
+
env:
|
|
36
|
+
GH_TOKEN: ${{ github.token }}
|
|
37
|
+
TAG: ${{ inputs.tag }}
|
|
38
|
+
run: |
|
|
39
|
+
python3 scripts/release_notes.py "$TAG" > release-notes.md
|
|
40
|
+
gh release create "$TAG" dist/* --title "$TAG" --notes-file release-notes.md --verify-tag
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [0.1.0] - 2026-10-29
|
|
4
|
+
|
|
5
|
+
First release.
|
|
6
|
+
|
|
7
|
+
- One command that installs a coding-agent setup into a project, for Claude Code, Cursor and Codex, writing only
|
|
8
|
+
inside the project.
|
|
9
|
+
- Project memory through agemem (0.1.1+), which also turns off Claude Code's built-in auto-memory.
|
|
10
|
+
- The `sdd-feature` spec-driven development skill and the `worktree` skill, installed with `npx skills` at pinned
|
|
11
|
+
commits.
|
|
12
|
+
- Subagents (`architect`, `coder`, `code-grader`, `utility`) and the workflow rules.
|
|
13
|
+
- Language coders (`coder-python`, `coder-typescript`, `coder-swift`) with their navigation MCPs, detected and
|
|
14
|
+
confirmed, with a `coders` command.
|
|
15
|
+
- `--personal-settings` and `--git-exclude` keep the changes out of git; `--dry-run`, `--without`, `--yes` and
|
|
16
|
+
`--no-input` for control and automation.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Daniel Illescas Romero
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: agentic-loadout
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: One command that gives a project an agent setup: memory (agemem), the SDD skill, subagents and language coders with code-navigation MCPs. Project-scoped, for Claude Code, Cursor and Codex.
|
|
5
|
+
Project-URL: Repository, https://github.com/illescasDaniel/agentic-loadout
|
|
6
|
+
Project-URL: Issues, https://github.com/illescasDaniel/agentic-loadout/issues
|
|
7
|
+
Project-URL: Changelog, https://github.com/illescasDaniel/agentic-loadout/blob/main/CHANGELOG.md
|
|
8
|
+
Author-email: Daniel Illescas Romero <illescas.daniel@protonmail.com>
|
|
9
|
+
License-Expression: MIT
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Keywords: agemem,claude-code,codex,cursor,mcp,memory,sdd,subagents
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Requires-Python: >=3.11
|
|
20
|
+
Requires-Dist: pyyaml<7,>=6.0.3
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
|
|
23
|
+
# agentic-loadout
|
|
24
|
+
|
|
25
|
+
[](https://pypi.org/project/agentic-loadout/)
|
|
26
|
+
|
|
27
|
+
One command that gives a project a coding-agent setup, for Claude Code, Cursor and Codex.
|
|
28
|
+
|
|
29
|
+
- **Memory:** [agemem](https://github.com/illescasDaniel/agemem) keeps current state, decisions and durable notes in
|
|
30
|
+
`memory/`, so a new session picks up where the last one stopped. For Claude Code, agemem (0.1.1+) also
|
|
31
|
+
disables Claude's built-in auto-memory for the project, to avoid double memory.
|
|
32
|
+
- **Spec-driven development:** the `sdd-feature` skill takes a feature through design, spec, tests, implementation and
|
|
33
|
+
an independent grade, with an approval gate between phases.
|
|
34
|
+
- **Subagents:** an orchestrator delegates to `architect` (design), `coder` (implementation), `code-grader` (review)
|
|
35
|
+
and `utility` (commits, checks), following one shared workflow.
|
|
36
|
+
- **Language coders:** `coder-python`, `coder-typescript` and `coder-swift` come with code-navigation MCPs, so they
|
|
37
|
+
rename and refactor through the compiler or type checker instead of `grep` and `sed`.
|
|
38
|
+
|
|
39
|
+
Each piece is handed to the tool that already installs it; agentic-loadout only writes what no tool covers.
|
|
40
|
+
|
|
41
|
+
Needs `uv` (agemem, Python coder) and Node.js 20+ (skill, TypeScript coder).
|
|
42
|
+
|
|
43
|
+
`--python 3.12` makes `uvx` use a tested Python instead of whichever is newest on your machine. For a reproducible run,
|
|
44
|
+
also pin the version: `uvx --python 3.12 agentic-loadout@0.1.0 .`
|
|
45
|
+
|
|
46
|
+
## Use
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
uvx --python 3.12 agentic-loadout . # detects your clients and languages, asks before installing
|
|
50
|
+
uvx --python 3.12 agentic-loadout . --dry-run # prints the commands and the files they write; changes nothing
|
|
51
|
+
uvx --python 3.12 agentic-loadout . --personal-settings --yes
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
<details>
|
|
55
|
+
<summary>Or let your coding agent do it: a prompt to paste into Claude Code, Cursor or Codex, opened in the project</summary>
|
|
56
|
+
|
|
57
|
+
> Install agentic-loadout in this project. It is a PyPI package (`agentic-loadout`), run with
|
|
58
|
+
> `uvx --python 3.12 agentic-loadout` (it needs `uv` and Node.js 20+; tell me if either is missing). First read the
|
|
59
|
+
> project's existing instructions, agents, skills, MCP config and settings (`AGENTS.md`, `CLAUDE.md`, `.claude/`,
|
|
60
|
+
> `.cursor/`, `.codex/`, `.agents/`, `.mcp.json`). Run `uvx --python 3.12 agentic-loadout . --dry-run` and review the
|
|
61
|
+
> plan with me: which clients to target (`--tools claude,cursor,codex`), which parts to leave out (`--without
|
|
62
|
+
> sdd|agemem|agents|coders|worktree`), which language coders it detected (`--with python,swift,typescript`), the memory
|
|
63
|
+
> provider (`--memory-model jev|qsiv`), and anything that contradicts the project's current rules or setup. Never
|
|
64
|
+
> overwrite or move my existing rules; resolve conflicts with me, and ask before using `--force`. Ask me before it runs
|
|
65
|
+
> Homebrew for the Swift coder. Then run the real install, review the resulting diff, warnings and next steps, adapt
|
|
66
|
+
> the generated sections (quality-gate command, layering, conventions, how to set up the environment in a new
|
|
67
|
+
> worktree) to this project, and tell me what is left for me to do, such as restarting the client and approving the new
|
|
68
|
+
> MCP servers and hooks. If memory uses the jev provider, tell me where the API key goes; never ask me to paste it into
|
|
69
|
+
> the chat. Also ask me whether the changes should be added to git and committed, or kept as my personal settings; if
|
|
70
|
+
> personal, run the install with `--personal-settings`, then walk me through every file that could still be changed or
|
|
71
|
+
> was changed (e.g. `AGENTS.md`, `.claude/`, `CLAUDE.local.md`, `.mcp.json`) so I can choose what to do with each:
|
|
72
|
+
> ignore it (`.gitignore`), exclude it locally (`.git/info/exclude`, or `--git-exclude`), hide just those edits with
|
|
73
|
+
> `git update-index --skip-worktree`, or commit it anyway. Note that agemem writes this machine's absolute project
|
|
74
|
+
> path into its MCP and hook entries, so those files shouldn't be committed as they are.
|
|
75
|
+
|
|
76
|
+
</details>
|
|
77
|
+
|
|
78
|
+
**Everything stays inside the project.** Nothing is written to `~/.claude`, `~/.codex`, `~/.cursor` or any user-wide
|
|
79
|
+
config. The two exceptions: agemem keeps its own private `~/.config/agemem/config.yaml` for the API key, and the Swift
|
|
80
|
+
coder's binary is installed with Homebrew, only after you say yes (even with `--yes`; `--allow-brew` skips the question).
|
|
81
|
+
|
|
82
|
+
Rules go to `AGENTS.md`, or to `CLAUDE.md` if the project already has one that isn't just an `@AGENTS.md` import. Each
|
|
83
|
+
section sits between `<!-- agentic-loadout:begin NAME -->` markers, so re-running updates it in place.
|
|
84
|
+
|
|
85
|
+
## What gets installed
|
|
86
|
+
|
|
87
|
+
| Piece | Installed by |
|
|
88
|
+
|---|---|
|
|
89
|
+
| Project memory (`memory/`, notes, MCP, hooks) | [agemem](https://github.com/illescasDaniel/agemem) `project init` |
|
|
90
|
+
| Spec-driven development skill | `npx skills add illescasDaniel/sdd-feature-skill` |
|
|
91
|
+
| Worktree skill (`/worktree create\|save\|apply\|delete`) | `npx skills add illescasDaniel/worktree-skill` |
|
|
92
|
+
| Subagents (`architect`, `coder`, `code-grader`, `utility`) and the workflow rules | agentic-loadout |
|
|
93
|
+
| Language coders (`coder-python`, `coder-typescript`, `coder-swift`) with their navigation MCPs | agentic-loadout |
|
|
94
|
+
|
|
95
|
+
### Worktrees
|
|
96
|
+
|
|
97
|
+
The `worktree` skill runs a task in an isolated git worktree. `/worktree create` branches from the current branch and
|
|
98
|
+
sets up the environment, `save` commits, `apply` merges into the branch the worktree came from, and `delete` removes
|
|
99
|
+
it. agentic-loadout adds a short rule to your instructions: when your checkout has uncommitted changes the agent didn't
|
|
100
|
+
make, it asks once whether to use a worktree, and after the task it offers `save`, `apply` and `delete`. It never
|
|
101
|
+
merges, pushes or deletes without your yes. Leave it out with `--without worktree`.
|
|
102
|
+
|
|
103
|
+
### Language coders
|
|
104
|
+
|
|
105
|
+
A coder is one unit: the `coder-<lang>` subagent, the language's navigation MCP and a routing rule. They are always
|
|
106
|
+
installed together, because without the subagent's instructions the agent doesn't use the MCP.
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
uvx --python 3.12 agentic-loadout coders # detect languages, confirm, install
|
|
110
|
+
uvx --python 3.12 agentic-loadout coders python typescript # or name them (python, typescript, swift, all)
|
|
111
|
+
uvx --python 3.12 agentic-loadout coders --list # catalogue, what is detected, what is installed
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
| Language | MCP | Detected by |
|
|
115
|
+
|---|---|---|
|
|
116
|
+
| python | codenav | `pyproject.toml`, `setup.py`, `requirements*.txt`, `Pipfile`, `uv.lock` |
|
|
117
|
+
| typescript | webnav | `package.json`, `tsconfig.json`, `jsconfig.json`, `deno.json` |
|
|
118
|
+
| swift | codenav-swift (needs the Homebrew binary, macOS) | `Package.swift`, `*.xcodeproj`, `*.xcworkspace`, `Podfile` |
|
|
119
|
+
|
|
120
|
+
### Keeping it out of git
|
|
121
|
+
|
|
122
|
+
`--personal-settings` writes rules to `CLAUDE.local.md` (Claude Code only; it starts with `@AGENTS.md` if you have one),
|
|
123
|
+
Claude settings to `.claude/settings.local.json`, and adds every file the run created to `.git/info/exclude`. A file
|
|
124
|
+
that already existed and was changed (for example a committed `.mcp.json`) can't be hidden by git, so the final message
|
|
125
|
+
lists it with your options. With Cursor or Codex selected the rules go to `AGENTS.md` and you are told.
|
|
126
|
+
`--git-exclude` does the exclusion without the personal files.
|
|
127
|
+
|
|
128
|
+
### Flags
|
|
129
|
+
|
|
130
|
+
`--tools claude,cursor,codex` · `--with python,swift,typescript|all` · `--without sdd|agemem|agents|coders|worktree` ·
|
|
131
|
+
`--memory-model jev|qsiv` · `--no-hooks` · `--model ALIAS` · `--claude-compat` · `--dry-run` · `--no-input` · `--yes` ·
|
|
132
|
+
`--allow-brew` · `--force`. With `--no-input` and no `--yes`/`--with`, no language coder is installed and the command to
|
|
133
|
+
run is printed.
|
|
134
|
+
|
|
135
|
+
The Jev key is never asked for here. Set `AGEMEM_JEV_API_KEY` or edit `~/.config/agemem/config.yaml`.
|
|
136
|
+
|
|
137
|
+
## Development
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
uv run pytest
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
The design and the decisions behind it are in [PLAN.md](PLAN.md). The real Homebrew path can only be checked on macOS.
|