Contributing
Contributing to archeus
archeus has no build step and no runtime dependencies, so getting from a clone to a running copy is one command.
Thanks for looking. The memory and workspace layer for AI coding agents. In practice that is a terminal UI, a desktop GUI and a Claude Code plugin over one Python engine — Claude Code is the agent it drives today. It has zero runtime dependencies and that is a deliberate constraint, not an accident.
By taking part you agree to the Code of Conduct.
Getting set up
git clone https://github.com/babarmuhammad/archeus.git cd archeus python claude-sessions.py # terminal UI python claude-sessions.py --gui # desktop GUIThere is nothing to build and nothing to install first. Python 3.10 or newer, and the Claude Code CLI for anything that launches a session.
For the tests and the tooling:
python -m pip install pytest ruff # tests and lint python -m pip install -r requirements-docs.txt # the docs siteBefore you open a pull request
python -m pytest tests/ -q # the suite python -m ruff check . # lint mkdocs build --strict # only if you touched docs/ or mkdocs.ymlIf you changed anything the GUI renders:
python tools/smoke_gui.py # mounts, paints every page, parks the frame loop python tools/shot_gui.py # screenshots plus an overflow auditBoth need
pip install playwright && playwright install chromium.What the project cares about
Zero runtime dependencies. Everything the installed package imports comes from the standard library. Test, docs and build tooling live in their own install steps —
requirements-docs.txtand the CI job that needs them — never inpyproject.toml. PyQt6 is the one optional extra, and the GUI falls back to the browser without it.Read the gotchas first.
CLAUDE.mdin the repo root documents the traps this codebase has already fallen into: why animations may only touchtransformandopacity, why a module-level constant derived from mutable state is a cache with no invalidation, whysettings.jsonmust be written atomically, why the statusline is dispatched beforemainis imported. Most review comments on a first pull request are already answered there.A gate nobody has watched fail is not a gate. If you add a test that guards something, break the thing on purpose once and confirm the test goes red. This repo shipped a verification tool that printed
FAILURES: nonewhile executing zero checks; several tests now exist specifically because of it.Tests stay in
tests/, one file per area. They usepytestand nothing else. TUI screens are driven through the fake keyboard intests/harness.py; the GUI is driven through the stub server intools/smoke_gui.py.Never put real data in a fixture. Anything the screenshot tools are fed becomes a published PNG, so the demo workspace is fictional by design —
tests/test_demo_fixtures.pyfails the build if a fixture names a real home directory or a real-looking absolute path.Documentation is part of the change. A new feature updates its docs page,
tools/smoke_gui.pyif it renders, anddocs/api.mdviapython tools/gen_api_docs.pyif it adds a route. Generated files are never edited by hand.Commit messages
Conventional Commits (
feat:,fix:,docs:,chore:,refactor:,test:), a subject under about 50 characters, and a body that explains why when the reason is not obvious from the diff. The commit log is used as project memory here, so a message that records the reasoning is worth more than one that restates the patch.Reporting bugs
Open an issue with your OS, your Python version,
archeus --version, what you expected, and what happened. If a screen is involved, a screenshot helps — but check it for project names or paths you would rather not publish first.Security
Please do not open a public issue for a security problem. Use GitHub's private vulnerability reporting on the repository instead.
The website
The marketing site (
www/, Next.js) and the documentation (docs/, MkDocs Material) both live in this repository and both deploy frommain. The zero-dependency rule applies to the Python package — the website has its ownpackage.jsonand that is fine.