From avila-tek-skill-pack
Generates a complete Functional Spec document (Spec Funcional) from a design document (PDF, DOCX, or MD). Use this skill whenever the user wants to create, draft, or generate a functional specification, functional spec, spec funcional, or "spec" from a design doc, design document, epic design, wireframe description, or any written product/feature description. Also trigger when the user says things like "generate the spec from this doc", "create a functional spec", "write the spec for this feature", "turn this design into a spec", "dame el spec funcional", "genera el spec de esta épica", or any variation. If the user uploads a PDF, DOCX, or MD file alongside a request to produce a spec or functional document, always use this skill.
npx claudepluginhub avila-tek/avila-tek-skill-packThis skill uses the workspace's default tool permissions.
Generates a complete **Spec Funcional** document from a written design document (PDF, DOCX, or MD).
Mandates invoking relevant skills via tools before any response in coding sessions. Covers access, priorities, and adaptations for Claude Code, Copilot CLI, Gemini CLI.
Share bugs, ideas, or general feedback.
Generates a complete Spec Funcional document from a written design document (PDF, DOCX, or MD).
Audience: mixed stakeholders (developers, QA, product managers).
Output format: Markdown (.md) — default for Lark Wiki compatibility.
Output language: always Spanish, regardless of the input document language.
Locate the source document using this priority order:
docs/inputs/ in the project repo (preferred for Claude Code — e.g. docs/inputs/design_doc.pdf)/mnt/user-data/uploads/ (Claude Desktop uploads)If no path is specified, check docs/inputs/ first before asking the user.
Determine the file type from the path and extract text accordingly.
PDF:
from pypdf import PdfReader
r = PdfReader("docs/inputs/<file>.pdf")
text = "\n".join(page.extract_text() for page in r.pages)
print(text)
DOCX:
pandoc docs/inputs/<file>.docx -t markdown
MD / TXT:
cat docs/inputs/<file>.md
Always read the full document before generating anything.
If the tool mcp__plugin_figma_figma__get_design_context is available in this session, ask the user: "¿Tienes un link de Figma del diseño? Si lo tienes, puedo leerlo y usarlo como input adicional." If the user provides a Figma URL, read the design using that tool and incorporate it as supplementary input alongside the design doc. If not available or the user declines, skip this step.
The design doc may describe multiple epics. If the user named a specific one, extract only that epic's content. If no epic was specified and there are multiple, ask the user which one to spec.
Before writing, identify from the design doc:
While analyzing, collect every gap — any field required by the template that the doc does not explicitly answer. Do not assume, infer, or invent. Record each gap as a question tied to its section.
Before writing a single line of the spec, present all collected gaps to the user as questions, grouped by section. Format:
Antes de generar el spec, tengo algunas preguntas sobre información que no encontré en el documento. Puedes responderlas o escribir "omitir" para dejarlo pendiente de definición.
**Sección 1 — Resumen ejecutivo y objetivo**
1. ¿Cuáles son las métricas de éxito (KPIs) para esta épica?
**Sección 3 — Actores y roles**
2. ¿Hay servicios de terceros o integraciones externas involucradas?
**Sección 5 — Flujos**
3. En el Flujo A, ¿qué ocurre cuando el usuario X hace Y?
...
Rules for this step:
[PENDIENTE: debe definirse — <pregunta original>] in the corresponding section of the generated document.Populate ALL 9 sections using the canonical template below. The structure is mandatory and fixed — never add, remove, or rename sections. Write the output always in Spanish.
Every piece of content in the spec must come directly and explicitly from the design doc or the user's answers in Step 4. Never invent, infer, assume, or extrapolate.
[PENDIENTE: debe definirse — <pregunta]. This is the only acceptable way to handle gaps.- **Objetivo de la épica:** [contenido].The template below defines the exact output structure. All section names and field labels are in Spanish and must be reproduced exactly as written here.
# Spec Funcional: [Nombre de la Épica]
| Proyecto | Responsable | Editores | Estado |
|----------|-------------|----------|--------|
| [valor] | [valor] | [valor] | [valor]|
Máximo 3 bullets cortos. Sin párrafo introductorio. Cada bullet máximo 1 línea.
Reglas globales que rigen toda la funcionalidad, independientemente del flujo específico. Solo incluir reglas que impactan directamente la programación o la definición de épicas/HUs. Excluir cualquier regla que ya esté cubierta en criterios de aceptación (sección 9). Si una regla describe un comportamiento verificable en QA, pertenece a la sección 9, no aquí.
Repeat for each flow (N flows total).
Flujo [A]: [Nombre del Flujo]
Detalles del Flujo [A]:
Solo listar integraciones explícitamente mencionadas en el design doc. No inventar endpoints, parámetros ni comportamientos no descritos. Repeat for each integration (N integrations total).
[Nombre del Servicio/API]
Write the spec as a Markdown file. The Spec Funcional lives in Lark Wiki — it does NOT go in the repo.
Claude Desktop: write to /mnt/user-data/outputs/spec_funcional_<epic_name>.md, then tell the user to upload it to Lark Wiki under the project's Design Docs space.
Claude Code: present the document in the conversation for the user to copy into Lark Wiki. Optionally write a local copy to docs/inputs/spec_funcional_<epic_name>.md only if the user explicitly requests a local reference copy.
Formatting:
# for the document title, ## for section headers, ### for flow and integration sub-headers.- **Label:** value format.present_files with the output path.[PENDIENTE: debe definirse — <pregunta>] in the relevant sectionTemplate source: /mnt/skills/functional-spec-generator/references/template.md
For reading input files: /mnt/skills/public/file-reading/SKILL.md
Before writing a single word of content: ask yourself for each field — "Is this explicitly in the design doc or confirmed by the user?" If no → it becomes a question in Step 4. If the user skipped it → [PENDIENTE: debe definirse — <pregunta>].