Projects
A repository where HarnessTap applies plugins, reads apm.yml, and writes apm.lock.yaml.
A project is a repository (or directory tree) where HarnessTap materializes harness configuration. Commands default to the working tree (cwd / --project), not machine home.
HarnessTap walks up from that path to the nearest apm.yml.
Project files
| Path | Commit? | Role |
|---|---|---|
apm.yml | Yes | Project manifest. Create with ht config init. Apply does not write it. |
apm.lock.yaml | Yes | Lockfile. Written by a successful durable ht apply or ht install. |
.harnesstap/local.toml | No | Local overrides for default_profile / default_environment only. |
~/.harnesstap/ | No | Machine library. Not part of the repo. |
Manifest shape
apm.yml lives at the repo root. Standard OpenAPM keys (name, version, targets, dependencies) parse. HarnessTap-only fields are first-class top-level keys: default_profile, environments, profiles, plugins. Git dependencies.apm entries (owner/repo, URL, or object-form path / ref) apply from the manifest; see Apply git dependencies. Registry strings in dependencies.mcp resolve from MCP Registry v0.1 on ht install; see MCP Registry identities.
environments is a mapping (same idea as profiles / plugins). environments.default names the active environment; other keys are named how-value bundles (values and optional secret_refs — refs only). There is no sibling singular environment / default_environment key.
name: demo
version: "1.0.0"
targets: [cursor, claude]
dependencies:
apm:
- team-stack
mcp:
- io.github.github/github-mcp-server
- name: filesystem
registry: false
command: npx
args: ["-y", "@modelcontextprotocol/server-filesystem", "/workspace"]
default_profile: dev
environments:
default: shared
shared:
values:
REGION: us
profiles:
- name: dev
source: local
selector: team-stackInspect the resolved file:
ht config show
ht config validateProfiles vs projects
| Profiles | Projects | |
|---|---|---|
| Scope | Machine home harness paths | Repository working tree |
| Primary command | profile use | apply |
| Typical use | Work/personal machine presets | Team repo baselines |
Switch a project-configured profile from apm.yml with ht use (--profile is a flag, not a positional name):
ht use --list
ht use --profile dev
ht use # interactive picker when multiple profiles existht use reads the repo manifest, then applies that profile plugin the same way profile use does (machine home). To write harness files into the repository, use ht apply or ht install.