mcpField
A
absolute-init

absolute-init

github.com/dhruvjaininエージェントワークフロー222147 回インストール6 日前に更新
リポジトリ

absolute-init について

absolute-initは、absoluteスキル群の一度限りのセットアップコマンドです。プロジェクトの慣習を検出して希望を確認し、既存設定を上書きせずJSON設定に反映します。自動コミットは行いません。

主な機能

  1. 01言語、ツール、プロジェクトスクリプトの検出
  2. 02出力、権限、TDDの希望を収集
  3. 03既存設定を壊さずにマージ
  4. 04プロジェクト設定とグローバル設定に対応
  5. 05他のコマンド向けに慣習を保存

活用シーン

  1. 01リポジトリでabsoluteを初めて設定
  2. 02技術スタックやスクリプト変更後の設定更新
  3. 03複数プロジェクトで使うコマンド設定の調整

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/dhruvjainin/absolute --skill absolute-init

インストール後、Claude Code で/absolute-initを入力して読み込まれたか確認します。

詳細

「set up/initialize/configure absolute」。 最初の応答は⚙️の絵文字で始めてください。

Absolute の初期化

一度だけ行うセットアップです。プロジェクトの実際の規約を検出し、absolute にどのように動作してほしいかをいくつか質問して、その内容を JSON 設定ファイルに書き込みます。他の 10 個のコマンドは、実行のたびにこの設定を読み込みます。これにより、各コマンドがスタックを一から再検出することなく、毎回指示しなくてもユーザーの好み(出力スタイル、ゲーティング、TDD の厳密さ)を尊重するようになります。

設定ファイルを書き込むのはこのコマンドだけです。破壊的な操作は行いません。既存の設定は表示して更新し、無条件に上書きすることはありません。コミットも行いません。


使用するタイミング

  • リポジトリで absolute を初めて使用するとき — 各コマンドがキャッシュされた規約とユーザーの好みを利用できるようになります。
  • 規約が変わったとき(新しいパッケージマネージャー、新しいテスト/lint スクリプト、ブランチ名の変更など)— 再実行して更新します。
  • プロジェクト全体で absolute の動作(出力スタイル、自律性)を変更したいとき。

他のコマンドは初期化しなくても問題なく動作します。オンザフライで検出し、初期化コマンドの実行を促す一行の提案を出します。初期化しておくと、より高速でプロジェクトに合わせた動作になります。


基本原則

  1. 質問より先にコードベースを確認します。 検出可能なものはすべて先に検出します。質問するのは、リポジトリから判断できないこと(好み、曖昧な選択肢)だけです。
  2. 質問は少数にとどめ、詰問しません。 最大で約 4〜6 問、一度に 1 問ずつです。これはセットアップであり、設計レビューではありません。
  3. 破壊的な操作は行いません。 既存の設定がある場合は表示し、変更ごとに確認してマージします。上書きはしません。
  4. 自動コミットは行いません。 プロジェクトファイルを書き込み、ユーザーにコミットするよう伝えます。(コミットポリシー自体は設定できません。absolute は決してコミットしません。)
  5. 設定は 2 階層で、プロジェクト設定が優先されます。 プロジェクト設定はチームで共有する正式な設定です。グローバル設定は個人用のデフォルト値と、プロジェクトごとの上書き設定です。

ステップ 1 — 検出

references/work.md の Codebase Convention Detection テーブルを使用して、スタックを自動検出します(パッケージマネージャー、言語/ランタイム、テストランナー、リンター/フォーマッター、ビルド、CI、利用可能なスクリプト)。それぞれをプロジェクト独自のスクリプト形式(npm test、make lint)に解決し、キャッシュするコマンドが生のツールではなく CI と一致するようにします。

実際の package.json の scripts や Makefile のターゲットを読み取り、test、lint、typecheck、format、build を設定します。git symbolic-ref --short refs/remotes/origin/HEAD でデフォルトブランチを検出します(見つからない場合は main)。確実に解決できない項目は省略して質問するか、設定から除外します。

また、依存関係とマーカーファイルから以下を検出します(何も見つからない場合はブロック全体を省略します)。

  • conventions.format — フォーマッタースクリプト:package.json の format/fmt スクリプト、Makefile の format ターゲット、ruff format、または gofmt。
  • conventions.ui — package.json の依存関係から検出します:framework(react/vue/svelte/none)、styling(tailwindcss → tailwind、css-modules、styled-components、それ以外は vanilla)、iconLibrary(lucide-react、@heroicons/、@phosphor-icons/、react-icons など)、componentLib(shadcn のマーカー/@mui/material → mui/@chakra-ui → chakra/none)、tokensPath(存在する場合はトークン/テーマ用の CSS または TS ファイルのパス)。リポジトリに UI 依存関係がない場合は省略します。
  • conventions.docs — absolute-docs のスタック検出用マーカーファイルテーブルを使って、stack と dir を検出します(source.config.ts/fumadocs、docusaurus.config.*、Starlight、mkdocs.yml、.vitepress/、Mintlify、それ以外は markdown)。ドキュメントがない場合は省略します。

ステップ 2 — 既存の設定を確認

何かを質問する前に、既存の設定があるか確認します(以下の優先順位に従います)。設定が見つかった場合は、現在の値を簡潔に表示し、更新する(デフォルト)か、新しく開始するかを尋ねます。ユーザーがワンキー入力で既存の値を維持できるよう、インタビューでは既存の値をデフォルトとして扱います。

ステップ 3 — インタビュー

すべての好みに関する質問には AskUserQuestion を使用します。選択肢は説明付きの構造化された形式で提示し、推奨/デフォルトの選択肢を先頭にして、ラベルに「(Recommended)」を付けます。質問は1つずつ行い、次に進む前に回答を待ちます。

質問(既存の設定で回答済みのものはスキップします。ただし、ユーザーが再設定を求めた場合は除きます):

Q1 — 出力スタイル

question: "Output style?"
header: "Output style"
options:
  - label: "normal (Recommended)"
    description: "Full prose, explanations — good for onboarding or unfamiliar codebases"
  - label: "terse"
    description: "Compressed, minimal prose — matches caveman mode"

Q2 — 自律性

question: "Autonomy level?"
header: "Autonomy"
options:
  - label: "gate-all (Recommended)"
    description: "Confirm before every change/wave — full control"
  - label: "auto-low-risk"
    description: "Auto-apply obviously-safe health waves, gate risky ones"

Q3 — TDD の厳格さ

question: "TDD strictness?"
header: "TDD"
options:
  - label: "strict (Recommended)"
    description: "Test-first, red→green — failing test must exist before any code"
  - label: "pragmatic"
    description: "Tests required but not strictly written first"

Q4 — 仕様/ドキュメントの出力ディレクトリ 自由記述で質問します:"Where should spec/work write design docs? (default: docs/plans)"。空欄の場合はデフォルトを維持します。

Q5 — 関連するファミリー

question: "Which command families do you use?"
header: "Families"
multiSelect: true
options:
  - label: "build (Recommended)"
    description: "work, spec, ui, simplify, docs"
  - label: "health (Recommended)"
    description: "upgrade, audit, prune, debt, deflake"

Q6 — 検出された規約の確認 検出された conventions ブロックをコードブロックで表示し、次のように質問します:"Are these correct? Reply with any corrections or press enter to accept."。空欄の場合はそのまま続行します。

ステップ 4 — 書き込み

リポジトリのルートに .absolute.config.json を書き込みます(2スペースで整形)。これはコミット対象のチーム共有ファイルです。その後、グローバルファイル ~/.absolute/config.json にも保存するか尋ねます:

  • defaults.preferences — プロジェクトをまたいで適用する好みのデフォルト値です。
  • projects["<absolute repo path>"] — プロジェクトごとの上書きエントリーです(マシンローカルで、コミットされません)。

既存のグローバルファイルに書き込む場合、関係のないキーは削除せずにマージします。書き込み後、ファイルパスを表示し、ユーザーに .absolute.config.json をコミットするよう伝えます(こちらではコミットしません)。


設定スキーマ

両方のファイルで conventions と preferences を使用し、グローバルファイルではそれらをラップします。

.absolute.config.json(プロジェクト用、コミット対象):

{
  "version": 1,
  "conventions": {
    "packageManager": "npm",
    "languages": ["typescript"],
    "test": "npm test",
    "lint": "npm run lint",
    "typecheck": "npm run typecheck",
    "format": "npm run format",
    "build": "npm run build",
    "ci": ".github/workflows/ci.yml",
    "defaultBranch": "main",
    "ui": {
      "framework": "react",
      "styling": "tailwind",
      "iconLibrary": "lucide-react",
      "componentLib": "shadcn",
      "tokensPath": "src/styles/tokens.css"
    },
    "docs": {
      "stack": "fumadocs",
      "dir": "docs"
    }
  },
  "preferences": {
    "outputStyle": "normal",
    "autonomy": "gate-all",
    "tdd": "strict",
    "specDir": "docs/plans",
    "boardTracking": "gitignored",
    "families": ["build", "health"],
    "health": {
      "protectedPaths": ["dist/**", "vendor/**", "**/*.generated.*"],
      "deflakeRuns": 20
    }
  }
}

conventions.ui と conventions.docs のブロックは、検出対象が何もない場合(UI 依存関係やドキュメントのスタックがない場合)は完全に省略され、ファイルは最小限に保たれます。

~/.absolute/config.json(ユーザー/グローバル用):

{
  "version": 1,
  "defaults": {
    "preferences": {
      "outputStyle": "normal",
      "autonomy": "gate-all",
      "tdd": "strict",
      "specDir": "docs/plans",
      "families": ["build", "health"]
    }
  },
  "projects": {
    "/Users/you/dev/your-repo": {
      "conventions": { "packageManager": "pnpm", "test": "pnpm test" },
      "preferences": { "outputStyle": "terse" }
    }
  }
}

フィールドの意味:

フィールド値効果
conventions.*文字列毎回再検出する代わりに、すべてのコマンドで使用するキャッシュ済みのスタック/スクリプトです。
conventions.format文字列フォーマッターのスクリプトです。simplify/debt は再検出の代わりにこれを実行します。
conventions.uiオブジェクトキャッシュ済みの framework/styling/iconLibrary/componentLib/tokensPath です。ui は Tailwind を前提としたりアイコンライブラリを推測したりする代わりに、これらを採用します。
conventions.docsオブジェクトキャッシュ済みのドキュメントの stack と dir です。docs はマーカーファイルの再検出をスキップします。
preferences.outputStylenormal | terseコマンド応答の冗長さです。
preferences.autonomygate-all | auto-low-riskヘルスコマンドが安全なウェーブを自動適用するかどうかです。
preferences.tddstrict | pragmaticwork のテストファーストの厳格さです。
preferences.specDirパスspec/work が設計ドキュメントを書き込む場所です。
preferences.boardTrackinggitignored | git-trackedwork の .absolute-work/board.md をコミットするかどうかです。受付のたびに尋ねる代わりに、一度設定します。
preferences.families["build","health"] の部分集合引数なしのメニューを、使用する項目だけに絞ります。
preferences.health.protectedPathsglob[]prune が順守する、削除禁止の glob(生成コード/ベンダーコード)です。
preferences.health.deflakeRunsint不安定さを判定するために deflake が使用する、繰り返し実行回数 N のデフォルト値です。

優先順位(コマンドによる設定の読み込み方法)

コマンドの開始時に、優先順位の高いものから設定を重ね合わせて有効な設定を解決します。

  1. ./.absolute.config.json(プロジェクト用、コミット対象)
  2. ~/.absolute/config.json → projects["<cwd absolute path>"]
  3. ~/.absolute/config.json → defaults

conventions と preferences はそれぞれ浅くマージします。ネストされた conventions.ui、conventions.docs、preferences.health のブロックは1階層深くマージするため、部分的な上書きによって兄弟キーが失われることはありません。設定が存在しない場合、設定は未定義となり、コマンドは init を控えめに推奨して、その場で検出を行います。


注意事項

  1. 手動調整した設定を上書きする。 必ず最初に RESOLVE を実行してください。上書きせず、マージしてください。
  2. 誤ったコマンドをキャッシュする。 CI と一致しない test/lint がキャッシュされると、その後のすべてのコマンドに悪影響を及ぼします。検出された各スクリプトが実際に実行できることを確認してください。
  3. グローバルファイルをコミットする。 ~/.absolute/config.json はマシン固有です。コミットするのは .absolute.config.json のみです。
  4. 古い規約を使い続ける。 ブランチ名の変更やパッケージマネージャーの切り替えにより、コマンドの振り分けが気付かないうちに誤る可能性があります。スタックを変更した後は init を再実行してください。
  5. init を必須条件として扱う。 必須ではありません。init を実行しなくてもコマンドは続行されます。init は前提条件ではなく、最適化のためのものです。

関連コマンド

  • /absolute work — キャッシュされた規約と tdd/autonomy/boardTracking の設定を主に利用します。
  • /absolute spec — 規約を再検出せず、conventions と specDir を読み取ります。
  • /absolute ui — conventions.ui(フレームワーク、スタイリング、アイコンライブラリ、トークンのパス)を読み取ります。
  • /absolute simplify — 自動検証のため、キャッシュされた test/lint/format/typecheck を読み取ります。
  • /absolute docs — マーカーを再検出せず、conventions.docs(スタック、ディレクトリ)を読み取ります。
  • /absolute-upgrade|audit|prune|debt|deflake — ヘルス関連コマンド群は、DETECT に conventions を、ゲーティングに autonomy を、また preferences.health.*(prune の protectedPaths、deflake の deflakeRuns)を読み取ります。
  • 規約や設定を変更したときは、いつでも /absolute init を再実行してください。

コメント