Welcome. AURA Harness is a runtime coat around agent loops — audit, policy, session export — without replacing your host. We welcome contributions from human developers, semi-autonomous assistants, and autonomous agents that follow this guide.
Agents: read Agent Contribution Workflow first. Human operators supervising agent work should use the same workflow for review.
| Section | Description |
|---|---|
| Ways to contribute | Pick your contribution type |
| Getting started | Fork, branch, install |
| Universal expectations | Standards for every PR |
| Ripple effects | What else to update when you change X |
| Pull request process | Issue → verify → PR |
| What to avoid | Anti-patterns |
| AI agents and operators | Autonomous work rules |
| Related documents | Testing, CoC, templates |
| Type | What you change | Typical label | Before coding | Verify locally |
|---|---|---|---|---|
| Bug fix | Paths named in issue | bug |
Bug report | Repro + pytest; add regression test when possible |
| Core framework | aura/core/, aura/agents/, aura/api.py |
core framework |
Core issue | pytest tests/test_core.py tests/test_core_gaps.py + related |
| CLI | aura/cli/ |
cli |
CLI issue | pytest tests/test_cli.py + manual CLI check |
| Membrane & pipeline | aura/sequencer/, aura/hosts/, aura/membrane/, aura/observers/, exporters |
sequencer, hosts, membrane, observers, audit & export |
Membrane & pipeline | pytest tests/test_v02.py tests/test_v03.py tests/test_core_gaps.py; update integration docs |
| Stack integration | integrations/, stack-specific demos and docs |
integrations, examples, documentation |
Stack integration | Mock-first; .env.example for API keys; no secrets in repo |
| Documentation | docs/, README.md |
documentation |
Documentation issue | Links valid; tone matches repo |
| Enhancement | New behavior in scope of issue | enhancement |
Enhancement issue | Tests + CHANGELOG + ripple docs |
| Examples | examples/ |
examples |
Issue or enhancement | Script runs; update examples/README.md |
| Packaging / CI | pyproject.toml, .github/workflows/ |
packaging, ci |
Issue | Build wheel locally; CI green |
| Good first issue | Small docs/tests/fixes | good first issue |
Read acceptance criteria | Checklist for underlying type above |
Labels: .github/labels.json — synced on merge to main via sync-labels workflow.
Check existing issues first.
When writing or pasting issue bodies: link other work with https://github.com/ARPAHLS/aura/issues/<N> or descriptive titles. Do not use internal planning file numbers or target release versions (v0.x) — sequencing uses phases (see ROADMAP), semver is maintainer-only via CHANGELOG.
| Intent | Template |
|---|---|
| Incorrect behavior | Bug report |
| Session, spine, identity, audit | Core framework |
aura CLI |
CLI |
| Sequencer, Skillware host, membrane, observers | Integration |
| Docs only | Documentation |
| New feature | Enhancement |
Wait for maintainer feedback on large or breaking work before investing in a big PR.
git clone https://github.com/<your-username>/aura.git
cd aura
git remote add upstream https://github.com/ARPAHLS/aura.gitgit fetch upstream
git checkout main
git pull upstream main
git checkout -b fix/issue-<number>-short-descriptionRequires Python 3.10+.
py -3.13 -m venv .venv
.venv\Scripts\activate # Windows
# source .venv/bin/activate # macOS/Linux
pip install -e ".[dev]"Skillware host work:
pip install -e ".[dev,skillware]"See docs/TESTING.md for lint and CI parity.
Follow Ripple effects, then Pull request process.
Follow the Code of Conduct. We welcome autonomous logical systems that adhere to repo standards; operators remain accountable for merged work.
- No emojis in source, docs, commits, or PR titles.
- Black (
black aura tests integrations examples) and Flake8 (flake8 aura tests integrations examples) — see TESTING.md. - Typed Python where the surrounding code uses types; match existing naming and structure.
- Change only what the issue requires.
- Do not bump
pyproject.tomlversion orCITATION.cffunless a maintainer or release issue explicitly asks. - Do not commit
AURA_PLAN.md(local, gitignored) or secrets (.env, keys, tokens). Use.env.examplefor documented placeholders.
-
Behavior changes require tests in
tests/. -
Run before opening a PR:
pytest black aura tests integrations examples flake8 aura tests
-
Shared fixtures:
tests/conftest.py(aura_home,run_aurafor CLI subprocess tests). -
Full suite is 200+ tests across core, CLI, examples smoke, spectrum, capabilities, host stress sim, and coat flow report — see TESTING.md.
-
CI runs on PRs via
.github/workflows/ci.yml(Python 3.10–3.13 matrix; gate joblint-test: pytest with coverage report, black, flake8). Steps are defined once in.github/workflows/reusable-test.yml. Each matrix cell also runspip-auditas a warn-only dependency check; its findings or audit errors do not fail the gate or block a PR. See TESTING.md for the exact commands. -
Wait for green checks before requesting review.
When a PR changes user-visible behavior (SDK, CLI, export shape, default session behavior, new commands):
- Add entries under
[Unreleased]in CHANGELOG.md (Keep a Changelog sections: Added / Changed / Fixed / Removed). - Do not add version headers or cut releases — maintainers tag releases.
Pure internal refactors with no user-visible effect may omit CHANGELOG; ask on the issue if unsure.
| If you change… | Also update… |
|---|---|
Public SDK (aura/api.py, SessionRun methods) |
docs/getting-started.md, docs/using-aura.md, docs/concepts.md, tests, CHANGELOG |
| Session / spine event shape | spec/aura-event.schema.json (if applicable), docs/outputs.md, tests, CHANGELOG |
| Agent profile / registry fields | docs/trust-paths.md, docs/aura-levels.md, docs/using-aura.md, aura/agents/profile.py persistence, tests, CHANGELOG |
capabilities[] / SecretBroker |
aura/core/capabilities.py, aura/core/secrets.py, aura/core/payload_redaction.py, aura/membrane/egress.py, docs/capabilities.md, docs/using-aura.md, docs/outputs.md, docs/skillware-integration.md, integrations/openai/README.md, examples/14-capability-broker/, tests/test_capability_broker.py, capability + host stress sims, CHANGELOG |
spectrum.level / enforcement rules |
aura/core/spectrum_enforcement.py, docs/aura-levels.md, docs/comparison.md, docs/ROADMAP.md, tests/test_spectrum_enforcement.py, stress sim / flow report scripts, CHANGELOG |
spectrum.services[] / field-service wiring |
aura/core/spectrum_services.py, aura/observers/presets/limit.py, spec/manifest.schema.json, docs/observers.md, docs/field-services.md, docs/using-aura.md, tests/test_spectrum_services.py, stress sim / flow report scripts, CHANGELOG |
escalations[] playbooks |
aura/core/escalations.py, aura/core/constraints.py (escalation_pause), aura/agents/profile.py, docs/observers.md, docs/outputs.md, examples/12-escalation-playbooks/, tests/test_escalations.py, tests/test_example_12_escalation_playbooks.py, stress sim, CHANGELOG |
| Constraint rule types | docs/concepts.md, docs/capabilities.md (for capability_scope), docs/aura-levels.md (for schema_check), aura/core/constraints.py, aura/core/schema_validation.py, tests/test_schema_checks.py, stress sim, CHANGELOG |
| Sequencer step model | spec/sequencer.schema.json, docs/sequencer.md, tests/test_v02.py, CHANGELOG |
| Skillware host / egress | integrations/skillware/ (when shipped), docs/skillware-integration.md redirect, CHANGELOG |
| Integration example (Ollama, API, framework) | integrations/<stack>/, docs/integrations/README.md, .env.example, CHANGELOG |
| CLI commands or flags | docs/getting-started.md, README.md quick start line, docs/outputs.md (export/compare shapes), CHANGELOG |
| New core example | Numbered folder examples/NN-short-name/ with main.py + README.md, examples/README.md, onboarding learning path if applicable |
| Architecture terminology | docs/architecture.md, docs/INDEX.md, README.md diagrams (keep in sync) |
| Public docs tree / INDEX tiers | docs/INDEX.md, cross-links from getting-started.md, onboarding.md, ROADMAP.md |
| Release / PyPI behavior | docs/PUBLISHING.md, .github/workflows/publish-pypi.yml, CHANGELOG |
| PR CI workflow | .github/workflows/ci.yml, .github/workflows/reusable-test.yml, docs/TESTING.md, CONTRIBUTING.md |
| Issue template fields | .github/labels.json if new label needed; run label sync |
| Version (maintainer only) | pyproject.toml, aura/__init__.py, CITATION.cff, CHANGELOG release section, Zenodo if archived |
When in doubt, search the repo for the symbol or term you changed and update docs that reference it.
- Link an issue —
Fixes #123orRefs #123in the PR description. - Branch — feature branch on your fork, not direct commits to upstream
main. - Implement — follow Ways to contribute and Ripple effects.
- Verify locally —
pytest --ignore=tests/integration,black aura tests integrations examples,flake8 aura tests integrations examples. - CHANGELOG —
[Unreleased]entry when user-visible. - PR template — complete pull request template honestly.
- Push — open PR to
ARPAHLS/auramain. - CI — fix failures; address review on the same branch.
- Imperative mood:
Add audit report findings for denied tools - No emojis; no AI
Co-authored-by:trailers - Reference issue when helpful:
Fix session export agent_ref (#42)
- Bypassing the membrane — do not document or test “call Skillware directly” as the blessed path unless the issue is explicitly about fallback/offline mode.
- God modules — keep changes focused; no unrelated refactors.
- Orchestrator creep — AURA wraps loops; do not add model routing or tool frameworks into core.
- Deleting vision — do not remove ROADMAP/narrative content without maintainer agreement.
- Placeholder docs — no “TODO: document” in user-facing paths you touch.
- Unrequested version bumps — see Maintainer: cutting a release.
- Hardcoded vendors — use adapters and host patterns; no “only OpenAI” assumptions in core.
Autonomous and semi-autonomous agents are welcome when they:
- Follow Agent Contribution Workflow
- Link issues and stay in scope
- Run tests and linters before requesting review
- Update ripple docs and CHANGELOG when required
- Do not commit secrets or gitignored local plans
Operators must review agent output, run verification, and own the PR. Agents should not merge their own PRs unless explicitly delegated by maintainers.
- Events before features — meaningful actions emit to the audit spine.
- Wrap, don't replace — the user's loop stays in their host.
- Layered identity —
agent_reffor humans/CI, ULID internal id, external ids in trailer. - Observers don't enforce — policy lives in constraints + egress; observers subscribe only.
| Document | Purpose |
|---|---|
| Agent Contribution Workflow | Agents and supervising operators |
| TESTING.md | pytest, black, flake8, pre-PR checklist |
| Code of Conduct | Humans and autonomous logical systems |
| SECURITY.md | Vulnerability reporting |
| PUBLISHING.md | PyPI and release tags |
| ROADMAP.md | Shipped vs deferred (do not re-delete vision) |
| Issue templates | Bug, docs, core, CLI, enhancement, membrane & pipeline, stack integration |
.github/labels.json |
Label definitions |
| CHANGELOG.md | User-facing history |
| CITATION.cff | Software citation metadata |
Contributor PRs must not bump version unless asked. Maintainers cut releases:
| Touch | Every release? |
|---|---|
pyproject.toml → version |
Yes |
aura/__init__.py → __version__ |
Yes |
CHANGELOG.md |
Yes — move [Unreleased] to ## [X.Y.Z] - date |
CITATION.cff → version, date-released |
Yes |
Git tag vX.Y.Z + GitHub Release |
Yes — triggers PyPI publish |
README.md install pin examples |
Optional |
Thank you for helping make agent runs auditable, policy-bound, and portable.