One contemplative practice, every major open-access museum and astronomy API.
art-goat is an OmniMuseum aggregator for a daily contemplative art practice. Eight open-access sources — Art Institute of Chicago, NASA APOD, Metropolitan Museum of Art, Cleveland Museum of Art, Rijksmuseum, Smithsonian Open Access, Te Papa Tongarewa, and the National Palace Museum Taiwan — collapse into one local SQLite corpus. Sit with one piece for a fixed period, capture your reflection, and let an opinionated today pick rotate against your recent practice. The contemplative spine — sit, today, path, journal — is the soul; federated browse, similar, compare, and artist --arc ride alongside as substrate.
Where similar tools wrap one museum, art-goat treats the eight as a single curated corpus: today rotates across sources, similar and artist --arc step laterally across them, and path --theme walks a theme through the whole federation. The point isn't completeness of any one museum's catalog; it's a daily practice grounded in real, public-domain collections.
Created by @justinwfu (justinwfu).
| Source | Slug | Auth | License |
|---|---|---|---|
| Art Institute of Chicago | aic |
none | CC0 / CC-By |
| NASA Astronomy Picture of the Day | apod |
DEMO_KEY ok; free key for higher rate | Public domain (NASA) |
| Metropolitan Museum of Art | met |
none | CC0 (public domain items) |
| Cleveland Museum of Art | cleveland |
none | CC0 |
| Harvard Art Museums | harvard |
required (HARVARD_API_KEY or ART_GOAT_HARVARD_KEY) |
Mixed; public-domain subset only |
| Smithsonian Open Access | smithsonian |
DEMO_KEY ok via api.data.gov; better with your own key (SMITHSONIAN_API_KEY or ART_GOAT_API_KEY) |
CC0 |
| National Palace Museum Taiwan | npmtw |
none (curated static subset of ~9 famous works pending a public API) | Public domain |
Removed 2026-05-22: Rijksmuseum and Te Papa Tongarewa adapters were removed — Rijksmuseum's documented signup URL 404s and its keyless alternatives are either an XML rewrite (OAI-PMH) or 100× the request count (LOD identifiers); Te Papa's adapter dropped 100% of records past the search-query fix, sending the sync into a runaway pagination loop. Restore from git history if reviving either.
Pull all of them with art-goat-pp-cli sources sync, or scope to one with --source <slug>. Sync is incremental — re-running it updates the local corpus rather than rebuilding it.
- NPM Taiwan live API — currently shipped as a small static-curated subset because the museum's open-data portal does not yet expose a queryable JSON endpoint. Will be promoted to a live source once one is published.
The recommended path installs both the art-goat-pp-cli binary and the pp-art-goat agent skill (Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, and other agents supported by the upstream skills CLI) in one shot:
npx -y @mvanhorn/printing-press-library install art-goatFor CLI only (no skill):
npx -y @mvanhorn/printing-press-library install art-goat --cli-onlyFor skill only — installs the skill into the same agents as the default command above, but skips the CLI binary (use this to update or reinstall just the skill):
npx -y @mvanhorn/printing-press-library install art-goat --skill-onlyTo constrain the skill install to one or more specific agents (repeatable — agent names match the skills CLI):
npx -y @mvanhorn/printing-press-library install art-goat --agent claude-code
npx -y @mvanhorn/printing-press-library install art-goat --agent claude-code --agent codexIf npx isn't available (no Node, offline), install the CLI directly via Go (requires Go 1.26.4 or newer):
go install github.com/mvanhorn/printing-press-library/library/media-and-entertainment/art-goat/cmd/art-goat-pp-cli@latestThis installs the CLI only — no skill.
Download a pre-built binary for your platform from the latest release. On macOS, clear the Gatekeeper quarantine: xattr -d com.apple.quarantine <binary>. On Unix, mark it executable: chmod +x <binary>.
Install the CLI binary first. The installer writes binaries to a per-user managed bin directory by default: $HOME/.local/bin on macOS/Linux and %LOCALAPPDATA%\Programs\PrintingPress\bin on Windows.
npx -y @mvanhorn/printing-press-library install art-goat --cli-onlyThen install the focused Hermes skill.
From the Hermes CLI:
hermes skills install mvanhorn/printing-press-library/cli-skills/pp-art-goat --forceInside a Hermes chat session:
/skills install mvanhorn/printing-press-library/cli-skills/pp-art-goat --forceRestart the Hermes session or gateway if the newly installed skill is not visible immediately.
Install both the CLI binary and the focused OpenClaw skill. The installer defaults binaries to a per-user bin directory ($HOME/.local/bin on macOS/Linux, %LOCALAPPDATA%\Programs\PrintingPress\bin on Windows):
npx -y @mvanhorn/printing-press-library install art-goat --agent openclawRestart the OpenClaw session or gateway if the newly installed skill is not visible immediately.
This CLI ships an MCPB bundle — Claude Desktop's standard format for one-click MCP extension installs (no JSON config required).
To install:
- Download the
.mcpbfor your platform from the latest release. - Double-click the
.mcpbfile. Claude Desktop opens and walks you through the install. - Fill in
ART_GOAT_API_KEYwhen Claude Desktop prompts you.
Requires Claude Desktop 1.0.0 or later. Pre-built bundles ship for macOS Apple Silicon (darwin-arm64) and Windows (amd64, arm64); for other platforms, use the manual config below.
Manual JSON config (advanced)
If you can't use the MCPB bundle (older Claude Desktop, unsupported platform), install the MCP binary and configure it manually.
Install the MCP binary from this CLI's published public-library entry or pre-built release.
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"art-goat": {
"command": "art-goat-pp-mcp",
"env": {
"ART_GOAT_API_KEY": "<your-key>"
}
}
}
}Anonymous out of the box. AIC, Met, Cleveland, and NPM Taiwan need no key. NASA APOD and Smithsonian Open Access work via DEMO_KEY; supply your own key (NASA_API_KEY, SMITHSONIAN_API_KEY, or the umbrella ART_GOAT_API_KEY) to lift the 30 req/hr DEMO_KEY ceiling. Rijksmuseum and Te Papa require a free signup key — see the source table above. The CLI surfaces the exact env var name in its error message when a required key is missing.
# Populate the local corpus across all configured sources (AIC, APOD, Met, Cleveland, Harvard, Smithsonian, NPM Taiwan). Anonymous; no setup wall.
art-goat-pp-cli sources sync
# Today's curated piece — opinionated against your practice, with a one-line 'why this today'.
art-goat-pp-cli today
# Sit with a random piece. Image opens in your browser; reflection captured in terminal.
art-goat-pp-cli sit
# See breadth, variety, region coverage, mood drift. Streak available at the bottom if you want to know.
art-goat-pp-cli journal stats
# Step laterally from one piece to another across the corpus.
art-goat-pp-cli similar aic:24645 --json --select source,title,creator
These capabilities aren't available in any other tool for this API.
-
sit— Sit with one piece of art for a fixed period. Opens the image in your browser, shows the curator's description, runs a quiet timer, and captures your reflection in the journal.Use this when you want to spend deliberate time with one piece instead of skimming a feed. The reflection is persisted locally for later search.
art-goat-pp-cli sit --duration 10 --dry-run
-
today— Today's curated piece, chosen using anti-repeat against your sits and journal-aware diversity against your recent medium and culture choices. Includes a one-line 'why this today'.Use today as the default daily entry point. It avoids showing you what you already sat with and rotates against your recent medium and region choices.
art-goat-pp-cli today
-
journal stats— Practice statistics emphasising source breadth, medium variety, region coverage, and mood drift, with streak available at the bottom labeled 'if you want to know'.Use this to see breadth instead of streak length. Practice quality is captured as how widely you've ranged, not how many days in a row you've sat.
art-goat-pp-cli journal stats
-
journal search— FTS5 over your reflection history. Surfaces every past sit whose text matches the query.Use this to find prior reflections by token. Years of practice become queryable.
art-goat-pp-cli journal search "solitude"
Workflows that combine several commands for a complete practice loop.
art-goat-pp-cli sources sync && art-goat-pp-cli todayPopulate the local corpus across all eight sources, then enter today's curated piece in a single command.
art-goat-pp-cli gaps --limit 5
art-goat-pp-cli coverage --json --select sources_total,sources_satgaps surfaces the regions and mediums in your corpus you've never sat with; coverage quantifies practice breadth as a percentage.
art-goat-pp-cli similar met:436532 --json --select source,title,creator
art-goat-pp-cli artist "hokusai" --arcUse similar to step laterally from a seed work, or artist --arc to render a creator's stylistic periods across sources as a short career narrative.
art-goat-pp-cli path --theme "impermanence"
art-goat-pp-cli path --theme "solitude" --steps 7path runs the theme as an FTS5 search across the federated corpus and returns a diversity-ordered walk — no two consecutive steps from the same source/region/medium when the corpus allows.
art-goat-pp-cli today --mode bridge-from-lastReads your last sit's mood and picks toward the opposite half of the scale. Cultivates rotation of energy across days, not just visuals.
art-goat-pp-cli journal revisit --age 1y
art-goat-pp-cli journal revisit --age 6mo --json
art-goat-pp-cli journal compare 12 47revisit surfaces the sit closest to today - <age> (within ±7 days). compare renders two sits side-by-side with their works and reflections — a longitudinal log instead of a flat list.
ART_GOAT_JOURNAL_PATH=~/Obsidian/art-goat art-goat-pp-cli journal exportMirror the SQLite journal to per-sit Markdown files. SQLite stays canonical; the Markdown is your tool-agnostic backup.
Run art-goat-pp-cli --help for the full command reference and flag list.
Manage planetary
art-goat-pp-cli planetary apod-get- Fetch the Astronomy Picture of the Day for a given date or date range. Anonymous via DEMO_KEY.
# Human-readable table (default in terminal, JSON when piped)
art-goat-pp-cli planetary
# JSON for scripting and agents
art-goat-pp-cli planetary --json
# Filter to specific fields
art-goat-pp-cli planetary --json --select id,name,status
# Dry run — show the request without sending
art-goat-pp-cli planetary --dry-run
# Agent mode — JSON + compact + no prompts in one flag
art-goat-pp-cli planetary --agentThis CLI is designed for AI agent consumption:
- Non-interactive - never prompts, every input is a flag
- Pipeable -
--jsonoutput to stdout, errors to stderr - Filterable -
--select id,namereturns only fields you need - Previewable -
--dry-runshows the request without sending - Read-only by default - this CLI does not create, update, delete, publish, send, or mutate remote resources
- Offline-friendly - sync/search commands can use the local SQLite store when available
- Agent-safe by default - no colors or formatting unless
--human-friendlyis set
Exit codes: 0 success, 2 usage error, 3 not found, 4 auth error, 5 API error, 7 rate limited, 10 config error.
art-goat-pp-cli doctorVerifies configuration, credentials, and connectivity to the API.
Config file: ~/.config/art-goat-pp-cli/config.toml
Static request headers can be configured under headers; per-command header overrides take precedence.
Environment variables:
| Name | Kind | Required | Description |
|---|---|---|---|
ART_GOAT_API_KEY |
per_call | Yes | Set to your API credential. |
NASA_API_KEY |
per_call | Yes | Set to your API credential. |
Authentication errors (exit code 4)
- Run
art-goat-pp-cli doctorto check credentials - Verify the environment variable is set:
echo $ART_GOAT_API_KEYNot found errors (exit code 3) - Check the resource ID is correct
- Run the
listcommand to see available items
- sit opens nothing in browser — Run with --no-image to fall back to description mode, or check that $BROWSER is set on your platform.
- NASA APOD rate limit hit — Run
art-goat-pp-cli auth set apodand paste a free key from https://api.nasa.gov/. The DEMO_KEY ships with a ~30/hour cap. - Empty results from search or browse — Run
art-goat-pp-cli sources syncfirst; novel commands read from the local store, whichsources syncpopulates. - Journal entries not showing in Obsidian — Set ART_GOAT_JOURNAL_PATH to your Obsidian vault path before journal write; the Markdown mirror writes there.
This CLI was built by studying these projects and resources:
- art-institute-of-chicago/api — PHP
- nasa/apod-api — Python
- metmuseum/openaccess — CSV
Generated by CLI Printing Press