Skip to main content

Hoja — keep every agent task on the same page

PyPI Python versions Downloads License: MIT Documentation check Dependency audit

Hoja

One self-hosted place where people and agents plan, assign and review work. Hoja is a workspace for issues, projects, cycles and teams. Keep your editor, terminal and harness; reach the same work through the browser app, the hoja CLI, a Linear-compatible GraphQL API and a read-only MCP server.

Self-host it under the MIT license, or use Hoja Cloud at $15 per organization each month. Neither path is priced per seat.

Why teams use it

  • One record for people and agents. A person triages in the browser, an agent updates the same issue from a shell, and everyone sees one current state.
  • Your harness stays yours. Hoja is a shared work record, not an agent runtime. It does not run, host or watch your agents.
  • Self-hosted and offline-first. SQLite for a laptop or a single box, PostgreSQL for a team server. No Linear Cloud account required.
  • Scriptable by default. Every CLI response is a validated model, and --output json / --output ids are built for scripts, CI and agents.

Plan in Hoja. Build in your existing harness.

Three ways in

Surface What it gives you
Workspace Inbox, My issues, Projects, Cycles, Teams and saved Views in the browser. Create, assign, discuss and review issues; group them into projects; use cycles as time-bounded reviews of what shipped, what is open and what was canceled.
CLI me, auth, init, team, issue, project, cycle, comment, label, memory, raw and update — enough to drive real work from a terminal or a script.
API A GraphQL endpoint with Linear-compatible names. Point your own tools at HOJA_API_URL with a workspace token.
Agents An optional stdio MCP server with one guide tool, seven read-only resources and six workflow prompts. It has no mutation tools; changes go through the CLI or API.

Install the CLI

uv tool install hoja-cli     # or: python -m pip install hoja-cli
hoja --version

The PyPI distribution is hoja-cli and it installs the commands hoja, hoja-serve and the optional hoja-mcp. The distribution carries the -cli suffix because the hoja project on PyPI is unrelated software: install hoja-cli, then run hoja.

Point it at a workspace with HOJA_API_URL and HOJA_TOKEN, or configure an account once in ~/.config/hoja/config.toml:

[accounts.local]
base_url = "http://127.0.0.1:8787/graphql"
token_env = "HOJA_TOKEN"

[defaults]
default_account = "local"
hoja me
hoja issue list --assignee me
hoja issue create --team ENG --title "Review onboarding flow"
hoja -o json issue list --state Todo
hoja <command> --help          # current flags for every command

HOJA_TOKEN and HOJA_API_URL are canonical. The former LINEAR_TOKEN and LINEAR_API_URL names are still read as deprecated aliases, and the GraphQL type names match Linear, so compatible clients can target Hoja without a rewrite.

Run the workspace

Docker Desktop, or Docker Engine with the Compose plugin, builds the web app and starts it against PostgreSQL. The first build pulls base images and frontend and Python dependencies, so it needs internet access.

  1. Create .env in the repository root. POSTGRES_PASSWORD is required; Compose refuses to start without it.

    POSTGRES_PASSWORD=replace-with-a-long-random-password
    

    Keep this file private and do not commit it. Use letters and numbers: Compose interpolates the password into the PostgreSQL connection URL. If port 8787 is taken, add HOJA_PORT=8788.

  2. Build and start:

    docker compose up --build -d
    

    Compose waits for PostgreSQL to pass its health check, then the app applies database migrations before serving.

  3. Open http://localhost:8787. A fresh database starts the setup wizard: language, your admin profile and password, then your workspace and first team. Existing databases go straight to sign-in. curl -i http://localhost:8787/health reports liveness and curl -i http://localhost:8787/ready reports schema readiness.

  4. The wizard can add teammates. Hoja creates each member and hands you a single-use invite link valid for 72 hours; it does not send invitation email. The finish step shows the admin API key once for CLI setup. Browser sign-in uses an HttpOnly cookie.

SQLite, no Docker

python -m pip install 'hoja-cli[server]'
hoja-serve seed --tenant local --org "Local Workspace" \
  --org-key local --team-key ENG --email user@example.test
hoja-serve serve --tenant local --host 127.0.0.1 --port 8787

hoja-serve seed prints the token to export as HOJA_TOKEN.

Operating it

  • docker compose down stops the stack and keeps data in the hoja-postgres volume; docker compose up -d brings it back.
  • docker compose down -v deletes the volume and every record in it. It cannot be undone without a backup.
  • If the app is not ready, read docker compose logs app db before touching the volume. The container runs migrations on start.
  • If docker compose is not a command, enable the Compose v2 plugin and check it with docker compose version. This guide does not use legacy docker-compose.

Connect an agent

python -m pip install 'hoja-cli[mcp]'
which hoja-mcp

Register hoja-mcp as a stdio server in your client, passing the token through that client's environment. Use an absolute path when the client does not inherit your shell PATH:

{
  "mcpServers": {
    "hoja": {
      "command": "/absolute/path/to/hoja-mcp",
      "env": { "HOJA_TOKEN": "<workspace-token>" }
    }
  }
}

The server reads the same account configuration as the CLI. It exposes one guide tool, seven read-only resources and six workflow prompts, and it deliberately has no mutation tools.

The repository also ships an agent skill:

bash skills/install.sh --claude-only     # or --swarm-only
bash skills/install.sh --copy            # copy instead of symlink

Where Hoja stops

Honest boundaries keep the product predictable:

  • Hoja does not run or monitor agents. Your harness does that; Hoja holds the work record they read and update.
  • The MCP server is read-only. Mutations belong to the CLI and the API, where a token and its permissions are explicit.
  • No prebuilt GitHub, Slack or meeting sync connectors are included. Use the CLI or API for your own integrations.
  • Linear compatibility covers the GraphQL surface Hoja implements, not every Linear feature. Unsupported screens say so instead of pretending to work.
  • Saved Views live in the browser, not in the shared workspace.

Development

Python 3.10 or newer.

uv sync --extra dev --extra server
uv run pytest

cd frontend && npm ci && npm run build
  • bash scripts/e2e-local-backend.sh runs the backend integration pass against a disposable local database.
  • bash scripts/e2e-test.sh runs the live CLI matrix and needs HOJA_TOKEN, HOJA_TEST_TEAM and HOJA_TEST_ISSUE.
  • python3 scripts/check_docs.py is the documentation check CI enforces.

Contributor and agent operations are in AGENTS.md.

Documentation

  • Design — product and architecture.
  • Deployment — databases, migrations, readiness, tokens and release publishing.
  • Remote MCP — the experimental OAuth-protected remote server; the stdio server is covered above.
  • Cycle metrics and meetings.
  • Changelog — release-level behavior changes.

License

MIT. See LICENSE.

Metadata

Release files for hoja-cli 0.21.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for hoja-cli 0.21.5
File Size Uploaded Provenance Actions
hoja_cli-0.21.5.tar.gz 4.6 MB Without provenance Details for hoja_cli-0.21.5.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for hoja-cli 0.21.5
File Interpreter ABI Platform Actions
hoja_cli-0.21.5-py3-none-any.whl Python 3 none any Details for hoja_cli-0.21.5-py3-none-any.whl

Total release size: 4.9 MB

Release files / hoja_cli-0.21.5.tar.gz

Download URL hoja_cli-0.21.5.tar.gz
Size 4.6 MB
Tags Source
SHA-256 checksum
How to use checksums
4084eb21d6f72f4c1b3449e5ecf3d866b02dc3d73779c39f66a4546bee7d1437
BLAKE2b-256 checksum
How to use checksums
4551d7376cb34fb71c7131d8c272a2665817bbc9e1f15a5d52cf752fa00de1e3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / hoja_cli-0.21.5-py3-none-any.whl

Download URL hoja_cli-0.21.5-py3-none-any.whl
Size 308.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
599eaec91ade7aab531a71ca87885870bb5ef7dddb7e4b33429d9ba425d470a3
BLAKE2b-256 checksum
How to use checksums
8d0d288b167fc460d8a3e6b050fb7e5d79c153597d777df92f040744315a3b3d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Security for hoja-cli 0.21.5

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.21.5 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page