Agent Guidance Hub (AGH)
Self-hosted guidance distribution for coding agents.
install · quick start · how it works · server ops · development · español
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.tomland 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b9ba4fae2807ba945953cd7eb89fe95c67e6a1afecdcddb23d992dad0be18645
|
|
| MD5 |
e152da95c9d4fca82a31cd527a2d93d6
|
|
| BLAKE2b-256 |
71251ae419bedad2c942c73d8a8ce127442d84aa84ec16a0f54a24da852f914f
|
Provenance
The following attestation bundles were made for agh-1.0.0.tar.gz:
Publisher:
release.yml on giulianotesta7/agh
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agh-1.0.0.tar.gz -
Subject digest:
b9ba4fae2807ba945953cd7eb89fe95c67e6a1afecdcddb23d992dad0be18645 - Sigstore transparency entry: 2353015826
- Sigstore integration time:
-
Permalink:
giulianotesta7/agh@5f43c1e51c7315dda375904ffcecf1cf7e8d2f73 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/giulianotesta7
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@5f43c1e51c7315dda375904ffcecf1cf7e8d2f73 -
Trigger Event:
push
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d1cf38563b839a795a0a804d498425b84b453ca56f07c982cdba39b8bdf4ad09
|
|
| MD5 |
07cae6000e5dbff0107263622209ca78
|
|
| BLAKE2b-256 |
7ae31a6a9d25b1446e3ce6b1f513ff8084632974a860a5e9867f717144c48bbf
|
Provenance
The following attestation bundles were made for agh-1.0.0-py3-none-any.whl:
Publisher:
release.yml on giulianotesta7/agh
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agh-1.0.0-py3-none-any.whl -
Subject digest:
d1cf38563b839a795a0a804d498425b84b453ca56f07c982cdba39b8bdf4ad09 - Sigstore transparency entry: 2353015972
- Sigstore integration time:
-
Permalink:
giulianotesta7/agh@5f43c1e51c7315dda375904ffcecf1cf7e8d2f73 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/giulianotesta7
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@5f43c1e51c7315dda375904ffcecf1cf7e8d2f73 -
Trigger Event:
push
-
Statement type: