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.
Files changed (47) hide show
  1. agentic_loadout-0.1.0/.gitattributes +2 -0
  2. agentic_loadout-0.1.0/.github/workflows/ci.yml +40 -0
  3. agentic_loadout-0.1.0/.github/workflows/release.yml +40 -0
  4. agentic_loadout-0.1.0/.gitignore +5 -0
  5. agentic_loadout-0.1.0/CHANGELOG.md +16 -0
  6. agentic_loadout-0.1.0/LICENSE +21 -0
  7. agentic_loadout-0.1.0/PKG-INFO +143 -0
  8. agentic_loadout-0.1.0/PLAN.md +371 -0
  9. agentic_loadout-0.1.0/README.md +121 -0
  10. agentic_loadout-0.1.0/pyproject.toml +41 -0
  11. agentic_loadout-0.1.0/scripts/release_notes.py +33 -0
  12. agentic_loadout-0.1.0/src/agentic_loadout/__init__.py +1 -0
  13. agentic_loadout-0.1.0/src/agentic_loadout/agents.py +76 -0
  14. agentic_loadout-0.1.0/src/agentic_loadout/assets/agents/architect.md +63 -0
  15. agentic_loadout-0.1.0/src/agentic_loadout/assets/agents/code-grader.head.md +7 -0
  16. agentic_loadout-0.1.0/src/agentic_loadout/assets/agents/coder.md +44 -0
  17. agentic_loadout-0.1.0/src/agentic_loadout/assets/agents/utility.md +31 -0
  18. agentic_loadout-0.1.0/src/agentic_loadout/assets/development-workflow.md +99 -0
  19. agentic_loadout-0.1.0/src/agentic_loadout/assets/templates/agents-rules.md +7 -0
  20. agentic_loadout-0.1.0/src/agentic_loadout/assets/templates/coders/python.md +13 -0
  21. agentic_loadout-0.1.0/src/agentic_loadout/assets/templates/coders/swift.md +16 -0
  22. agentic_loadout-0.1.0/src/agentic_loadout/assets/templates/coders/typescript.md +17 -0
  23. agentic_loadout-0.1.0/src/agentic_loadout/assets/templates/memory-rules.md +18 -0
  24. agentic_loadout-0.1.0/src/agentic_loadout/assets/templates/sdd-rules.md +18 -0
  25. agentic_loadout-0.1.0/src/agentic_loadout/assets/templates/worktree-rules.md +13 -0
  26. agentic_loadout-0.1.0/src/agentic_loadout/brew.py +98 -0
  27. agentic_loadout-0.1.0/src/agentic_loadout/cli.py +84 -0
  28. agentic_loadout-0.1.0/src/agentic_loadout/coders.py +241 -0
  29. agentic_loadout-0.1.0/src/agentic_loadout/detect.py +47 -0
  30. agentic_loadout-0.1.0/src/agentic_loadout/files.py +109 -0
  31. agentic_loadout-0.1.0/src/agentic_loadout/git_state.py +114 -0
  32. agentic_loadout-0.1.0/src/agentic_loadout/install.py +181 -0
  33. agentic_loadout-0.1.0/src/agentic_loadout/instructions.py +115 -0
  34. agentic_loadout-0.1.0/src/agentic_loadout/mcp_config.py +64 -0
  35. agentic_loadout-0.1.0/src/agentic_loadout/options.py +38 -0
  36. agentic_loadout-0.1.0/src/agentic_loadout/pins.py +15 -0
  37. agentic_loadout-0.1.0/src/agentic_loadout/preflight.py +23 -0
  38. agentic_loadout-0.1.0/src/agentic_loadout/runners.py +51 -0
  39. agentic_loadout-0.1.0/src/agentic_loadout/ui.py +45 -0
  40. agentic_loadout-0.1.0/src/agentic_loadout/vendors.py +154 -0
  41. agentic_loadout-0.1.0/tests/__init__.py +0 -0
  42. agentic_loadout-0.1.0/tests/conftest.py +73 -0
  43. agentic_loadout-0.1.0/tests/test_detect_and_brew.py +88 -0
  44. agentic_loadout-0.1.0/tests/test_install.py +230 -0
  45. agentic_loadout-0.1.0/tests/test_instructions.py +81 -0
  46. agentic_loadout-0.1.0/tests/test_mcp_config.py +54 -0
  47. agentic_loadout-0.1.0/uv.lock +138 -0
@@ -0,0 +1,2 @@
1
+ * text=auto
2
+ src/agentic_loadout/assets/** text eol=lf
@@ -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,5 @@
1
+ __pycache__/
2
+ .venv/
3
+ dist/
4
+ *.egg-info/
5
+ .pytest_cache/
@@ -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
+ [![PyPI](https://img.shields.io/pypi/v/agentic-loadout)](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.