One URL, three readers. The classifier is deterministic and inspectable: api/lib/classify.js.
| You send | You get |
|---|---|
curl https://viiy.to/agentic-testing | the manifest (machine surface) |
a browser visit to https://viiy.to/agentic-testing | the card page (human surface) |
paste https://viiy.to/agentic-testing into X / Discord / Slack | the unfurl (crawler surface — OG + twitter:card) |
# the machine surface (an agent's view)
curl -A "curl/8.4" https://viiy.to/agentic-testing
# the human surface
open https://viiy.to/agentic-testing
# the crawler surface (what X/Discord fetch)
curl -A "Twitterbot/1.0" https://viiy.to/agentic-testing | head -20
Read https://viiy.to/agentic-testing/INGEST.md and execute its load order; it routes everything else.
Your agent fetches the manifest, executes the load order, and the whole package routes from one line. That is the entire convention.
git clone https://github.com/MediaPlural/ingest
cd ingest
python3 ingest.py init ./my-package --bluf bluf.txt
python3 tools/arm.py ./my-package --slug my-package --url https://viiy.to/my-package
The arming tool copies the artifact set into the host's packages/ dir and stamps the share URL. The manifest stays the single source of truth.