specsmith is bootstrapping its own governance process. The tool generates the Agentic AI Development Workflow for other projects, but specsmith itself is iteratively adopting that same workflow. Future versions will be developed using an older stable version of itself — the process will converge.
Until then, governance files in this repo (AGENTS.md, LEDGER.md, docs/governance/) represent the target state we are working toward, not a fully enforced process yet.
git clone https://github.com/BitConcepts/specsmith.git
cd specsmith
pip install -e ".[dev]"!!! warning "Scope PYTHONPATH to this workspace only"
pip install -e . creates src/specsmith.egg-info which importlib.metadata
finds via PYTHONPATH=.../src. If this is set globally in your shell it
leaks into every Python process — including pipx venvs — and causes version
mismatches across tools.
Use the provided `.vscode/settings.json` which scopes `PYTHONPATH` to the
VS Code integrated terminal for **this workspace only**. Never export
`PYTHONPATH` in your shell profile for this purpose.
main— production-ready releasesdevelop— integration branch for next releasefeature/*— branch fromdevelop, merge back todeveloprelease/*— branch fromdevelop, merge tomain+develophotfix/*— branch frommain, merge tomain+develop
git checkout develop
git checkout -b feature/my-feature
# work, commit, push
gh pr create --base developruff check src/ tests/ && ruff format --check src/ tests/ && mypy src/specsmith/ && pytest tests/ -vpre-commit install- SPDX headers on all
.pyfiles (MIT,BitConcepts, LLC.) - Must pass
ruff check,ruff format --check,mypy --strict - All features require tests
- Windows scripts:
.cmdonly (no.ps1) - Line length: 100
When adding a new project type:
- Add the enum to
config.py(ProjectType) - Add type label and section ref to
config.py(_TYPE_LABELS,_SECTION_REFS) - Add directory structure to
scaffolder.py(_get_empty_dirs) - Add tool entries to
tools.py(_TOOL_REGISTRY) - Add CI metadata to
tools.py(LANG_CI_META) if the language is new - Add type-specific rules to
templates/agents.md.j2 - Add type→tool-key mapping in
toolrules.py(_TYPE_TOOL_KEYS) - Add install commands in
tool_installer.py(KNOWN_TOOLS) for any new tools - Add tests for the new type
The four built-in profiles (safe, standard, open, admin) live in profiles.py.
To change what commands are allowed by default in the standard profile, edit
_STANDARD_ALLOWED_COMMANDS / _STANDARD_BLOCKED_COMMANDS / _STANDARD_BLOCKED_PATTERNS.
New profiles can be added to the PROFILES dict — they will be available via scaffold.yml
execution_profile and in the VS Code Settings panel.
Curated AI context rules live in toolrules.py (TOOL_RULES dict).
Each entry is a markdown bullet-list injected into the agent system prompt.
When adding rules for a new tool:
- Add an entry to
TOOL_RULESkeyed by the tool executable name. - Add the key to
_FPGA_CHIP_TO_KEYif it's an FPGA chip name (as used infpga_tools:). - Update
_TYPE_TOOL_KEYSto include it for relevant project types.
Star the repo, report issues, and consider sponsoring BitConcepts.
specsmith import generates governance overlay for existing projects. The detection engine in importer.py handles:
- Language detection by file extension
- Build system detection (pyproject.toml, Cargo.toml, CMakeLists.txt, etc.)
- Test framework detection
- CI and VCS platform detection
- Module and entry point discovery
- Branch from
develop(features) ormain(hotfixes) - All CI must pass (lint, typecheck, test × 9 matrix, security)
- Update
CHANGELOG.mdand docs if applicable - One approval required
Key tuning knobs in scaffold.yml for enterprise teams:
| Setting | Default | Description |
|---|---|---|
branching_strategy |
gitflow | gitflow, trunk-based, github-flow |
require_pr_reviews |
true | Require reviews before merge |
required_approvals |
1 | Number of required approvals |
require_ci_pass |
true | CI must pass before merge |
allow_force_push |
false | Allow force push to protected branches |
use_remote_rules |
false | Accept existing remote branch rules |
vcs_platform |
github | github, gitlab, bitbucket |