Help us improve
Share bugs, ideas, or general feedback.
From itential-builder
Surveys global Itential assets outside projects, groups into use cases, and produces markdown docs: customer-spec.md + solution-design.md per use case + master README.
npx claudepluginhub itential/builder-skillsHow this command is triggered — by the user, by Claude, or both
Slash command
/itential-builder:SKILLskills/documentation/The summary Claude sees in its command listing — used to decide when to auto-load this command
# Documentation **Purpose:** Read Itential assets → discover relationships → group into use cases → produce documentation **Output:** `customer-spec.md` (inferred HLD per use case) + `solution-design.md` (as-built LLD per use case) + `README.md` (master index, only when multiple use cases) **Feeds into:** Can be handed to `/spec-agent` for refinement or `/solution-arch-agent` for redesign ## CRITICAL: Output Requirements **The ONLY deliverables are markdown files.** Do NOT produce JSON index files, JSON catalogs, or any intermediate artifacts. All analysis happens in-memory. **Never w...
/SKILLResolves GitHub issue via isolated worktree, TDD workflow, and auto-closing PR creation.
/SKILLCreates conventional git commit from conversation intent using git-agent and pushes to remote. Accepts optional Claude model name for co-author.
/SKILLSurfaces current session task from state file, evaluates clarity (prompts for clarification if needed), assesses completion, and verifies if fully done.
Share bugs, ideas, or general feedback.
Purpose: Read Itential assets → discover relationships → group into use cases → produce documentation
Output: customer-spec.md (inferred HLD per use case) + solution-design.md (as-built LLD per use case) + README.md (master index, only when multiple use cases)
Feeds into: Can be handed to /spec-agent for refinement or /solution-arch-agent for redesign
The ONLY deliverables are markdown files. Do NOT produce JSON index files, JSON catalogs, or any intermediate artifacts. All analysis happens in-memory.
{reports-directory}/
README.md ← master index of all use cases ONLY when more than one use case
{use-case-slug}/
customer-spec.md ← inferred HLD (business purpose, scope, requirements)
solution-design.md ← as-built LLD (components, flows, adapters, data model)
{use-case-slug}/
customer-spec.md
solution-design.md
...
Never write JSON files as output. No workflow-index.json, no asset-index.json, no use-case-groups.json. The user wants documentation, not data dumps.
Surveys global Itential assets — workflows, JSON forms, transformations, templates, command templates, analytic templates, Operations Manager automations, golden configuration trees and compliance plans, and LCM resource models that live outside named projects. Accepts all, platform, a directory path, or a list of specific global asset names. Discovers how they relate to each other, groups them into logical use cases, and produces documentation for each group plus a master index when there are multiple use cases.
For a named project: Use
/project-to-specinstead — it reads a single project's components and produces customer-spec.md + solution-design.md tailored to that project.
User invokes /documentation ['all' | 'platform' | directory | specific global asset names]
|
├── Step 0: Determine Scope
| ├── Project named? → redirect to /project-to-spec
| ├── Specific global assets named? → resolve + discover relationships → ask grouping preference
| └── 'all' / platform / directory? → full collection + grouping flow
|
├── Step 1: Collect + classify global assets (in-memory)
├── Step 2: Discover relationships + group into use cases (in-memory)
├── Step 3: Present proposed groupings to engineer for approval
├── Step 4: Write per-use-case reports (customer-spec.md + solution-design.md)
├── Step 5: Write master README.md (ONLY when more than one use case)
└── Step 6: Present summary to engineer for review
Before collecting assets, determine what the user wants to document.
If the user names a specific project, redirect them to /project-to-spec — that skill is purpose-built for single-project documentation and produces a more thorough analysis.
"It looks like you want to document a specific project — use
/project-to-specfor that. It reads the project's components directly and produces a more thorough customer-spec.md and solution-design.md for it."
If the user provides one or more asset names or IDs:
Resolve each asset via the platform API or local files
Traverse the relationship graph starting from each named asset (childJob links, OM→workflow, LCM→workflow, golden config→command template, etc.)
Present the discovered asset cluster to the engineer:
Ask the engineer:
"I found these assets and their relationships. How should I document them?"
- (Default) Group into use cases — analyze and cluster into logical groups, then produce HLD+LLD per group
- Document as a single unit — treat the entire cluster as one use case, produce one HLD+LLD
- Document each asset independently — produce separate minimal documentation per asset without cross-linking
Proceed based on the engineer's answer.
If the user says all, platform, or provides a directory path, run the full collection and grouping flow (Steps 1–6) without asking about grouping preference.
Ask the engineer for the asset source if not specified. Two modes:
Scan for asset JSON files organized by type:
directory/
workflows/ *.json
json_forms/ *.json
transformations/ *.json or *.jst.json
templates/ *.json
command_templates/ *.json
operations_manager_automations/ *.json
golden_config/ *.json
lcm/ *.json
If the directory is flat (all JSON at root), classify by JSON structure signatures below.
If a projects/ subfolder exists, scan it too. Project manifest files (containing name + components[]) identify which assets belong to a project — use that grouping when building the relationship graph. Strip @projectId: prefixes from any workflow names found inside.
Authenticate using .auth.json (see AGENTS.md auth reuse pattern). Fetch global assets (ensure you fetch pagination if there are a lot of assets):
GET /automation-studio/workflows?exclude-project-members=true&limit=500
GET /automation-studio/templates?limit=500
GET /automation-studio/json-forms?limit=500
GET /operations-manager/automations
GET /mop/templates
GET /golden-config/trees
GET /golden-config/plans
GET /lifecycle-manager/model
GET /automation-studio/projects?limit=500
| Asset Type | Identifying Fields |
|---|---|
| Workflow | tasks (object), transitions |
| JSON Form | schema, struct, uiSchema |
| Transformation | incoming, outgoing, steps |
| Template | type (textfsm/jinja2), template field |
| Command Template | commands[] with rules[] |
| Analytic Template | commands[] with analytics[] or baseline fields |
| OM Automation | triggers[], componentName |
| Golden Config Tree | nodes[], rootNode, treeType |
| Golden Config Compliance Plan | planType, configSpec, devices[] |
| LCM Resource Model | resourceType, actions[], schema |
Build the asset index in-memory only. For each asset, note: name, file path/ID, type, and key metadata.
Build a relationship graph in-memory connecting all assets:
Workflow → Workflow (childJob links): For each workflow task where name === "childJob" AND app === "WorkFlowEngine", extract child workflow name from variables.incoming.workflow. Strip @projectId: prefixes.
Workflow → JSON Form: Tasks where app === "JsonForms" or name contains RenderJsonSchema/JsonForm.
Workflow → Template: Tasks where app === "TemplateBuilder" (renderJinjaTemplate, applyTemplate, applyTextFSMTemplate).
Workflow → Transformation: Tasks where name === "transformation".
Workflow → Command Template: Tasks referencing MOP operations (runCommandTemplate).
OM Automation → Workflow: componentName field names the target workflow. Trigger types reveal entry mode: schedule, endpoint (webhook/API), manual (with optional formId).
LCM Resource Model → Workflow: Each LCM action has an actionWorkflow field naming an IAP workflow → link.
Golden Config Compliance Plan → Command Template: Plans reference MOP command templates for configuration checks → link.
Workflow → Golden Config: Workflows calling golden-config API tasks via adapter → link.
Adapter patterns: Collect tasks where location === "Adapter" — extract app (type name) and operation name.
Naming prefix clustering: Split on - (space-dash-space). Assets sharing a prefix are candidates for the same use case.
OM Automations as Entry Points: Each OM automation's componentName → root workflow → traverse childJob graph → collect all reachable workflows + referenced forms/templates/transformations/command templates = one cluster.
LCM Resource Models as Entry Points: Each LCM model → action workflows → traverse childJob graph → collect all reachable assets = one cluster. If a workflow cluster already contains these workflows, merge the LCM model into that cluster.
Golden Config Clusters: Golden config trees + their compliance plans + referenced command templates → one cluster. If workflows reference these golden config assets, merge into the same cluster.
Expand by Naming Prefix: Add ungrouped assets sharing the same naming prefix as assets already in a cluster.
Ungrouped Workflow Trees: Any root workflow (no parent) with children → new cluster.
Shared Utilities: Workflows appearing in 3+ clusters → "Shared Utilities" group. Also include: generic TextFSM templates, utility transformations (math, array ops), common utilities (MongoDB CRUD, credential retrieval, notifications).
Test / Standalone: Workflows with developer name prefixes, [TEST]/test-/dummy patterns, Jira ticket patterns, or <5 tasks with no children and no triggers → "Standalone / Test Workflows" (catalog only, no full HLD/LLD).
Remaining Ungrouped: Group by functional similarity or list as individual entries in master README.
Work through the components to reconstruct intent and structure.
Find the parent workflow — usually the one that:
childJob references pointing to it from other workflowschildJob tasksFor LCM clusters, the resource model itself is the anchor — its action workflows are the orchestrators. For golden config clusters, the compliance plan anchors the cluster.
For the orchestrator and each child:
$var.job.x assignments)Each major section of the orchestrator maps to a phase:
childJob to a child workflow = one phaseevaluation branch = a decision pointViewData = an approval gateFrom the workflow structure, infer what "done" looks like:
evaluation tasks checking statusoutputSchema? → these are the observable outcomesStop and present the proposed groupings before writing any reports. Ask:
Show each group with: name, category (Core/Specialized/Shared/Reference), approximate asset count, and 1-line description.
Wait for engineer approval before proceeding to Step 4.
For each approved use case group, create a directory (or write directly to reports root if only one use case) with two markdown files.
customer-spec.mdWrite professional, narrative documentation — not mechanical spec sheets. The HLD should read like a business-facing document with rich prose, detailed tables, and domain-specific context.
→ See template in helpers/documentation-output-templates.md — "customer-spec.md Template"
For test/standalone use cases, use a simplified catalog format — asset table with Purpose and Adapters columns only. No full HLD needed.
solution-design.mdWrite the as-built LLD — this is factual, not inferred. Each component should have at least a sentence description, so an engineer could understand the full system without reading the source JSON.
→ See template in helpers/documentation-output-templates.md — "solution-design.md Template"
The guidance and example are in the Section D placeholder in helpers/documentation-output-templates.md.
Do not add a sequence diagram to the HLD (customer-spec.md). Section 2 of the HLD is a narrative paragraph only.
Only write this step when there are 2 or more use cases.
Create README.md at the root of the reports directory.
→ See template in helpers/documentation-output-templates.md — "README.md Template"
Show a summary:
Ask the engineer to review the reports. Next steps:
/spec-agent/solution-arch-agentAfter the engineer accepts the use case groupings and reviews the reports, ask:
"Would you like me to create a project for each use case and move the assets in? Moving assets into a project renames them with an
@projectId:prefix — anything currently referencing those assets by name will need updating. Shared utility assets will stay global. Should I proceed?"
If no, stop here. The documentation stands as-is.
If yes, for each approved use case group (skip "Shared Utilities"):
1. Create the project:
POST /automation-studio/projects
{"name": "{use-case-name}", "description": "{one-line from customer-spec.md}", "thumbnail": "", "backgroundColor": "#FFFFFF"}
Save data._id as projectId.
2. Add components:
POST /automation-studio/projects/{projectId}/components/add
{
"components": [
{"type": "workflow", "reference": "{workflow-id}", "folder": "/"},
{"type": "template", "reference": "{template-id}", "folder": "/"},
{"type": "mopCommandTemplate", "reference": "{mop-name}", "folder": "/"}
],
"mode": "move"
}
Component type values: workflow, template, transformation, jsonForm, mopCommandTemplate, mopAnalyticTemplate
3. Build a reference impact report before moving anything:
Before executing any moves, scan all global workflows, OM automations, and LCM models to find references that will break. For each asset being moved, find:
childJob task where variables.incoming.workflow matches the asset's current namecomponentName matches the asset's current nameactions[].actionWorkflow matches the asset's current nameProduce a table:
| Asset being moved | Referenced by | Field | New name after move |
|---|---|---|---|
VLAN_Provision_Parent | Monthly_Audit (workflow) | childJob.workflow | @abc123: VLAN_Provision_Parent |
DNS_Create | DNS Automation (OM automation) | componentName | @abc123: DNS_Create |
Show this to the engineer before proceeding:
"Moving these assets will break the following references. I won't fix them automatically — you'll need to update these manually after the move. Here's what needs changing:"
4. Execute the moves (after engineer confirms they've noted the impact):
For each group, run the POST .../components/add calls as above.
5. After all groups are processed, show a final summary:
| Use Case | Project ID | Assets Moved | Broken References to Fix |
|---|---|---|---|
| {name} | {id} | {count} | {count} — see impact report above |
Flag anything that couldn't be moved (already in a project, API error) for manual follow-up.
Warnings to keep in mind:
@{otherProjectId}: {name} format@projectId: prefixed names: Strip prefix (everything through colon+space) before matching.actionId, or automation name..jst.json naming: Match on internal name field, not filename.data field: Often a JSON string, not parsed object — parse before analyzing.actionWorkflow may be missing: If a LCM action has no linked workflow, note the gap — the action is defined but not implemented.apush or myTask are a known bug pattern ($var references silently fail on these)."value": "production" → production-only path).workflow is the primary relationship link. Don't trace $var references across workflows.