Harness Baby
Harness Baby is a deterministic CLI for people who want an AI coding agent to work safely but do not yet know what repository harness to build. It gives an empty folder the smallest honest starting structure, then scores readiness as you and your preferred coding agent fill in the real project details.
You do not need to understand harness engineering before using it. Preview the starter skeleton, create it explicitly, ask the coding agent you already like to help fill the TODOs, and run the scan again. Harness Baby provides the first foothold and the feedback loop; it does not choose your agent or pretend unfinished controls already exist.
Project status
Harness Baby is experimental alpha software, not a stable release or a guarantee that
a repository is ready for production or unsupervised agent work. Use it at your own
risk. Review the preview before running init --apply, keep the target under version
control or backed up, and independently verify generated content, detected evidence,
and scores before relying on them. The software is provided without warranty under the
MIT License.
It is not an AI agent and never calls an LLM. scan does not change source or
configuration, install dependencies, run Terraform, or contact external services;
its only repository write is the requested .harness/report.yaml artifact. The
separate init --apply command writes only its reviewed generic skeleton into an
empty target.
Install
Python 3.12 or newer is required.
Install the released CLI in an isolated environment with
pipx:
pipx install harness-baby --python python3.12
Upgrade or remove it with:
pipx upgrade harness-baby
pipx uninstall harness-baby
For development from a source checkout, use the commands in the Development section.
Usage
Start from an empty folder
Preview a generic, agent-neutral harness without writing anything:
harness-baby init my-project --project-name "My Project"
Create the exact preview explicitly:
harness-baby init my-project --project-name "My Project" --apply
The bootstrap creates seven context and feedback files. It does not invent source
code, tests, CI, dependencies, a license, or an architecture. See
docs/bootstrap.md
for the novice walkthrough and conflict
behavior.
Check readiness
Scan the current directory:
harness-baby scan .
Choose another report destination:
harness-baby scan /path/to/repository --output /tmp/report.yaml
The command prints a compact summary and writes <repository>/.harness/report.yaml by default. Finding failed checks does not make the process fail; exit code 2 is reserved for invocation, path, or report-write errors.
Report schema
Schema version 1 has five stable top-level fields. Evidence fields may grow as checks improve.
schema_version: 1
tool:
name: harness-baby
version: 0.1.0
project:
path: .
detected_stacks:
- python
summary:
score: 75
passed: 5
warned: 2
failed: 1
skipped: 2
checks:
testing:
category: testing
status: pass
evidence:
frameworks:
- pytest
test_files:
- tests/test_app.py
pyproject_parse_error: null
Every check has an ID, category, status (pass, warn, fail, or skip), and evidence. Secret findings contain only a file, line number, and finding kind—never the suspected value.
The score is calculated in scoring.py: pass is 1.0, warn is 0.5, fail is 0, and skip is excluded. Each check has weight 1.0 in the MVP, while the scoring API already accepts explicit per-check weights.
Supported stacks and checks
- Repository: Git marker and license evidence
- Documentation: root README
- Agent context: root
AGENTS.md - Python:
pyproject.toml,requirements.txt, pytest, unittest, ruff, flake8, black, mypy, and coverage-related configuration evidence - Terraform:
.tffiles, module directories, Terraform executable availability, tflint, tfsec/checkov configuration, and read-only fmt/validate readiness - GitHub Actions: workflows, test/lint/Terraform validate command signals, YAML parse failures, and a deliberately small hardcoded-secret heuristic
- Reproducibility: common Python lockfiles, pinned requirements, and Terraform lockfiles
Terraform commands are never executed. terraform_binary_available describes the current environment, while commands_executed remains empty. This avoids state changes, implicit initialization, and network access.
Architecture
Scanner performs bounded, sorted file discovery, detects stacks, and executes an ordered registry of Check implementations. A check receives an immutable ScanContext and returns a CheckResult; it does not mutate the repository. Adding a stack means adding checks under src/harness_baby/checks/ and registering them in built_in_checks().
The score policy and YAML reporter are independent modules. YAML output preserves registry order and contains no timestamps, making repeated scans stable when repository and relevant tool availability are unchanged.
bootstrap.py owns the generic template and separates deterministic planning from
explicit application. It preflights every path before writing, refuses ownership
ambiguity, and verifies the complete result after application. The maintained
contract and stop conditions live in
docs/specs/blank-folder-bootstrap.md.
Development
The committed uv.lock is the reproducible development environment:
uv sync --locked --extra dev
uv run pytest
uv run ruff check .
uv run ruff format --check .
uv run mypy
uv run python -m build
uv run twine check dist/*
Without uv, create a Python 3.12 virtual environment and run
python -m pip install -e '.[dev]' before invoking the tools directly.
Release maintainers should follow
docs/releasing.md.
Roadmap
After the generic bootstrap is proven, likely additions are a novice-friendly interactive flow, stack-specific templates, safe adoption into existing repositories, a versioned external plugin discovery contract, configurable check weights, optional report history, more robust workflow semantics, and support for Node.js, Go, Rust, Java, Docker, Kubernetes, and Ansible.
Dynamic plugins, application-code generation, automatic remediation, external command execution, historical reports, remote integrations, and exhaustive secret scanning are intentionally outside the current scope.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file harness_baby-0.1.0.tar.gz.
File metadata
- Download URL: harness_baby-0.1.0.tar.gz
- Upload date:
- Size: 29.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
512958748e7f19f80bd0bbbc1631fe040737cdd548ee3313b9fe26807ac1b8c1
|
|
| MD5 |
202bc1f4d32a7ab024c18a91c887ed74
|
|
| BLAKE2b-256 |
c888b839c2d41969c4e0c9521c1dc43cc9b136f3b5b53ac4b44e30306dbf6391
|
Provenance
The following attestation bundles were made for harness_baby-0.1.0.tar.gz:
Publisher:
release.yml on yamashi128/Harness_Baby
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
harness_baby-0.1.0.tar.gz -
Subject digest:
512958748e7f19f80bd0bbbc1631fe040737cdd548ee3313b9fe26807ac1b8c1 - Sigstore transparency entry: 2536785556
- Sigstore integration time:
-
Permalink:
yamashi128/Harness_Baby@2d4ab595d4eb825644cbffbb641871fea13704c0 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/yamashi128
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@2d4ab595d4eb825644cbffbb641871fea13704c0 -
Trigger Event:
push
-
Statement type:
File details
Details for the file harness_baby-0.1.0-py3-none-any.whl.
File metadata
- Download URL: harness_baby-0.1.0-py3-none-any.whl
- Upload date:
- Size: 23.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e956096007ce82a2239957897cd3f7dd0f6680dcb233c9abe1427d01202fb53e
|
|
| MD5 |
5be5e845974598bb1b361c056599cc4a
|
|
| BLAKE2b-256 |
9c593e96aa824df2e0717b1c563b46f841cfa812295ff1df010bbd1d3ed06380
|
Provenance
The following attestation bundles were made for harness_baby-0.1.0-py3-none-any.whl:
Publisher:
release.yml on yamashi128/Harness_Baby
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
harness_baby-0.1.0-py3-none-any.whl -
Subject digest:
e956096007ce82a2239957897cd3f7dd0f6680dcb233c9abe1427d01202fb53e - Sigstore transparency entry: 2536785599
- Sigstore integration time:
-
Permalink:
yamashi128/Harness_Baby@2d4ab595d4eb825644cbffbb641871fea13704c0 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/yamashi128
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@2d4ab595d4eb825644cbffbb641871fea13704c0 -
Trigger Event:
push
-
Statement type: