Projects(プロジェクト)
プロジェクトとは、明確な目標と終了状態を持つ取り組みです。Area(継続的な活動)とは異なります。プロジェクトは保管庫内のフォルダと、タスクバックエンド上のプロジェクトがペアになっています。フォルダはプロジェクトの意味を保持し、バックエンドはそのタスク(tasks.md)を保持します。すべてのタスク呼び出しは tasks.md の操作であり、TASKS のアダプタに従って実行されます。
基本レイヤー
行動する前に、以下のファイルを読み込んでください(各ファイルはこのスキルのベースディレクトリからの相対パス ../../para/<ファイル>.md にあります)。これらのファイルには共有ルールが含まれているため、記憶から再述してはいけません。
../../para/paths.md— 常に。特に「言語」: 以下の文字列はlang/<LANG>.mdから取得します。../../para/tasks.md— 常に。操作、ペアリング、タスクとは何か。../../para/find-target.md—overviewおよびtask用。../../para/note-format.md—create用。すべてのサブコマンドで「レガシーフィールド」を参照。../../para/project-id.md—create用。../../para/dod.md—create(project.dodセクションの作成)およびoverview用。../../para/thresholds.md—listおよびoverview用: プロジェクトの順序、陳腐化、ホライゾン、タスク数、出力サイズ。../../para/confirm.md—createおよびtaskは書き込み(Tier 1);listおよびoverviewは書き込みなし。../../para/move.md—createで、競合する可能性のあるフォルダを作成する前に使用。
サブコマンド
$ARGUMENTS の最初の単語でサブコマンドを決定します: list、create、overview、task。これらのいずれでもない場合は、言い回しから意図を判断し、選択したサブコマンドを伝えてください。$ARGUMENTS が空の場合は list を実行し、その後どうするか尋ねてください。
すべてのサブコマンドは、タスクバックエンドより前に作成されたプロジェクト(status、Tasks/(note-format.md にレガシーである場合の条件あり)、tasks_ref フィールドなし)を扱います。note-format.md の「レガシーフィールド」の指示に従って読み取り、報告のみ行い、決して書き換えてはいけません。
create <説明> — プロジェクトを開始する
入力: プロジェクトの内容、目標、期限、最初のステップ。空の場合は、プロジェクトの内容と目標を尋ねてください。
-
Templates/Project.mdをディスクから読み込みます。 そのまま。 -
note-format.mdに従ってタイトルを生成します。 これは3つの方法で使用されます:titleと H1(ID プレフィックスなし)、および — プレフィックス付きで — フォルダ名と概要ファイル名として。note-format.mdに従ってshort(短縮形)を提案します。 -
project-id.mdに従って ID を発行します。 -
Projects/の下にフォルダ構造を作成します:PROJ-xxxx <タイトル>/ ├── PROJ-xxxx <タイトル>.md ← 概要、Templates/Project.md から ├── Notes/ ├── Resources/ └── Results/3つのサブフォルダすべて、空でも作成します。
Tasks/は作成しません(TASKS = filesの場合、アダプタが最初のタスクとともに作成します)。 -
note-format.mdの Project 行に従ってフロントマターを記入します。createdは今日の日付。deadlineは説明に期限がある場合のみ。tasks_refはステップ7まで空白のまま(pairing: noneの場合はフィールド自体を省略)。 -
本文を記入します:
project.goalセクション — 目標 / 望ましい終了状態。必須。project.valueセクション — ユーザーが得られるもの、測定可能または明確なもの(note-format.md、「成果に関する3つのセクション」)。必須。 これかproject.goalのどちらかが入力から明確でない場合は、書き込み前に1つの質問で両方を尋ねてください(confirm.md、Tier 1.5)。project.problemセクション — プロジェクトのきっかけ。project.expected_resultセクション — 具体的な成果物とその保存場所。project.scopeセクション — ユーザーが指定した項目のみ。通常は空: リサーチタスクが埋めます(tasks.md「リサーチタスク」)。project.dodセクション —dod.mdに従ったチェックボックス。説明から実際のチェック項目を導き出せない場合は、project.goalが不足している場合と同様に尋ねてください。common.linksセクション — 明確に関連するノートへのウィキリンク。それ以外はテンプレートの-。
-
tasks.md「ペアリング」に従ってペアを作成します:project.createをタイトルと ID で呼び出します。pairing: separateの場合、返されたrefをtasks_ref:に書き込みます。呼び出しが失敗した場合は、その旨を伝えます: フォルダはペアなしのまま残り、/projects taskで後でペアを作成できるようにします。pairing: noneの場合はペアもtasks_refも存在しません: 書き込みをスキップします。 -
新しいプロジェクトの最初のタスク(日付なし):
tasks.md「リサーチタスク」に従ったリサーチタスクを 常に 作成します。ただし、ユーザーがすでに完全なスコープを指定している場合は、代わりにproject.scopeセクションに書き込みます。- ユーザーが明示的に指定したステップを、
task.addで追加し、「タスクとは」に従って表現します。アクションとして表現できないステップは、タスクではなくリサーチのための質問です。
ユーザーが指定しなかったステップを決して発明してはいけません。
-
報告します: フォルダパス、ID、タイトル、
short(変更を提案)、期限、目標、価値の一文、バックエンドのプロジェクト名、作成されたタスク。
入力が終わりのない継続的な責任を説明している場合、これはプロジェクトではありません — その旨を伝え、代わりに /areas create を提案します。ユーザーが着手することを決めていないアイデアの場合は、まだプロジェクトではないと伝え(tasks.md「ペアリング」)、受信箱(inbox.name)に残すことを提案します。
task <プロジェクト> <タスク> — タスクを追加する
find-target.mdに従ってプロジェクトを検索します。 操作「プロジェクトにタスクを追加」。ターゲットはareas.mdのAREA_TASK_PROJECTSからの Area プロジェクトの場合もあります — 名前で一致させます。- 追加先を解決します: Area プロジェクト →
area。それ以外は、概要のtasks_ref→project_ref(pairing: noneの場合はプロジェクトフォルダがrefであり、このステップは単にプロジェクトです)。pairing: separateで概要にtasks_refがない場合 →task.unpaired文字列を表示し、作成を提案します(createのステップ7)。承諾されたらペアを作成し、続行します。タスクを保管庫内に書き込むことは絶対にしないでください。
tasks.md「タスクとは」に従ってタスクを表現します。 ユーザーの表現がすでに適合している場合はそのまま使用します。そうでなければ、言い換えたバージョンを告知文で提案します。アクションにできない場合は、次のステップを尋ねてください(Tier 1.5)。task.addを呼び出します。project_refまたはarea(TASKS = filesの場合、取得したベース名が衝突するとnote-format.md「名前の衝突」に従い、サイレントサフィックスなしで尋ねます): テキスト、より長い説明、durationは指定された場合のみ。日付のルールはtasks.md「フィールド」。- 報告します: タスクとプロジェクト。
overview <プロジェクト> — プロジェクトの状況
読み取り専用。 保管庫にもバックエンドにも何も書き込みません。要約で修正すべき点が見つかった場合は、その旨を伝え、ユーザーに決定を委ねます。
-
find-target.mdに従ってプロジェクトを検索します。 操作「報告」。引数がない場合は、プロジェクトを一覧表示して尋ねます。 -
概要ノートを読み取ります: フロントマターとセクション
project.goal、project.value、project.expected_result、project.dod、common.links。空白のフィールドは空白として報告し、推測で埋めてはいけません。 -
タスクを読み取ります(
task.list、未完了): 日付と所要時間。thresholds.md「タスク数」に従って数を計算します。pairing: separateでペアがない場合はスキップし、task.unpaired文字列を表示します。 -
Notes/全体(およびResults/、何かあれば)をthresholds.mdの上限まで読み取ります。 ここに実際の決定とリスクが存在します。 -
レガシー。 概要に
status/priority/value/estimateがある場合、またはフォルダにレガシーなTasks/(note-format.md)がある場合、1行追加します(overview.legacy文字列)。{fields}はstatus, Tasks/ (3 files)のようになります(フォルダ数はoverview.legacy_tasks文字列)。存在するものだけを名前指定します。進行状況のためにタスクノートを読まないでください。移行によって何が生き残るかが決まります。 -
シグナル — 発火したものだけを報告:
- プロジェクトの
deadlineが過ぎている、またはthresholds.mdのホライゾン内にある。 - 期限切れのタスク — 超過日数を表示。
- 期限がホライゾン内にあるのにスケジュールされたタスクがない。
- 日付があるが所要時間がないタスク。
thresholds.mdのプロジェクトしきい値より長い沈黙(ペアがある場合はproject.activity、ない場合は mtime、thresholds.mdに従って測定)。common.linksセクションのぶら下がりウィキリンク。- プロジェクトがまだ
Projects/にあるのにすべての受入基準がチェックされている — 完了しているのにクローズされていない。
- プロジェクトの
-
LANGでチャットにレンダリング。 ラベルはlang/<LANG>.md文字列で、以下のテンプレートではキーが中括弧で囲まれています。以下は英語の文字列で示します:## PROJ-0001 · プロジェクトA **{overview.area}** エリアA · **{overview.deadline}** 2026-10-31 — 14日 **{overview.tasks}** {count.scheduled} 3 · {count.overdue} 1 · {count.backlog} 6 **{overview.acceptance}** ☑☐☐ 1/3 ### {overview.essence} <目標、1-2文。> <期待される結果 — 1行。> <価値 — 1行。> ### {overview.scheduled} - **仕入先にメールを書く** — 火 10-21, 30分 - **フォームに記入する** — 2日超過, 1時間 ### {overview.backlog} - 予約をする - …他 3件 ### {overview.digest} - <Notes/ からの重要な決定または結論 — あなたの言葉で。> ### {overview.signals} - 期限まで14日、スケジュールされたタスクなし中括弧はキーであり、リテラルテキストではありません: 各キーが表す文字列を出力します。日付は
common.date形式(2026-10-31; 短縮形common.date_shortでは10-31、タスク行ではcommon.weekdaysからの曜日と共に使用)。期限までの日数はcommon.days。単位の略語はcommon.unit.*。期限切れのタスクにはtask.overdue_by文字列。バックログの末尾はoverview.backlog_more文字列({n}= 表示されないタスク数)。overview.backlogセクションは、thresholds.mdの上限まで最も古い日付なしタスクを表示します。空になるセクションやフィールドは削除します。空のResults/は正常な状態です。
list — プロジェクト一覧
読み取り専用。 プロジェクトごとに1行。一覧であり、要約ではありません: Notes/ を開くことはありません。
-
Projects/直下のフォルダを列挙します。 アーカイブされたプロジェクトは一覧表示されません — それは/archive listの役割です。 -
概要のフロントマターを読み取ります:
id、title、area、deadline、および(pairing: separateの場合)tasks_ref。フロントマターがないフォルダはコンベンション前のものです — フォルダ名とcommon.no_metadata文字列で表示します。 -
refを持つ各プロジェクトのタスクを読み取ります(task.listをproject_refで、未完了)。thresholds.md「タスク数」に従ってカウントします。 -
thresholds.md「プロジェクトの順序」に従って並べ替えます。 -
LANGでレンダリングします。list.*、count.*、task.unpaired文字列を使用。行はコンパクトなので、バックログ数はcount.backlog_short(ヘッダーlist.header、期限はlist.untilと日付をcommon.date_shortで、thresholds.mdのホライゾン内の場合はその後ろに(14 d)と残り日数とcommon.unit.day)。以下は英語の文字列で示します:**プロジェクト (4)** 1. PROJ-0008 プロジェクトA — エリアA · 期限 10-31 (14 d) · 予定 2 · バックログ 3 2. PROJ-0020 プロジェクトB — 期限 10-31 (14 d) · 予定 0 · バックログ 3 3. PROJ-0009 プロジェクトC — エリアB · 期限 02-28 · タスクマネージャーにペアなし · 旧形式 4. PROJ-0027 プロジェクトD — バックログ空 保管庫にペアなし: 「プロジェクトE」- 期限が過ぎている場合:
list.deadline_passed文字列。 - レガシーフィールドがある場合、またはレガシーな
Tasks/がある場合:list.legacy文字列。 - バックログが空のプロジェクト:
list.backlog_empty文字列。 - 最終行(
list.orphans)は、どの概要も指していないバックエンドプロジェクトを、tasks.md「テーブルに関する注意」のproject.listから見つけて表示。空の場合、またはアダプタがproject.listをサポートしていない場合は削除。 - 空白のフィールドは削除し、プレースホルダーは出力しないでください。空の
Projects/は有効な答えです: そのまま表示します。
- 期限が過ぎている場合:
アーカイブおよびコンベンション前のプロジェクト
Archive/ 内のプロジェクトは、コンベンションより前のものである可能性があります: フロントマターなし、PROJ-xxxx プレフィックスなし、サブフォルダなし。ノートから project.goal セクションを読み取り、タスクセクションと overview.acceptance をスキップし、アーカイブされていて旧形式であることを明確に表示します。
注意事項
- 計算し、推定しない: 日数、タスク数、期限超過期間はバックエンド、ファイル、および今日のシステム日付から取得します。フィールドが空白のために計算できない場合は、推測ではなく空白と表示します。
- 要約は状態を報告します。ユーザーを判断しません。「5日超過」と表示し、「あなたはプロジェクトを放棄した」とは表示しません。
- すべて
LANGで、タスクも含みます。