Speckit Constitution

dceoy/speckit-agent-skills/skills/speckit-constitution

作者 dceoy52e6e7d8e03d3907b3f582e2dfdbb60c233f0bb0無授權條款146 個星標收錄於 2026年10月9日更新於 2026年10月9日儲存庫10 天前更新

Create or update the project constitution from interactive or provided principle inputs.

僅含說明AI & Agents
AI 產生的概覽

依據提供或推斷的原則建立或更新 Spec Kit 專案憲章檔案。

功能
此技能負責起草並改寫位於 .specify/memory/constitution.md 的專案憲章,並透過 Spec Kit 範本堆疊解析目前生效的範本。它會以具體的原則與治理文字取代佔位符,依語意化版本規則調整憲章版本,並以 HTML 註解形式寫入暫時的同步影響報告。最後輸出摘要,說明版本變更理由、待辦佔位項目與建議的提交訊息。
適用情境
適用於 Spec Kit 專案需要建立初始憲章,或需要修訂現有原則與治理規則的情境。也適合對部分原則更新進行驗證並決定版本號。不適用於功能實作、程式碼產生或部署類工作。
執行需求
需要具備 .specify/ 目錄的 Spec Kit 專案結構,包括範本解析指令碼與憲章範本。會讀取選用的 .specify/extensions.yml 掛鉤,並可能呼叫已註冊的掛鉤指令。此技能不附帶指令碼,僅為指示說明。

User Input

text
$ARGUMENTS

You MUST consider the user input before proceeding (if not empty).

Scope Guard

This command's own work is limited to updating the project constitution itself. Dependent templates and commands read the constitution at runtime and are not modified here.

  • Classify every part of the user input as either constitution content or a separate, non-governance intent.
  • If the input includes feature implementation, code generation, refactoring, building, or deployment requests, you MUST NOT execute them. Extract them as deferred intents instead.
  • You MUST NOT create, modify, or delete application source files, feature routes, components, tests, deployment files, or other artifacts unrelated to the constitution workflow.
  • If it is unclear whether an instruction is constitution content, ask for clarification before making changes.
  • After completing the constitution update, include a Next Actions section for each deferred intent. List the original intent and suggest the appropriate follow-up Spec Kit command, such as /speckit-specify, without invoking it.
  • If there are no non-governance intents, omit the Next Actions section.

Pre-Execution Checks

Check for extension hooks (before constitution update):

  • Check if .specify/extensions.yml exists in the project root.
  • If it exists, read it and look for entries under the hooks.before_constitution key
  • If the YAML cannot be parsed or is invalid, do not skip silently: tell the user that .specify/extensions.yml could not be read (include the parser error) and that no hooks were checked, including any mandatory (optional: false) hooks registered there, then continue normally
  • Filter out hooks where enabled is explicitly false. Treat hooks without an enabled field as enabled by default.
  • For each remaining hook, do not attempt to interpret or evaluate hook condition expressions:
    • If the hook has no condition field, or it is null/empty, treat the hook as executable
    • If the hook defines a non-empty condition, skip the hook and leave condition evaluation to the HookExecutor implementation
  • When constructing command invocations from hook command names, replace dots (.) with hyphens (-). For example, speckit.git.commit → /speckit-git-commit.
  • For each executable hook, output the following based on its optional flag:
    • Optional hook (optional: true):

      text
      ## Extension Hooks
      **Optional Pre-Hook**: {extension}Command: `/{command}`Description: {description}
      Prompt: {prompt}To execute: `/{command}`
    • Mandatory hook (optional: false):

      text
      ## Extension Hooks
      **Automatic Pre-Hook**: {extension}Executing: `/{command}`EXECUTE_COMMAND: {command}
      Wait for the result of the hook command before proceeding to the Outline.

      After emitting the block above you MUST actually invoke the hook and wait for it to finish before continuing. Run it the same way you would run the command yourself in this agent/session (the invocation may differ from the literal {command} id shown above, e.g. a skills-mode agent runs it as /skill:speckit-... or $speckit-...). Emitting the block alone does not run the hook.

  • If no hooks are registered or .specify/extensions.yml does not exist, skip silently

Outline

You are updating the project constitution at .specify/memory/constitution.md. The active constitution scaffold is resolved at command time from constitution-template through the Spec Kit preset/template resolution stack.

Follow this execution flow:

  1. Run .specify/scripts/bash/resolve-template.sh constitution-template --json from the repository root and parse TEMPLATE_CONTENT as the active template.

    • The shared resolver applies project overrides, composing preset layers, and extension layers before the core template fallback. It MUST succeed before continuing.
    • If it fails, stop and report the resolution error; do not continue with only one contributing template layer.
    • If .specify/memory/constitution.md exists, load it as the source of current project-specific values and amendments. Preserve information that is still applicable when applying the newly resolved scaffold.
    • If it does not exist, use the resolved template as the initial document.
    • Do not write back to any versioned template layer.
    • Identify every placeholder token of the form [ALL_CAPS_IDENTIFIER]. IMPORTANT: The user might require less or more principles than the ones used in the template. If a number is specified, respect that - follow the general template. You will update the doc accordingly.
  2. Collect/derive values for placeholders:

    • If user input (conversation) supplies a value, use it.
    • Otherwise infer from existing repo context (README, docs, prior constitution versions if embedded).
    • For governance dates: RATIFICATION_DATE is the original adoption date (if unknown ask or mark TODO), LAST_AMENDED_DATE is today if changes are made, otherwise keep previous.
    • CONSTITUTION_VERSION must increment according to semantic versioning rules:
      • MAJOR: Backward incompatible governance/principle removals or redefinitions.
      • MINOR: New principle/section added or materially expanded guidance.
      • PATCH: Clarifications, wording, typo fixes, non-semantic refinements.
    • If version bump type ambiguous, propose reasoning before finalizing.
  3. Draft the updated constitution content using the resolved template as the required structure:

    • Replace every placeholder with concrete text (no bracketed tokens left except intentionally retained template slots that the project has chosen not to define yet—explicitly justify any left).
    • Preserve heading hierarchy and comments can be removed once replaced unless they still add clarifying guidance.
    • Ensure each Principle section: succinct name line, paragraph (or bullet list) capturing non‑negotiable rules, explicit rationale if not obvious.
    • Ensure Governance section lists amendment procedure, versioning policy, and compliance review expectations.
  4. Produce a Sync Impact Report as an HTML comment at the top of the constitution file after update. This report is temporary scratch material for human review of the amendment, not governance content; it is expected to be removed before the amended constitution file is committed.

    • Version change: old → new
    • List of modified principles (old title → new title if renamed)
    • Added sections
    • Removed sections
    • Follow-up TODOs if any placeholders intentionally deferred.
  5. Validation before final output:

    • No remaining unexplained bracket tokens.
    • Version line matches report.
    • Dates ISO format YYYY-MM-DD.
    • Principles are declarative, testable, and free of vague language ("should" → replace with MUST/SHOULD rationale where appropriate).
  6. Write the completed constitution back to .specify/memory/constitution.md (overwrite).

  7. Output a final summary to the user with:

    • New version and bump rationale.
    • Any TODO placeholders or deferred items requiring manual follow-up.
    • Suggested commit message (e.g., docs: amend constitution to vX.Y.Z (principle additions + governance update)).
    • A Next Actions section for any deferred non-governance intents.

Formatting & Style Requirements:

  • Use Markdown headings exactly as in the template (do not demote/promote levels).
  • Wrap long rationale lines to keep readability (<100 chars ideally) but do not hard enforce with awkward breaks.
  • Keep a single blank line between sections.
  • Avoid trailing whitespace.

If the user supplies partial updates (e.g., only one principle revision), still perform validation and version decision steps.

If critical info missing (e.g., ratification date truly unknown), insert TODO(<FIELD_NAME>): explanation and include in the Sync Impact Report under deferred items.

Write only .specify/memory/constitution.md; do not create or modify template source files.

Post-Execution Checks

Check for extension hooks (after constitution update): Check if .specify/extensions.yml exists in the project root.

  • If it exists, read it and look for entries under the hooks.after_constitution key
  • If the YAML cannot be parsed or is invalid, do not skip silently: tell the user that .specify/extensions.yml could not be read (include the parser error) and that no hooks were checked, including any mandatory (optional: false) hooks registered there, then continue normally
  • Filter out hooks where enabled is explicitly false. Treat hooks without an enabled field as enabled by default.
  • For each remaining hook, do not attempt to interpret or evaluate hook condition expressions:
    • If the hook has no condition field, or it is null/empty, treat the hook as executable
    • If the hook defines a non-empty condition, skip the hook and leave condition evaluation to the HookExecutor implementation
  • When constructing command invocations from hook command names, replace dots (.) with hyphens (-). For example, speckit.git.commit → /speckit-git-commit.
  • For each executable hook, output the following based on its optional flag:
    • Optional hook (optional: true):

      text
      ## Extension Hooks
      **Optional Hook**: {extension}Command: `/{command}`Description: {description}
      Prompt: {prompt}To execute: `/{command}`
    • Mandatory hook (optional: false):

      text
      ## Extension Hooks
      **Automatic Hook**: {extension}Executing: `/{command}`EXECUTE_COMMAND: {command}

      After emitting the block above you MUST actually invoke the hook and wait for it to finish before continuing. Run it the same way you would run the command yourself in this agent/session (the invocation may differ from the literal {command} id shown above, e.g. a skills-mode agent runs it as /skill:speckit-... or $speckit-...). Emitting the block alone does not run the hook.

  • If no hooks are registered or .specify/extensions.yml does not exist, skip silently

來源與署名

來源:dceoy/speckit-agent-skills位於skills/speckit-constitution提交52e6e7d

授權條款: 無授權條款

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架