Skip to main content

Agent Guidance Hub (AGH)

Self-hosted guidance distribution for coding agents.

PyPI GHCR CI Release

install · quick start · how it works · server ops · development · español

Español


AGH workspace pull demo

AGH gives teams one place to publish, version, assign, and pull reusable agent skills and project instructions into their repos.

  • Centralize guidance: publish shared skills and project instructions once.
  • Version every change: skill releases are immutable and assigned to projects exactly.
  • Keep repos deterministic: each workspace records .agh/lock.toml and applies only the selected target.

Install

Linux / macOS:

brew install giulianotesta7/tap/agh

Windows (Scoop):

scoop bucket add agh https://github.com/giulianotesta7/scoop-agh
scoop install agh

or with the install script:

curl -fsSL https://raw.githubusercontent.com/giulianotesta7/AgentGuidanceHub/main/scripts/install.sh | sh

Check the CLI:

agh --help

Run the server with the published Docker image:

docker compose up -d
curl http://127.0.0.1:8912/api/v1/health

The default Compose image is:

ghcr.io/giulianotesta7/agent-guidance-hub:${AGH_IMAGE_TAG:-latest}

Pin production deployments with a release tag:

AGH_IMAGE_TAG=0.2.0 docker compose up -d

Quick start

AGH uses a clean-break schema: provision a fresh empty data volume and the server initializes it on first start — it never migrates or reuses package-era databases. See Clean break.

Read the first owner token on the host running AGH:

docker run --rm -v agh-data:/data busybox \
  cat /data/secrets/initial_owner_token

Configure the instance URL once, then log in from your machine:

agh config set <instance-url>
agh login --email owner@example.com --token "<initial-owner-token>"

agh config shows the configured instance URL; agh config clear removes it, and agh logout clears stored credentials.

Create a project with the repo URL developers use in git remotes:

agh project create "Agent Guidance Hub" \
  --git-url https://github.com/giulianotesta7/AgentGuidanceHub.git

Work from a linked repo:

agh link
agh target set agents # or: agh target set claude
agh pull --dry-run
agh pull
agh target

agh target shows the selected target for this workspace; agh target clear removes the workspace selection, and --global manages the global default.

CLI reference

Command What it does
agh login --email EMAIL --token TOKEN Validate credentials for the configured instance.
agh whoami Show the authenticated user.
agh logout Clear stored credentials.
agh config [set URL] [clear] Show, set, or clear the instance URL.
agh user ... Manage users: list, create, describe, update, activate, deactivate, token rotate.
agh project ... Manage projects: list, create, describe, update, activate, deactivate, member add/list/remove.
agh project skill ... Manage exact project skill assignments: list, add, remove, upgrade.
agh project instructions ... Manage the canonical project instructions: describe, upload, clear.
agh skill publish [PATH] Publish a skill directory or .zip (default: .).
agh skill search [QUERY] Search the registry skill catalog.
agh skill describe NAME Describe one registry skill.
agh skill update NAME Update skill access or tags.
agh skill archive NAME / disable NAME / enable NAME Manage the skill lifecycle.
agh skill list List locally installed global skills.
agh skill install NAME Install a registry skill into the selected target.
agh skill upgrade [NAME] Upgrade installed global skills to the newest release.
agh skill uninstall NAME Uninstall an installed global skill.
agh target [set agents|claude] [clear] Manage the local or global target.
agh link Link this git repository to its matching AGH project.
agh pull [--dry-run] [--force] Pull assigned project guidance into the linked repository.

How AGH works

Skill author ── publish ──▶ AGH server ── assign ──▶ Project
                             │                         │
                             ▼                         ▼
                        SQLite + /data          Repo workspace
                                                       │
                                                       ├─ AGENTS.md + .agents/skills/
                                                       └─ CLAUDE.md + .claude/skills/
Piece What it does
Skills Registry units with immutable releases. A release is an expanded skill directory.
Projects One git repository plus the exact skill releases it should use.
Workspaces A local repo linked with agh link, one selected target, and a committed lockfile.
Skill directory structure

A skill is a directory with a root SKILL.md and optional files under references/, scripts/, or assets/:

reviewer/
├── SKILL.md
├── references/
│   └── guide.md
├── scripts/
│   └── check.sh
└── assets/

SKILL.md follows the Agent Skills format: a name, a description, and a required metadata.version. Versions are opaque strings, never parsed or compared. Immutable releases: every publication adds a new release; existing releases never change. Publish a new version for changes.

Server operations

The server listens on port 8912; the health endpoint is:

curl http://127.0.0.1:8912/api/v1/health
Setting Default
AGH_DATA_DIR /data in the image, .agh-data locally
HTTP port 8912
Bootstrap owner email AGH_BOOTSTRAP_OWNER_EMAIL
Health endpoint GET /api/v1/health

The first owner token is written once to /data/secrets/initial_owner_token — store it, AGH will not show it again. The server stores token hashes, not plaintext tokens.

Runtime state lives under AGH_DATA_DIR:

Path Purpose
/data/agh.sqlite3 SQLite database.
/data/skills/ Expanded skill release trees (/data/skills/releases/<release-id>/).
/data/staging/ Transient publication staging (/data/staging/publications/<nonce>/).
/data/secrets/initial_owner_token First owner token, created once.

The CLI stores login credentials locally; agh config shows only the instance URL, never the token.

A database created by the previous package-era schema fails closed, and the file is preserved untouched for diagnosis:

INCOMPATIBLE_SCHEMA: incompatible schema at <path>; use a fresh empty AGH_DATA_DIR

Clean break

AGH uses a clean-break schema with no migration path. The server initializes the database only when it is empty or absent; it does not migrate or reuse package-era data. To upgrade, provision a fresh empty AGH_DATA_DIR and re-create users, projects, and skill releases. Skill releases are immutable, so republishing an unchanged skill directory produces the same release checksum. An incompatible database fails closed with INCOMPATIBLE_SCHEMA — see Server operations.

Development

uv sync
uv run pytest
uv run uvicorn agh.server.app:app --host 0.0.0.0 --port 8912

Local data uses .agh-data/ by default.

Contributing and security:

Metadata

Release files for agh 1.0.0

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

Source distribution (sdist)

Source distribution for agh 1.0.0
File Size Uploaded
agh-1.0.0.tar.gz 392.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for agh 1.0.0
File Interpreter ABI Platform
agh-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 492.1 kB

Release files / agh-1.0.0.tar.gz

Download URL agh-1.0.0.tar.gz
Size 392.1 kB
Tags Source
SHA-256 checksum
How to use checksums
b9ba4fae2807ba945953cd7eb89fe95c67e6a1afecdcddb23d992dad0be18645
BLAKE2b-256 checksum
How to use checksums
71251ae419bedad2c942c73d8a8ce127442d84aa84ec16a0f54a24da852f914f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 6, 2026.

Transparency log

Release files / agh-1.0.0-py3-none-any.whl

Download URL agh-1.0.0-py3-none-any.whl
Size 99.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d1cf38563b839a795a0a804d498425b84b453ca56f07c982cdba39b8bdf4ad09
BLAKE2b-256 checksum
How to use checksums
7ae31a6a9d25b1446e3ce6b1f513ff8084632974a860a5e9867f717144c48bbf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 6, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

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