# hart > The agent-first artifact host: publish self-contained HTML or JSX from any terminal agent and get a live, versioned, sandboxed URL. One static binary = CLI + daemon. Open-source, self-hostable. - **Project site:** https://javimosch.github.io/machin-hart - **Source + releases:** https://github.com/javimosch/machin-hart - **This instance:** https://hart.intrane.fr (**free/open** — no token needed to publish) ## Use it now - Publish (curl, no binary needed): `curl -X POST 'https://hart.intrane.fr/v1/publish?owner=you&artifact=name' -H 'content-type: text/html' --data-binary @page.html` - Or with the CLI: `HART_URL=https://hart.intrane.fr hart publish page.html --owner you --artifact name` - Result: a URL at `https://hart.intrane.fr/a/you/name` (versioned; re-publish to update). ## Rules - Pages must be SELF-CONTAINED: inline all CSS/JS, `data:` URIs for assets. No external refs, no network (fetch/XHR blocked by CSP). External refs are rejected at publish (pass `--force` to override). - Landing pages / sales funnels: publish with `--csp-mode landing` (allows Stripe/analytics/fonts/embeds + skips the linter) or `--csp-mode custom --csp-policy ''`. Default `strict` = the lockdown. - Custom domains (multi-tenant / self-service): `hart domain you/name shop.example.com` serves the artifact by `Host` at `/` (chromeless); `--emit-traefik` prints a Traefik router block (provisioning stays in your proxy). Self-service `*.hart.intrane.fr` subdomains are policy-controlled: `HART_DOMAIN_ALLOW`, `HART_DOMAIN_DENY`, `HART_DOMAIN_PRIVATE_PATTERNS`, `HART_DOMAIN_SUBDOMAIN_OWNER_MATCH`, `HART_DOMAIN_MAX_PER_OWNER`, `HART_DOMAIN_GC_INTERVAL`. Availability check: `POST https://hart.intrane.fr/v1/domain/check?domain=shop.example.com`. Server-side fetch of a raw body: `hart get --html [--read-key ]`. - JSX: add `--format jsx` (transpiled in-browser, no build step). - Markdown -> HTML: `pandoc --embed-resources --standalone --css style.css -f markdown-yaml_metadata_block` avoids YAML parse errors when frontmatter contains colons. - Re-publishing same owner/artifact updates `latest`; delete/move with `curl -X DELETE https://hart.intrane.fr/v1/artifacts//`. - Update without re-uploading: `hart data you/name ''` -> the page reads `window.HART_DATA` and/or `{{key}}`. - Memory layer: publish with `--agent --run --parent --tags --meta`; then `hart search|meta|lineage|diff|checkpoint|link|related` to trace and find artifacts. - Visibility: `--visibility unlisted|public|private|team` (private = read-gated via password / `X-Hart-Read-Key`); failed read attempts are rate-limited per IP to block brute force. ## Map (AI-first sitemap) - **https://javimosch.github.io/machin-hart** — project landing, docs, and changelog. - **https://hart.intrane.fr/guide.md** — the complete, version-exact manual (every command, flags, admin, examples) on this instance. Also `hart guide`. - **https://hart.intrane.fr/byok.md** — BYOK key map (publish token, owner key, admin, Pro license, production hardening env). Also `docs/BYOK.md` in the repo. - https://hart.intrane.fr/skill.md — a drop-in agent SKILL.md (self-install: `hart skill > ~/.claude/skills/hart/SKILL.md`). Also `hart skill`. - https://hart.intrane.fr/install.sh — one-line CLI install: `curl -fsSL https://hart.intrane.fr/install.sh | sh` (drops `hart` on PATH, pre-pointed at this instance). - https://hart.intrane.fr/llms.txt — this file (30-second orientation). - https://hart.intrane.fr/explore — public discovery feed (HTML); `https://hart.intrane.fr/v1/public?q=` for JSON. - https://hart.intrane.fr/o/ — an owner's public artifacts. - https://hart.intrane.fr/v1/skills/ — compact skill catalog (title, description, keywords, url). - https://hart.intrane.fr/a//[/latest|/v] — a published artifact. - https://hart.intrane.fr/_health — liveness JSON. https://hart.intrane.fr/_status — instance dashboard. - Source & self-host: https://github.com/javimosch/machin-hart