Skip to content
Apothem
Install

Quick start

Install Apothem, author a profile, materialize your first harness, and verify it — a copy-paste tour with expected output.

This is the fast path from nothing to a verified harness configuration: install, author the shared profile, materialize one tool's native config, confirm it, and make your first edit. Every command is real and copy-paste runnable, and each step shows what a clean run prints. The install itself lands in under two minutes; editing the profile is the only part that takes as long as you want it to.

By the end you will have a working harness configuration generated from a profile you wrote — and you will know the one command that pushes a profile change back out to one tool or to all of them.

Want the slow, narrated version?

The getting-started tutorial walks the same ground with more explanation of each step and why it matters. This page is the terse, output-first tour.

You will use Claude Code as the example harness — it is the installer's default. Swap the adapter name at any step to target a different tool; the harness list has every supported name.

1. Install Apothem

Apothem ships as a self-contained runtime — the engine runs straight from its source tree with vendored dependencies. One command fetches the source, places the engine, and materializes your first harness. It verifies the signed release first, so import the maintainer signing key once before the first install and check that the fingerprint reads 5C89 98F9 F241 7204 45D3 F28B 7039 6FED 9C63 4163:

macOS · Linux · WSL2 · BSD — import the key once
curl -fsSL https://github.com/ahmed-g-gad.gpg | gpg --import
gpg --fingerprint 70396FED9C634163
Windows · PowerShell — import the key once
& "$env:ProgramFiles\Git\bin\bash.exe" -c 'curl -fsSL https://github.com/ahmed-g-gad.gpg | gpg --import && gpg --fingerprint 70396FED9C634163'

Then run the installer:

macOS · Linux · WSL2
curl -fsSL https://apothem.ahmedgad.com/install.sh | bash
Windows · PowerShell 5.1+
irm https://apothem.ahmedgad.com/install.ps1 | iex

The installer requires a system Python 3.10+, plus git and gpg for the network form. It checks the prerequisites and places the engine under ~/.apothem. When click or rich is missing, it installs the package with your confirmation or on --yes (-Yes on PowerShell) or APOTHEM_AUTO_INSTALL_DEPS=1, and otherwise stops with the pip command to run (see Prerequisites at a glance). On completion it prints a next-steps banner; on POSIX, when the shim's directory is already on PATH, the banner looks like this:

Installation complete.

The 'apothem' command is on your PATH.

Recommended first step — the guided setup (profile -> preview -> install):

  apothem quickstart

First run without a profile

If you have no profile yet, the installer copies the example profile to ~/.config/apothem/profile.yaml and carries on: it materializes your first harness and verifies it in the same run. The example's identity fields are placeholders, so the install prints a note. Make the profile yours in Step 2, then apply it with apothem update --harness <name> as in Step 5.

The `apothem` command

The installer writes an apothem shim into $HOME/.local/bin (POSIX) or %LOCALAPPDATA%\Microsoft\WindowsApps (Windows) and never edits your PATH. Once that directory is on PATH, you run the engine directly as apothem <command>. If it is not yet on PATH, the banner prints a self-contained fallback — PYTHONPATH="$HOME/.apothem/src" python3 -m apothem <command> — that needs no shim; prepend the exact prefix your banner printed to each command.

The installation guide covers the other install paths — the Claude Code plugin (/plugin marketplace add ahmed-g-gad/apothem then /plugin install apothem@apothem); the VS Code-family and other tool-native extensions; and the on-demand npx form (npx @ahmed-g-gad/apothem <command>) — alongside the environment-variable options.

2. Create the shared profile

apothem profile init writes the smallest schema-valid profile to ~/.config/apothem/profile.yaml. If a profile is already there, as when the installer in Step 1 copied the example, init stops with an error and leaves the file unchanged; pass --force to overwrite it, or keep the file and edit it as shown below. Pass --profile PATH when you keep a project or CI-specific profile elsewhere.

apothem profile init
apothem profile show --json

The scaffold uses fake placeholder identity data and is safe to edit before you install any harness output. show --json reads it back and reports the validated profile with every default filled in, starting with schema_version. The command prints it on one line; it is expanded here:

{
  "schema_version": 1,
  "identity": {
    "name": "Example User",
    "role": "senior software engineer",
    "email": "[email protected]",
    "github": "example-user"
  },
  "preferences": {
    "language": "python",
    "style": "concise"
  },
  "rules": [],
  "seriousness": "PERSONAL_USE",
  "enforcement": {
    "sprints": false,
    "agent_teams": false,
    "multitasking": false,
    "continuous_execution": false,
    "learning_loop": false
  },
  "mcp_servers": {},
  "agent_mcp_servers": {},
  "harnesses": {},
  "exclude_harnesses": [],
  "workspace": {
    "directory_name": ".apothem",
    "scope": "project-local"
  }
}

This is also where a malformed edit surfaces — if the YAML is invalid, show reports it here, before any harness config is written. Make the profile yours with apothem profile edit (opens it in your editor) or set a single key in place:

apothem profile set identity.name "Your Name"

3. Install harness adapters

Materialize the adapter for your primary harness. This reads your profile and writes that tool's native configuration:

apothem install --harness claude-code
✓ Installed claude-code -> /home/you/.claude/settings.json

Project-scope adapters write their rules file inside a project, so they need a --project PATH; seven of them also write skills and shared rules into folders in your home directory, and --project does not change where those go. Preview any install without writing files using --dry-run:

apothem install --harness cursor --project . --dry-run
apothem install --harness cursor --project .

Install the whole registry-backed set at once with --harness all. Because that selection writes both project-scope and user-scope files, the command prints the concrete targets grouped by location. In an interactive terminal it asks before writing outside the project root. A run with no terminal, a run given --yes, or a run with --format json writes without asking; --dry-run writes nothing. Run the full set with:

apothem install --harness all --project .

See the full harness list for every supported name, and the install reference for the complete option set.

4. Verify

Materializing is only half the job — verify confirms the harness's expected config files landed and are valid:

apothem verify --harness claude-code
✓ claude-code is verified at /home/you/.claude/settings.json

verify exits non-zero if a managed target is missing, a managed file is empty, or a JSON or YAML config does not parse. Add --profile PATH to also fail when an installed file differs from that profile, which makes verify a drift check; without it, a stale config still verifies. The non-zero exit lets verify serve as a gate in a setup script. For a whole-machine health check across every registered adapter, run:

apothem doctor

doctor checks every installed harness: it must verify, and each hook command its install registered must start. A harness you have not installed is listed but is not a failure, so doctor exits 0 when no check fails, even if only one harness is installed.

5. Your first run

Open the harness you just configured — Claude Code, in this example — and start a session in any project. The profile you set up in Step 2 is now part of that tool's behavior. That is the working first run: one profile, shaping a real session.

When you change the profile later, re-apply it without re-installing:

apothem update --harness claude-code

Name another adapter to re-apply the profile to that tool (add --project PATH for a project-scope adapter), or pass --harness all --project . to re-apply it to every supported harness.

Next steps

On this page