From itential-builder
Reverse-engineers an Itential project by name or ID into customer-spec.md (inferred HLD) and solution-design.md (as-built LLD) from workflows, templates, and MOP components.
How this command is triggered — by the user, by Claude, or both
Slash command
/itential-builder:SKILL [project-name or project-id]skills/project-to-spec/The summary Claude sees in its command listing — used to decide when to auto-load this command
# Project to Spec **Purpose:** Read an existing project → produce documentation **Output:** `customer-spec.md` (inferred HLD) + `solution-design.md` (as-built LLD) **Feeds into:** Can be handed directly to `/solution-arch-agent` (design-only mode) or `/spec-agent` for refinement --- ## What This Does Takes an undocumented or partially-documented project and produces the spec and design documents that *should* have existed before it was built. The engineer reviews and corrects the inferred documents — then they can feed into the standard delivery lifecycle for updates, rebuilds, or knowl...
Purpose: Read an existing project → produce documentation
Output: customer-spec.md (inferred HLD) + solution-design.md (as-built LLD)
Feeds into: Can be handed directly to /solution-arch-agent (design-only mode) or /spec-agent for refinement
Takes an undocumented or partially-documented project and produces the spec and design documents that should have existed before it was built. The engineer reviews and corrects the inferred documents — then they can feed into the standard delivery lifecycle for updates, rebuilds, or knowledge transfer.
Existing Project
│
├── Pull all components (workflows, templates, MOP)
├── Read each workflow: tasks, adapters, transitions, data flows
├── Infer: business purpose, phases, inputs, outputs, integrations
│
├── customer-spec.md ← inferred HLD (engineer reviews + corrects)
└── solution-design.md ← as-built LLD (actual component inventory)
Ask the engineer for a project name or ID. Then pull the project:
GET /automation-studio/projects/{projectId}
Or search by name:
GET /automation-studio/projects?contains=name:{projectName}
Response: {message, data: {_id, name, components: [...], members: [...]}}
Save the project ID and component list.
For each component in the project, fetch the full document.
Workflows:
GET /automation-studio/workflows/detailed/{urlEncodedName}
Templates:
GET /automation-studio/templates/{id}
MOP Command Templates:
GET /mop/listATemplate/{name}
For each workflow, extract and save locally:
tasks — every task with name, app, adapter, incoming/outgoing variablestransitions — the flow between tasksinputSchema / outputSchema — what the workflow accepts and returnsSave to {use-case}/project-components.json.
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 the orchestrator and each child:
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 outcomescustomer-spec.mdWrite the inferred HLD. Use the standard spec structure but mark inferred sections clearly.
# Use Case: {Inferred Name}
> **Note:** This spec was produced by reading project `{projectName}` ({projectId}).
> Review and correct any inferences before using as a delivery baseline.
## 1. Problem Statement
{Inferred from workflow descriptions, adapter usage, and task summaries}
## 2. High-Level Flow
{Inferred from orchestrator transition graph}
## 3. Phases
{One section per major workflow / childJob cluster}
## 4. Key Design Decisions
{Inferred from adapter choices, error handling patterns, approval gates}
## 5. Scope
**In scope (as built):** {list components that exist}
**Not observed:** {common patterns not present — rollback, notifications, etc.}
## 6. Risks & Mitigations
{Inferred from error transitions, evaluation branches}
## 7. Requirements
### Capabilities
{Derived from apps and tasks used}
### Integrations
{Derived from adapter names and instance IDs}
## 8. Batch Strategy
{Inferred from childJob loopType usage}
## 9. Acceptance Criteria
{Inferred from outputSchema and evaluation checks}
solution-design.mdWrite the as-built LLD — this is factual, not inferred.
# Solution Design: {Project Name}
> **As-Built** — produced by reading project `{projectId}`.
## A. Environment Summary
{Platform, adapters found, apps used}
## B. Component Inventory
| # | Component | Type | Workflow/Template Name | ID |
|---|-----------|------|----------------------|-----|
| 1 | {name} | {workflow/template/mop} | {actual name} | {id} |
...
## C. Adapter Mappings
| Adapter | app name | adapter_id | Tasks Used |
|---------|----------|-----------|------------|
| ServiceNow | Servicenow | ServiceNow | createChangeRequest, updateChangeRequest |
...
## D. Workflow Structure
For each workflow: inputs, task sequence, outputs, error handling pattern.
## E. Data Flow
Key variables and how they move between tasks and workflows.
## F. Known Gaps
Patterns not present that are typically expected:
- No rollback logic observed
- No notifications (email/Teams)
- No audit trail
etc.
Show both documents and walk through:
/spec-agent to refine the requirements with the engineer/solution-arch-agent in design-only mode to produce an updated implementation planOrphaned tasks: Tasks with no useful summary — check their adapter/app and incoming variables to infer purpose.
Non-hex task IDs: If you encounter task IDs like apush or myTask, note them — these are a known bug pattern ($var references silently fail on these).
Deep nesting: childJob → childJob → childJob patterns indicate a modular design — document each layer separately.
Static values as indicators: Hard-coded strings in merge tasks or newVariable tasks often reveal business rules (e.g., "value": "production" → production-only path).
Missing error transitions: Note any adapter tasks without error transitions — this is a quality gap in the existing implementation.
@projectId: prefix — strip it when displaying to the engineerGET /automation-studio/workflows?exclude-project-members=false is needed to list project-owned workflowsdata field is a JSON string, not an object — parse it before analyzingworkflow field shows the child workflow name (with prefix) — this is the dependency graphnpx claudepluginhub itential/builder-skills/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.