Catalog PyPI
Back to packageRELEASE DETAILS

1.0.0

PyPI

agh

Self-hosted guidance distribution for coding agents

agent-toolsai-agentsclicoding-agentsdeveloper-toolsfastapiself-hosted
Published6 Aug 2026
Direct dependencies4
Transitive dependenciesNot calculated

README

Version 1.0.0 documentation

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

CommandWhat it does
agh login --email EMAIL --token TOKENValidate credentials for the configured instance.
agh whoamiShow the authenticated user.
agh logoutClear 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 NAMEDescribe one registry skill.
agh skill update NAMEUpdate skill access or tags.
agh skill archive NAME / disable NAME / enable NAMEManage the skill lifecycle.
agh skill listList locally installed global skills.
agh skill install NAMEInstall a registry skill into the selected target.
agh skill upgrade [NAME]Upgrade installed global skills to the newest release.
agh skill uninstall NAMEUninstall an installed global skill.
agh target [set agents|claude] [clear]Manage the local or global target.
agh linkLink 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/
PieceWhat it does
SkillsRegistry units with immutable releases. A release is an expanded skill directory.
ProjectsOne git repository plus the exact skill releases it should use.
WorkspacesA 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
SettingDefault
AGH_DATA_DIR/data in the image, .agh-data locally
HTTP port8912
Bootstrap owner emailAGH_BOOTSTRAP_OWNER_EMAIL
Health endpointGET /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:

PathPurpose
/data/agh.sqlite3SQLite 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_tokenFirst 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:

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 4

Native requirements
4 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
fastapi
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.11",
  "evaluation": "NOT_EVALUATED"
}
fastapi>=0.110runtime
pyyaml
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.11",
  "evaluation": "NOT_EVALUATED"
}
pyyaml>=6.0runtime
typer
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.11",
  "evaluation": "NOT_EVALUATED"
}
typer>=0.12runtime
uvicorn
Environment
{
  "extras": "standard",
  "marker": null,
  "requires_python": ">=3.11",
  "evaluation": "NOT_EVALUATED"
}
uvicorn[standard]>=0.27runtime

Distribution files

2 collected
agh-1.0.0-py3-none-any.whl

bdist_wheel · 97.59 KB · Python py3

Source file
agh-1.0.0.tar.gz

sdist · 382.95 KB · Python source

Source file

Repository

PENDING
giulianotesta7/agentguidancehub

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 21 Oct, 09:04 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:79a50ec67e280534addac19f8097251519f5337fe1abd9f6599773ff2d6860e5

Other collected versions

View all collected versions →