← Back to Skills Marketplace
baanish

Agent Render Linking

by Aanish Bhirud · GitHub ↗ · v1.2.0 · MIT-0
cross-platform ✓ Security Clean
334
Downloads
0
Stars
1
Active Installs
3
Versions
Install in OpenClaw
/install agent-render-linking
Description
Create zero-retention agent-render.com links for markdown, code, diffs, CSV, or JSON artifacts. Use when an agent needs to share a nicely rendered artifact i...
README (SKILL.md)

Agent Render Linking

Create browser links for artifacts rendered by agent-render.com.

Project context

Agent Render is:

  • open source
  • publicly hosted on Cloudflare Pages at agent-render.com
  • self-hostable for people who want their own deployment
  • meant to provide a zero-retention browser viewer for agent-shared artifacts

Source repository:

  • https://github.com/baanish/agent-render

Core rule

Keep the artifact content in the URL fragment, not in normal query params.

Use this fragment shape:

#agent-render=v1.\x3Ccodec>.\x3Cpayload>                (plain | lz | deflate)
#agent-render=v1.arx.\x3CdictVersion>.\x3Cpayload>   (arx)

Supported codecs:

  • plain: base64url-encoded JSON envelope
  • lz: lz-string compressed JSON encoded for URL-safe transport
  • deflate: deflate-compressed UTF-8 JSON bytes encoded as base64url
  • arx: domain-dictionary substitution + brotli (quality 11) + base76/base1k/baseBMP encoding (~70% smaller than deflate with baseBMP). Fetch the shared dictionary from https://agent-render.com/arx-dictionary.json to apply substitutions locally before brotli compression. Three encoding tiers: baseBMP (~62k safe BMP code points, ~15.92 bits/char, best density), base1k (1774 Unicode code points U+00A1–U+07FF), and base76 (ASCII fallback). The encoder tries all three and picks the shortest.
  • packed wire mode (p: 1) may be used automatically to shorten transport keys

Prefer:

  1. shortest valid fragment for the target surface
  2. codec priority arx -> deflate -> lz -> plain unless explicitly overridden
  3. packed wire mode when available

Envelope shape

Use this JSON envelope:

{
  "v": 1,
  "codec": "plain",
  "title": "Artifact bundle title",
  "activeArtifactId": "artifact-1",
  "artifacts": [
    {
      "id": "artifact-1",
      "kind": "markdown",
      "title": "Weekly report",
      "filename": "weekly-report.md",
      "content": "# Report"
    }
  ]
}

Supported artifact kinds

Markdown

{
  "id": "report",
  "kind": "markdown",
  "title": "Weekly report",
  "filename": "weekly-report.md",
  "content": "# Report\
\
- Item one"
}

Code

{
  "id": "code",
  "kind": "code",
  "title": "viewer-shell.tsx",
  "filename": "viewer-shell.tsx",
  "language": "tsx",
  "content": "export function ViewerShell() {\
  return \x3Cmain />;\
}"
}

Diff

Prefer a real unified git patch in patch.

{
  "id": "patch",
  "kind": "diff",
  "title": "viewer-shell.tsx diff",
  "filename": "viewer-shell.patch",
  "patch": "diff --git a/viewer-shell.tsx b/viewer-shell.tsx\
--- a/viewer-shell.tsx\
+++ b/viewer-shell.tsx\
@@ -1 +1 @@\
-old\
+new\
",
  "view": "split"
}

Use view: "unified" or view: "split".

A single patch string may contain multiple diff --git sections.

CSV

{
  "id": "metrics",
  "kind": "csv",
  "title": "Metrics snapshot",
  "filename": "metrics.csv",
  "content": "name,value\
requests,42"
}

JSON

{
  "id": "manifest",
  "kind": "json",
  "title": "Manifest",
  "filename": "manifest.json",
  "content": "{\
  \"ready\": true\
}"
}

Multi-artifact bundles

Use multiple artifacts when the user should switch between related views.

Example cases:

  • summary markdown + patch diff
  • report markdown + raw CSV
  • config JSON + related code file

Set activeArtifactId to the artifact that should open first.

Link construction

Construct the final URL as:

https://agent-render.com/#agent-render=v1.\x3Ccodec>.\x3Cpayload>                (plain | lz | deflate)
https://agent-render.com/#agent-render=v1.arx.\x3CdictVersion>.\x3Cpayload>       (arx)

For plain:

  1. Serialize the envelope as compact JSON
  2. Base64url-encode it
  3. Append it after v1.plain.

For lz:

  1. Serialize the envelope as compact JSON
  2. Compress with lz-string URL-safe encoding
  3. Append it after v1.lz.

For deflate:

  1. Serialize the envelope as compact JSON (or packed wire form)
  2. Encode JSON to UTF-8 bytes
  3. Deflate the bytes
  4. Base64url-encode the compressed bytes
  5. Append it after v1.deflate.

Shared arx dictionary

The arx codec uses a substitution dictionary to replace common patterns with short byte sequences before brotli compression. The dictionary is served as a static JSON file:

  • Endpoint: https://agent-render.com/arx-dictionary.json
  • Pre-compressed: https://agent-render.com/arx-dictionary.json.br (brotli, ~929 bytes)

The dictionary contains two arrays:

  • singleByteSlots: up to 25 patterns mapped to single control bytes (highest compression value)
  • extendedSlots: additional patterns mapped to two-byte sequences (0x00 prefix + index)

To use the dictionary for local arx encoding:

  1. Fetch https://agent-render.com/arx-dictionary.json
  2. Apply substitutions in order: for each entry, replace all occurrences of the pattern in the serialized JSON envelope with its corresponding control byte(s)
  3. Brotli-compress the substituted bytes at quality 11
  4. Encode the compressed bytes using baseBMP (preferred, smallest), base1k (mid-tier), or base76 (ASCII fallback)
    • BaseBMP uses ~62k safe BMP code points (U+00A1–U+FFEF, skipping surrogates, combining marks, zero-width chars). Prefix the encoded string with U+FFF0 marker. ~15.92 bits/char
    • Base1k uses 1774 Unicode code points (U+00A1–U+07FF, skipping combining diacriticals and soft hyphen). ~10.79 bits/char
    • Base76 uses 77 ASCII fragment-safe characters — use this if the target surface cannot handle Unicode in URL fragments. ~6.27 bits/char
    • Try all three and pick the shortest
  5. Prepend v1.arx.\x3CdictVersion>. to form the fragment payload (use the same dictionary version used for substitution)

The dictionary includes JSON envelope boilerplate patterns (like ","kind":"Markdown","content":"), JSON-escaped Markdown syntax, programming keywords, and common English words. The viewer loads the same dictionary on startup to reverse substitutions during decode.

If the dictionary fetch fails, fall back to deflate codec.

Practical limits

Respect these limits:

  • target fragment budget: about 8,000 characters
  • target decoded payload budget: about 200,000 characters
  • strict Discord practical budget for linked text workflows: about 1,500 characters

If a link is getting too large:

  1. try arx first, then deflate, then lz, then plain
  2. allow packed wire mode
  3. trim unnecessary prose or metadata
  4. prefer a focused artifact over a bloated one
  5. return a structured failure when the payload cannot fit the requested budget

Agent budget mode

When the caller provides a strict budget (for example 1,500 chars):

  1. encode using all available candidates (arx/deflate/lz/plain, packed and non-packed)
  2. choose the shortest fragment that is within budget
  3. if no candidate fits, return the shortest fragment plus a clear budget failure explanation

Do not silently truncate content to force fit.

Formatting links in chat

Use platform-specific link text only on surfaces that support it cleanly.

Discord

Prefer standard Markdown links:

[Short summary](https://agent-render.com/#agent-render=...)

Examples:

  • [Weekly report](https://agent-render.com/#agent-render=...)
  • [Config diff](https://agent-render.com/#agent-render=...)
  • [CSV snapshot](https://agent-render.com/#agent-render=...)

Telegram

Prefer HTML links because OpenClaw Telegram outbound text uses parse_mode: "HTML".

\x3Ca href="https://agent-render.com/#agent-render=...">Short summary\x3C/a>

Slack

Prefer Slack mrkdwn link syntax:

\x3Chttps://agent-render.com/#agent-render=...|Short summary>

All other OpenClaw chat surfaces

For WhatsApp, Signal, iMessage, Google Chat, IRC, LINE, and any other surface without reliable inline link-text formatting, do not force Markdown-style links.

Use:

  • a short summary line first
  • then the raw URL on its own line

If a provider later exposes a reliable native linked-text format, use that provider-specific syntax instead of generic Markdown.

Output style

When sharing a link:

  • keep the summary short
  • make the artifact title human-readable
  • use filenames when they help the viewer
  • do not narrate the transport details unless the user asks

Good defaults

  • Prefer one strong artifact over many weak ones
  • Prefer patch for diffs
  • Prefer readable titles
  • Prefer Markdown link text when supported
  • Prefer shortest-by-measurement instead of human guesses
  • Use budget-aware encoding for Discord-like constraints

Avoid

  • Do not put raw artifact content in normal query params
  • Do not upload artifact content to a server for this workflow
  • Do not dump giant noisy bundles when a focused artifact is enough
  • Do not invent unsupported fields unless the renderer has added them
  • Do not handcraft packed envelopes manually if helper utilities are available; construct logical envelopes and let transport logic pack automatically
Usage Guidance
This skill is coherent and needs no credentials or installs, but consider privacy and preview behavior before using it with sensitive data: the arx flow fetches a dictionary from agent-render.com (which reveals a network request to that host), and links containing content in the URL can be stored in browser history or exposed via platform link previews or logs. If you will share sensitive artifacts, self-host agent-render or avoid embedding secrets in the generated link; test how your target chat/platform handles link unfurling before sending links publicly.
Capability Analysis
Type: OpenClaw Skill Name: agent-render-linking Version: 1.2.0 The skill bundle provides a utility for agents to share formatted artifacts (Markdown, Code, Diffs, CSV, JSON) by encoding them into URL fragments for the `agent-render.com` service. It implements a 'zero-retention' privacy model by ensuring data stays in the URL fragment (client-side) rather than being sent to a server. The instructions include detailed specifications for various compression and encoding schemes (LZ, Deflate, and a custom 'arx' codec using a dictionary from `https://agent-render.com/arx-dictionary.json`) to optimize for platform-specific character limits. No malicious intent, data exfiltration, or unauthorized execution patterns were identified; the skill functions as a legitimate rendering helper.
Capability Assessment
Purpose & Capability
The name/description match the SKILL.md: it explains how to construct agent-render.com links and which codecs/envelope formats to use. There are no unrelated env vars, binaries, or install steps requested.
Instruction Scope
The runtime instructions are narrowly focused on serializing an envelope and encoding it into a URL fragment; they do not ask the agent to read files, environment variables, or other system state. Two operational points to be aware of: (1) the arx codec workflow requires fetching https://agent-render.com/arx-dictionary.json (a network call to the service) to build the substitution dictionary locally, and (2) embedding content into URLs means the artifact will appear in the link (browser history, user-visible URL) even though the fragment is not intended to be sent to the server. Also be cautious about link unfurling/preview behavior on platforms (Slack, Discord, social networks) which can cause external services to fetch or expose content.
Install Mechanism
Instruction-only skill with no install spec and no code files. This is low-risk because nothing is written to disk or executed by default by the skill itself.
Credentials
No environment variables, credentials, or config paths are requested. The required network access (to agent-render.com for dictionary fetch and the viewer domain itself) is logically proportional to the stated purpose.
Persistence & Privilege
The skill does not request always: true or any elevated/system-wide persistence. Default autonomous invocation is allowed (platform default) and appropriate for this type of helper.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install agent-render-linking
  3. After installation, invoke the skill by name or use /agent-render-linking
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.2.0
Add deflate codec with verified roundtrip; document arx baseBMP/base1k/base76 tiers; Discord practical budget notes; fflate encoding requirement
v0.1.1
Mention open-source repo and Cloudflare Pages hosting.
v0.1.0
Initial release
Metadata
Slug agent-render-linking
Version 1.2.0
License MIT-0
All-time Installs 1
Active Installs 1
Total Versions 3
Frequently Asked Questions

What is Agent Render Linking?

Create zero-retention agent-render.com links for markdown, code, diffs, CSV, or JSON artifacts. Use when an agent needs to share a nicely rendered artifact i... It is an AI Agent Skill for Claude Code / OpenClaw, with 334 downloads so far.

How do I install Agent Render Linking?

Run "/install agent-render-linking" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Agent Render Linking free?

Yes, Agent Render Linking is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does Agent Render Linking support?

Agent Render Linking is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Agent Render Linking?

It is built and maintained by Aanish Bhirud (@baanish); the current version is v1.2.0.

💬 Comments