MoxPP moxpp-setup
Configures a freshly cloned MoxPP template for a new project. Use when starting a new C++ project from the MoxPP template and the developer needs to rename and configure it.
git clone https://github.com/Moxibyte/MoxPP
T=$(mktemp -d) && git clone --depth=1 https://github.com/Moxibyte/MoxPP "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/moxpp-setup" ~/.claude/skills/moxibyte-moxpp-moxpp-setup && rm -rf "$T"
.claude/skills/moxpp-setup/SKILL.mdMoxPP Initial Setup
Help the developer configure this MoxPP template for their new project. Work through the steps below interactively — ask for any information you don't already have before making changes.
Steps
1. Gather project information
Ask the user for the following if not already provided via $ARGUMENTS:
- Project name — the human-readable product name (used as solution/workspace name)
- Project description — what this project does; used in CLAUDE.md to give Claude context
- Coding conventions — any naming conventions, style rules, or patterns the developer follows (e.g. snake_case for files, PascalCase for classes, no exceptions, etc.); used in CLAUDE.md
- Macro prefix — short ALL_CAPS prefix for preprocessor macros (e.g.
). Default: derived from project name.MYAPP_ - C++ standard — default is
, confirm or ask for override.C++23 - Project architecture —
(one project),single
(sibling projects in src/),flat
(grouped), orhierarchical
. Default:manual
.single - Unit tests — keep (
) or remove unit test support (test
)?nil - Conan dependencies — list any required packages in
format (e.g.<name>/<version>
). Ask whether any package needs options changed (e.g.fmt/11.0.2
). Note:shared = True
is added automatically when unit tests are enabled and does not need to be listed here.gtest
2. Update mox.lua
mox.luaEdit the following fields in
mox.lua:
→ new project namecmox_product_name
→ new macro prefix (must end withcmox_macro_prefix
)_
→ confirmed C++ standardcmox_cpp_version
→ chosen architecture modecmox_project_architecture
→cmox_unit_test_src
or"test"
. If set tonil
, also delete thenil
directory at the repository root — leaving it in place will cause stale project files and build errors../test- In
: updatecmox_function_setupworkspace()
to match the new main project name (or remove the call if not applicable)startproject
3. Rename the example project in src/build.lua
src/build.lua- Change
to use the new project name and a snake_case output name.mox_project("HelloWorld", "hello_world") - Update the output type to match what the user requested (e.g.
,mox_console()
, etc.).mox_sharedlib() - Generate a fresh UUID by running
via Bash and replace the existing UUID inpython -c "import uuid; print(uuid.uuid4())"
.src/build.lua - Source file management (only for
architecture — for other architectures this is handled in step 5):single- If
orsharedlib
: deletestaticlib
, createsrc/main.cpp
,src/<output_name>.h
(empty placeholders), andsrc/<output_name>.cpp
(containing onlysrc/dummy.cpp
).// dummy
is required on Windows — without at least one compileddummy.cpp
, MSBuild will not produce a.cpp
and any dependent project will fail to build..lib - If
orconsole
: keepwindowed
as-is.src/main.cpp
- If
4. Update conanfile.py
conanfile.py- Rename the class from
to match the new project name (e.g.MoxPPRecipe
).MyProjectRecipe - Replace the template
dependency (and itsspdlog
option) with the packages the user provided.shared = True - For each package that has options, add the corresponding
calls inself.options[...]
.configure() - Keep
if unit tests are enabled; remove it otherwise.self.requires("gtest/1.16.0")
5. Adjust architecture layout (if not single
)
single- flat: Create
. Movesrc/<first-project-name>/
into it. Then apply source file management based on output type:src/build.lua- If
orconsole
: movewindowed
into the project directory.src/main.cpp - If
orsharedlib
: deletestaticlib
and createsrc/main.cpp
,<project-dir>/<output_name>.h
(empty placeholders), and<project-dir>/<output_name>.cpp
(containing only<project-dir>/dummy.cpp
).// dummy
- If
- hierarchical: Create
. Movesrc/<group>/<project-name>/
into it. Apply the same source file management rules as flat above, using the new project directory as the target.src/build.lua - manual: Remove the auto-discovery note and remind the user to implement
incmox_function_includeprojects()
.mox.lua
6. Update CLAUDE.md
CLAUDE.mdRewrite
CLAUDE.md to follow the enforced layout below. Keep all existing content under ## MoxPP Build System (headings inside that section demoted by one level: ## → ###). Replace the top section with real project content based on what was gathered in step 1.
Required layout:
# <Project Name> <Project description — what it does, its purpose, target platform/audience, etc.> ## Coding Conventions <List the conventions the developer provided. If none were given, omit this section.> ## <Any other project-specific sections the developer wants Claude to know> ## Conan Dependencies <Bulleted list of all active Conan packages in `<name>/<version>` format, with a one-line note on purpose if known. Keep this section up to date whenever conanfile.py changes.> ## MoxPP Build System <Existing MoxPP content verbatim, with all headings demoted one level>
7. Rewrite README.md
README.mdAsk the user directly: "Do you want me to rewrite README.md for your project now?"
If yes, ask for any additional details needed beyond what was already gathered (e.g. badges, links, usage examples, screenshots). Then replace the entire contents of
README.md with a meaningful readme for the project. Do not include a Claude Code section — BUILDING.md already covers that and persists as the reference for build and tooling documentation. The only required carry-over is a short line pointing readers to BUILDING.md for build instructions, dependencies, and tooling (including Claude Code integration).
If no, remind the user that the current README.md is the MoxPP template readme and should be replaced before the project goes public.
8. Confirm and summarize
List all files changed and remind the user to run
mox init (or ./mox.sh init) to regenerate project files after these changes.