doc-updater
Deploy and manage a daily AI agent that automatically updates GitHub documentation for a LimaCharlie organization. The agent collects org config, diffs against previous state, analyzes changes with full case/session context, renders Jinja2 templates, and pushes annotated updates to a GitHub repo. Templates are read from the lc-ai repo or a user-provided custom repo — no payloads needed. Use for "deploy doc updater", "set up automatic documentation", "install doc-updater agent", "update docs agent".
What this skill does
# Doc-Updater Agent Deployment
Deploy a daily AI agent that keeps GitHub documentation in sync with a LimaCharlie organization's configuration — with contextual explanations for every change.
***
## LimaCharlie Integration
> **Prerequisites**: Run `/init-lc` to initialize LimaCharlie context.
### LimaCharlie CLI Access
All LimaCharlie operations use the `limacharlie` CLI directly:
```bash
limacharlie <noun> <verb> --oid <oid> --output yaml [flags]
```
For command help and discovery: `limacharlie <command> --ai-help`
### Critical Rules
| Rule | Wrong | Right |
|------|-------|-------|
| **CLI Access** | Call MCP tools or spawn api-executor | Use `Bash("limacharlie ...")` directly |
| **Output Format** | `--output json` | `--output yaml` (more token-efficient) |
| **Timestamps** | Calculate epoch values | Use `date +%s` or `date -d '7 days ago' +%s` |
| **OID** | Use org name | Use UUID (call `limacharlie org list` if needed) |
| **Secrets** | Include values in outputs | Only document secret **names**, NEVER values |
***
## Architecture
```
EXPORT → DIFF → ANALYZE → RENDER → PUSH
┌─────────────────┐
│ doc-exporter.py │ LC CLI → config.yaml (current state)
└────────┬────────┘
│
┌────────▼────────┐
│ doc-differ.py │ config.yaml (old vs new) → diff.yaml
└────────┬────────┘
│
┌────────▼─────────────────────────────────┐
│ AI Agent │
│ │
│ Reads diff.yaml, queries LC cases and │
│ AI sessions for context, generates: │
│ - recent_changes (for README template) │
│ - CHANGELOG.md entry │
│ - Rich git commit message │
└────────┬─────────────────────────────────┘
│
┌────────▼────────┐
│ doc-renderer.py │ config.yaml + templates → 10 markdown files
└────────┬────────┘
│
┌────────▼────────┐
│ git push │ commit annotated docs + config snapshot
└─────────────────┘
```
The scripts handle mechanical work. The AI agent handles the intelligence:
investigating WHY things changed and writing explanations with case references.
## Template & Script Sources
Templates and scripts are read directly from the filesystem — **no payloads needed**.
The agent finds them in priority order:
| Priority | Source | How to configure |
|----------|--------|-----------------|
| 1 | **Explicit path** | Set `skill_path` in `doc-state` lookup |
| 2 | **Custom git repo** | Set `skill_repo` in `doc-state` lookup |
| 3 | **Default: local plugin** | `/opt/lc-advanced-skills/skills/doc-updater` (no config needed) |
### Default: local plugin directory (no config needed)
In the standard LimaCharlie AI agent runtime, plugin code is mounted at:
- `/opt/lc-essentials/` — core plugin
- `/opt/lc-advanced-skills/` — advanced skills plugin
The agent reads templates and scripts from:
```
/opt/lc-advanced-skills/skills/doc-updater/templates/
/opt/lc-advanced-skills/skills/doc-updater/scripts/
```
No payload uploads, no deployment steps, no drift. Updates to templates in the repo
are picked up on the next agent run automatically.
### Custom templates repo
Users who want to customize the doc templates can provide their own repo:
```yaml
# In the doc-state lookup:
skill_repo: "https://github.com/myorg/my-doc-templates"
```
The custom repo must follow the same directory structure:
```
my-doc-templates/
├── scripts/
│ ├── doc-exporter.py
│ ├── doc-renderer.py
│ └── doc-differ.py
└── templates/
├── readme.md.j2
├── architecture.md.j2
├── sensors.md.j2
├── detection-rules.md.j2
├── ai-agents.md.j2
├── data-pipeline.md.j2
├── access-control.md.j2
├── runbook-admin.md.j2
├── runbook-ir.md.j2
└── runbook-updating.md.j2
```
### Explicit local path
For testing or non-standard layouts, set an explicit path:
```yaml
# In the doc-state lookup:
skill_path: "/home/user/my-custom-doc-updater"
```
## Components
| Component | Type | Description |
|-----------|------|-------------|
| `doc-updater` | AI Agent (hive) | Sonnet model, daily schedule |
| `doc-updater-daily` | D&R Rule | 24h_per_org schedule trigger |
| `doc-updater` | API Key + Secret | Scoped LC API key for config reads + case queries |
| `github-pat` | Secret | GitHub PAT for repo push access |
| `doc-state` | Lookup | Contains `repo_url`, template source config, and run metadata |
## Scripts (in `scripts/` directory)
| Script | Input | Output | Purpose |
|--------|-------|--------|---------|
| `doc-exporter.py` | OID | `config.yaml` | Collects all org config via LC CLI |
| `doc-differ.py` | old + new `config.yaml` | `diff.yaml` | Deterministic structural diff |
| `doc-renderer.py` | `config.yaml` + templates | 10 markdown files | Jinja2 template rendering |
## Templates (in `templates/` directory)
| Template | Output File |
|----------|------------|
| `readme.md.j2` | `README.md` (includes Recent Changes section) |
| `architecture.md.j2` | `architecture.md` |
| `sensors.md.j2` | `sensors.md` |
| `detection-rules.md.j2` | `detection-rules.md` |
| `ai-agents.md.j2` | `ai-agents.md` |
| `data-pipeline.md.j2` | `data-pipeline.md` |
| `access-control.md.j2` | `access-control.md` |
| `runbook-admin.md.j2` | `runbooks/common-admin-tasks.md` |
| `runbook-ir.md.j2` | `runbooks/incident-response.md` |
| `runbook-updating.md.j2` | `runbooks/updating-docs.md` |
## Git Repo Structure (docs output)
```
<docs-repo>/
├── README.md # Includes "Recent Changes" section
├── CHANGELOG.md # Accumulates change entries with context
├── architecture.md
├── sensors.md
├── detection-rules.md
├── ai-agents.md
├── data-pipeline.md
├── access-control.md
├── runbooks/
│ ├── common-admin-tasks.md
│ ├── incident-response.md
│ └── updating-docs.md
└── .doc-updater/
└── config.yaml # Config snapshot for next run's diff
```
## Deployment Workflow
### Phase 1: Gather Requirements
1. **Identify the target organization** — resolve name to OID
2. **Get the GitHub repo URL** — existing or create new (must be HTTPS)
3. **Get the GitHub PAT** — user provides a PAT with `repo` scope
4. **(Optional) Custom template source** — ask if user wants custom templates
### Phase 2: Create API Key + Secrets
1. Create a scoped API key named `doc-updater` with permissions:
`org.get`, `sensor.list`, `dr.list`, `fp.ctrl`, `ext.conf.get`,
`investigation.get`, `investigation.set`, `lookup.get`, `lookup.set`,
`org_notes.get`, `org_notes.set`, `sop.get`, `ai_agent.operate`,
`audit.get`, `secret.get`
2. Store the API key as secret `doc-updater`
3. Store the GitHub PAT as secret `github-pat`
### Phase 3: Create Lookup
Create `doc-state` lookup with the repo URL and optional template source:
```yaml
# Minimum required:
repo_url: "https://github.com/<owner>/<repo>"
# Optional — custom template source:
# skill_path: "/path/to/custom/doc-updater"
# skill_repo: "https://github.com/myorg/my-doc-templates"
```
### Phase 4: Deploy Agent + Trigger Rule
Deploy from the `agent/` directory in this skill.
### Phase 5: Verify
The first run will treat everything as "new" and generate a comprehensive
initial changelog. Subsequent runs only document actual changes.
## What the Agent Does (vs Scripts)
| Task | Who Does It | Why |
|------|-------------|-----|
| Collect org config | `doc-exporter.py` | Deterministic, fast |
| Compare old vs new | `doc-differ.py` | Deterministic, structural |
| **Investigate WHY changes happened** | **AI Agent** | **Queries cases, AI sessions, audit logs** |
| **Write contextual changelog** | **AI Agent** | **Natural language with case references** |
| **Write rich commit message** | **AI Agent** | **Summarizes with context** |
| Render markdown from templates | `doc-renderer.py` | Deterministic Jinja2 |
| Git operations | Shell commands | Mechanical push |
## Updating Templates
Since templates are read directly from the repo (not payloadsRelated in Cloud & DevOps
appbuilder-action-scaffolder
IncludedCreate, implement, deploy, and debug Adobe Runtime actions with consistent layout, validation, and error handling. Use this skill whenever the user needs to add actions to an App Builder project, understand action structure (params, response format, web/raw actions), configure actions in the manifest, use App Builder SDKs (State, Files, Events, database), deploy and invoke actions via CLI, debug action issues, or implement patterns such as webhook receivers, custom event providers, journaling consumers, large payload redirects, action sequence pipelines, and Asset Compute workers. Also trigger when users mention serverless functions in Adobe context, action logging, IMS authentication for actions, or cron-style scheduled actions.
orchestrating-datacloud
IncludedSalesforce Data Cloud product orchestrator for connect→prepare→harmonize→segment→act workflows. Use this skill when the user needs a multi-step Data Cloud pipeline, cross-phase troubleshooting, or data space and data kit management. TRIGGER when: user needs a multi-step Data Cloud pipeline, asks to set up or troubleshoot Data Cloud across phases, manages data spaces or data kits, or wants a cross-phase sf data360 workflow. DO NOT TRIGGER when: work is isolated to a single phase (use the matching phase-specific skill), the task is STDM/session tracing/parquet telemetry (use observing-agentforce), standard CRM SOQL (use querying-soql), or Apex implementation (use generating-apex).
github-project-automation
IncludedAutomate GitHub repository setup with CI/CD workflows, issue templates, Dependabot, and CodeQL security scanning. Includes 12 production-tested workflows and prevents 18 errors: YAML syntax, action pinning, and configuration. Use when: setting up GitHub Actions CI/CD, creating issue/PR templates, enabling Dependabot or CodeQL scanning, deploying to Cloudflare Workers, implementing matrix testing, or troubleshooting YAML indentation, action version pinning, secrets syntax, runner versions, or CodeQL configuration. Keywords: github actions, github workflow, ci/cd, issue templates, pull request templates, dependabot, codeql, security scanning, yaml syntax, github automation, repository setup, workflow templates, github actions matrix, secrets management, branch protection, codeowners, github projects, continuous integration, continuous deployment, workflow syntax error, action version pinning, runner version, github context, yaml indentation error
sf-datacloud
IncludedSalesforce Data Cloud product orchestrator for connect→prepare→harmonize→segment→act workflows. TRIGGER when: user needs a multi-step Data Cloud pipeline, asks to set up or troubleshoot Data Cloud across phases, manages data spaces or data kits, or wants a cross-phase `sf data360` workflow. DO NOT TRIGGER when: work is isolated to a single phase (use the matching sf-datacloud-* skill), the task is STDM/session tracing/parquet telemetry (use sf-ai-agentforce-observability), standard CRM SOQL (use sf-soql), or Apex implementation (use sf-apex).
fabric-cli
IncludedUse this skill for Fabric.so CLI workflows with the `fabric` terminal command: diagnose/install/login, search or browse a Fabric library, save notes/links/files, create folders, ask the Fabric AI assistant, manage tasks/workspaces, generate shell completion, check subscription usage, produce JSON output, and use Fabric as persistent agent memory. Do not use for Microsoft Fabric/Azure/Power BI `fab`, Daniel Miessler's Fabric framework, Python Fabric SSH, Fabric.js, or textile/fashion fabric.
lark
IncludedLark/Feishu CLI skills: lark-cli operations for docs, markdown, sheets, base, calendar, im, mail, task, okr, drive, wiki, slides, whiteboard, apps, approval, attendance, contact, vc, minutes, event. Use when the user needs to operate Lark/Feishu resources via lark-cli, send messages, manage documents, spreadsheets, calendars, tasks, OKRs, deploy web pages, or any Feishu/Lark workspace operations.