agency-docs-updater
Automates the publishing of Claude Code lab meetings by managing transcripts, video uploads, and documentation generation.
Install this skill
Security score
The agency-docs-updater skill was audited on May 29, 2026 and we found 36 security issues across 3 threat categories, including 18 high-severity. Review the findings below before installing.
Categories Tested
Security Issues
Template literal with variable interpolation in command context
| 28 | ```bash |
Template literal with variable interpolation in command context
| 42 | If `LAB_FILTER` is set: `${VAULT_DIR}/${DATE}-claude-code-lab-${LAB_FILTER}.md` |
Template literal with variable interpolation in command context
| 43 | If empty: glob `${VAULT_DIR}/${DATE}-claude-code-lab-*.md` (pick most recent by mtime). |
Template literal with variable interpolation in command context
| 45 | If missing: run `${SKILLS_LOCAL_DIR}/calendar-sync/sync.sh`, re-check, stop if still missing. |
Template literal with variable interpolation in command context
| 49 | - `VIDEO_NAME` = `${DATE}-claude-code-lab-${LAB_NUMBER}` |
Template literal with variable interpolation in command context
| 52 | **Determine `MEETING_NUMBER`**: check existing MDX files in `${DOCS_SITE_DIR}/content/docs/claude-code-internal-${LAB_NUMBER}/meetings/` for a placeholder with today's date. If found, use that number. |
Template literal with variable interpolation in command context
| 56 | Skip if `${VAULT_DIR}/${VIDEO_NAME}.mp4` exists and is > 1MB. |
Template literal with variable interpolation in command context
| 61 | ```bash |
Template literal with variable interpolation in command context
| 68 | ```bash |
Template literal with variable interpolation in command context
| 74 | ```bash |
Template literal with variable interpolation in command context
| 81 | ```bash |
Template literal with variable interpolation in command context
| 92 | Extract `YOUTUBE_URL` from stdout (`✓ YouTube video: ...`) or `processed/metadata/${VIDEO_NAME}.json`. |
Template literal with variable interpolation in command context
| 99 | ```python |
Template literal with variable interpolation in command context
| 143 | If verification fails: delete the failed video metadata (`rm processed/metadata/${VIDEO_NAME}.json`), re-upload with `--resume-from upload`, and re-verify. Do NOT proceed to MDX or thumbnail steps wit |
Template literal with variable interpolation in command context
| 156 | 3. Write a **temporary** HTML file (e.g. `/tmp/lab-meeting-${MEETING_NUMBER}.html`) based on `${YOUTUBE_UPLOADER_DIR}/templates/images/lab-meeting.html` — update meeting number, topic hero text, bulle |
Template literal with variable interpolation in command context
| 157 | 4. Render with Playwright at 1280×720 → `${YOUTUBE_UPLOADER_DIR}/processed/thumbnails/${VIDEO_NAME}.jpg` |
Template literal with variable interpolation in command context
| 165 | Read `${FATHOM_FILE}`. Generate a structured summary **in `${TRANSCRIPT_LANG}`**: |
Template literal with variable interpolation in command context
| 184 | Meeting page URL: `https://${SITE_DOMAIN}/claude-code-lab-${LAB_NUMBER}/meetings/${MEETING_NUMBER}` |
Template literal with variable interpolation in command context
| 190 | ```bash |
Template literal with variable interpolation in command context
| 195 | **Before running**: check if a placeholder MDX already exists for today's date (`grep -l` in `meetings/`). If so, use `-n ${MEETING_NUMBER} --update` to target it. |
Template literal with variable interpolation in command context
| 199 | 2. Check for presentation file: look in `${PRESENTATIONS_DIR}/presentations/lab-${LAB_NUMBER}/` and `${PRESENTATIONS_DIR}/lesson-generator/` for files matching `${DATE}`. If found, copy to `${DOCS_SIT |
Template literal with variable interpolation in command context
| 202 | 5. Verify: `cd ${DOCS_SITE_DIR} && npm run build 2>&1 | tail -5` |
Template literal with variable interpolation in command context
| 207 | ```bash |
Template literal with variable interpolation in command context
| 227 | ```bash |
Template literal with variable interpolation in command context
| 241 | Open `https://${SITE_DOMAIN}/claude-code-lab-${LAB_NUMBER}/meetings/${MEETING_NUMBER}` in a browser (via chrome automation tools or manually). Verify YouTube embed is visible. If not: check VIDEO_ID, |
Template literal with variable interpolation in command context
| 247 | ```bash |
Template literal with variable interpolation in command context
| 256 | **Handle new glossary terms**: the script prints `→ N NEW term(s) need definitions` for terms it has never seen. For each, write a one-line definition into `${DOCS_SITE_DIR}/.agency-glossary.json` (ke |
Template literal with variable interpolation in command context
| 258 | **Then**: `cd ${DOCS_SITE_DIR} && npm run build 2>&1 | tail -5` to confirm the generated MDX compiles, stage the changed aggregation files (the three MDX pages, `public/data/meetings.json`, and `.agen |
Template literal with variable interpolation in command context
| 259 | ```bash |
Access to hidden dotfiles in home directory
| 16 | - [calendar-sync](~/.claude/skills/calendar-sync) — local-only, calendar event sync (`sync.sh`) |
Access to .env file
| 10 | **Configuration**: paths are read from `.env` in the skill root (see `.env.example`). Defaults work for the standard setup. Key env vars: `VAULT_DIR`, `DOCS_SITE_DIR`, `YOUTUBE_UPLOADER_DIR`, `PRESENT |
Access to .env file
| 21 | Load `.env` from skill root. Then split `args` by whitespace: |
Access to .env file
| 251 | The script reads the same `.env` paths and writes (paths configurable via `AGG_*` env vars): |
External URL reference
| 184 | Meeting page URL: `https://${SITE_DOMAIN}/claude-code-lab-${LAB_NUMBER}/meetings/${MEETING_NUMBER}` |
External URL reference
| 241 | Open `https://${SITE_DOMAIN}/claude-code-lab-${LAB_NUMBER}/meetings/${MEETING_NUMBER}` in a browser (via chrome automation tools or manually). Verify YouTube embed is visible. If not: check VIDEO_ID, |
External URL reference
| 274 | For **repo-wide** jobs across all past meetings — auditing every page for broken embeds/MDX defects, or backfilling/repairing incomplete meetings — see `references/workflows.md`. Those are fan-out [dy |