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:

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

agh-1.0.0.tar.gz (392.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

agh-1.0.0-py3-none-any.whl (99.9 kB view details)

Uploaded Python 3

File details

Details for the file agh-1.0.0.tar.gz.

File metadata

  • Download URL: agh-1.0.0.tar.gz
  • Upload date:
  • Size: 392.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for agh-1.0.0.tar.gz
Algorithm Hash digest
SHA256 b9ba4fae2807ba945953cd7eb89fe95c67e6a1afecdcddb23d992dad0be18645
MD5 e152da95c9d4fca82a31cd527a2d93d6
BLAKE2b-256 71251ae419bedad2c942c73d8a8ce127442d84aa84ec16a0f54a24da852f914f

See more details on using hashes here.

Provenance

The following attestation bundles were made for agh-1.0.0.tar.gz:

Publisher: release.yml on giulianotesta7/agh

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file agh-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: agh-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 99.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for agh-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d1cf38563b839a795a0a804d498425b84b453ca56f07c982cdba39b8bdf4ad09
MD5 07cae6000e5dbff0107263622209ca78
BLAKE2b-256 7ae31a6a9d25b1446e3ce6b1f513ff8084632974a860a5e9867f717144c48bbf

See more details on using hashes here.

Provenance

The following attestation bundles were made for agh-1.0.0-py3-none-any.whl:

Publisher: release.yml on giulianotesta7/agh

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 files

0.7.0

2 files

0.6.0

2 files

0.5.3

2 files

0.5.2

2 files

0.5.1

2 files

0.5.0

2 files

0.4.0

2 files

0.3.5

2 files

0.3.4

2 files

0.3.3

2 files

0.3.2

2 files

0.3.1

2 files

0.3.0

2 files

0.2.1

2 files

0.2.0

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page