A meta-skill. Renders the current astrology / HD / synthesis reading pipeline as a labeled PNG flowchart and emits a JSON legend (numeric node id → skill name → SKILL.md path → one-line role). Telegram-friendly: ship the PNG with MEDIA: and list the legend with file links underneath.
scripts/render_pipeline.py <mode> where mode ∈ {astro, hd, synthesis}.
PIPELINES dict — one entry per mode — with nodes (id, title, skill, role) and edges./tmp/astro-pipeline-<mode>.png.skill field, resolves it under ~/.hermes/skills/**/<skill>/SKILL.md, and emits a JSON legend with the absolute path. Nodes without a backing skill (pure prose / weave steps) are marked terminal and have skill_md: null.The script's PIPELINES dict is the single source of truth for what the pipeline currently is. Mutating the pipeline means editing that dict and re-running — the diagram and legend update together.
MEDIA:/tmp/astro-pipeline-<mode>.png.https://skills.apps.poofc.com/skills/<skill-name>), NOT as a MEDIA: attachment. Format per node:
**[N] Title** — one-line role. [<skill-name>](https://skills.apps.poofc.com/skills/<skill-name>)The first version of this skill delivered each SKILL.md as MEDIA:/abs/path/to/SKILL.md. This does not work — Telegram (and the Hermes gateway in front of it) only renders MEDIA: for images / audio / video. Raw .md paths are silently dropped or rendered as inert text. The user cannot tap them.
The fix is the skill-viewer app (~/apps/skill-viewer, PM2 skill-viewer, port 4036) reverse-proxied at https://skills.apps.poofc.com/skills/<name> — renders any SKILL.md as themed HTML on demand. The audit script's JSON legend already includes skill_url for every node; use that field, not skill_md, for the user-facing reply.
If the viewer is down or the subdomain isn't wired yet, say so explicitly and fall back to pasting the skill name + local path as plain text. Do NOT silently emit broken MEDIA: lines.
Pick mode from context. If user just says "audit", default to whatever the most recent reading was; if unclear, ask.
When Alex says "let's try X next" / "swap rulership for decans" / "add a transit overlay step":
scripts/render_pipeline.py PIPELINES dict — add/remove/reorder nodes, edit layout, edit edges.skills.apps.poofc.com/skills/<name>. Diagram alone is not auditable.MEDIA: — Telegram does not render markdown attachments (see PITFALL above). Use the viewer URL.skill field in PIPELINES doesn't resolve to a real SKILL.md, fix the skill name — don't silently emit null for a step that's supposed to be backed by a skill.python3 render_pipeline.py <mode>) so it can be called from cron / verification scripts later.PIPELINES dict — never draw a freehand image of the pipeline, never describe the flow in prose alone when an audit was requested. If the user has mutated the pipeline during the session, the next render must reflect that mutation.references/delivery-decision.md — Alex explicitly rejected separate dashboards / viewer apps / admin pages for this workflow. Don't propose them again unless he asks.--lenses rulership,decans flag to render an arbitrary lens combo from the command linereferences/skill-viewer-infra.md — how the https://skills.apps.poofc.com legend links resolve, health checks, restart, and the fallback to plain-text file paths when the viewer is unavailable.