mcpField
M
memory-tasks

memory-tasks

github.com/basicmachines-coエージェントワークフロー23593 回インストール28 週間前に更新
リポジトリ

memory-tasks について

Memory Tasksは、進行中の作業をBasic Memoryのナレッジグラフにスキーマ検証付きのタスクノートとして記録するスキルです。長期タスク、コンテキスト圧縮、セッション再起動をまたいで進捗を保持できます。

主な機能

  1. 01タスクを型付きノートとして作成
  2. 02スキーマに沿ってタスクを検証
  3. 03状態、優先度、現在の手順を記録
  4. 04圧縮後にアクティブなタスクを再開
  5. 05関連項目をリレーションで接続
  6. 06進捗に応じてタスクのコンテキストを更新

活用シーン

  1. 01複数手順の作業項目を記録
  2. 02セッション再起動後にタスクを再開
  3. 03コンテキスト圧縮前に進捗を保存
  4. 04進行中またはブロック中のタスクを検索・検証

インストール

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

$npx skills add https://github.com/basicmachines-co/basic-memory-skills --skill memory-tasks

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

詳細

タスクの記憶

Basic Memory のスキーマシステムを使って、進行中の作業を管理します。タスクは type: Task を持つ単なるノートです。ナレッジグラフに保存され、スキーマに照らして検証され、コンテキストの圧縮後も保持されます。

使用するタイミング

  • 複数の手順がある作業を開始するとき(3 つ以上の手順がある場合、またはコンテキストウィンドウを超えて続く可能性がある作業)
  • 圧縮後/再起動後 — アクティブなタスクを検索して再開します
  • 圧縮前のフラッシュ時 — すべてのアクティブなタスクを現在の状態に更新します
  • 必要に応じて — ユーザーからタスクの作成、確認、管理を依頼されたとき

タスクスキーマ

タスクでは BM のスキーマシステム(SPEC-SCHEMA)を使用します。スキーマノートは memory/schema/Task.md にあります。

---
title: Task
type: schema
entity: Task
version: 1
schema:
  description: string, what needs to be done
  status?(enum): [active, blocked, done, abandoned], current state
  assigned_to?: string, who is working on this
  steps?(array): string, ordered steps to complete
  current_step?: integer, which step number we're on (1-indexed)
  context?: string, key context needed to resume after memory loss
  started?: string, when work began
  completed?: string, when work finished
  blockers?(array): string, what's preventing progress
  parent_task?: Task, parent task if this is a subtask
settings:
  validation: warn
---

タスクの作成

作業が条件に当てはまる場合は、タスクノートを作成します。write_note を note_type="Task" とともに使用し、クエリ可能なフィールドを metadata に記述します。

write_note(
  title="Descriptive task name",
  directory="tasks",
  note_type="Task",
  metadata={
    "status": "active",
    "priority": "high",
    "current_step": 1,
    "steps": ["First step", "Second step", "Third step"]
  },
  tags=["task"],
  content="""# Descriptive task name

## Observations
- [description] What needs to be done, concisely
- [status] active
- [assigned_to] claude
- [current_step] 1

## Steps
1. [ ] First concrete step
2. [ ] Second concrete step
3. [ ] Third concrete step

## Context
What future-you needs to pick up this work. Include:
- Key file paths and repos involved
- Decisions already made and why
- What was tried and what worked/didn't
- Where to look for related context"""
)

フロントマターと観察事項の両方に記述するのはなぜですか? metadata のフィールド(フロントマターとして保存)は、metadata_filters を使った search_notes の検索に利用されます。観察事項として記述したフィールド(- [status] active)は、schema_validate での検証に利用されます。完全に網羅するため、クエリ可能なフィールドは両方に含めてください。

主な原則
  • 手順は具体的で、確認可能なものにします — 「X をファイル Y に実装する」とし、「いろいろ調べる」とはしません
  • コンテキストは、記憶がない状態から再開するためのものです — これまでの作業を知らない聡明な人に説明するつもりで記述します
  • リレーションは他のエンティティにリンクします — parent_task [[Other Task]]、related_to [[Some Note]]
  • note_types は大文字と小文字を区別します — write_note(note_type="Task") は、フロントマターでタイプを小文字の task として保存します。検索クエリでは小文字の note_types=["task"] を使用してください

圧縮後の再開

セッション開始時、または圧縮後に次の手順を実行します。

  1. アクティブなタスクを検索します。

    search_notes(note_types=["task"], status="active")
    
  2. タスクノートを読み、全体のコンテキストを確認します

  3. context フィールドを使い、current_step から作業を再開します

  4. 進捗に合わせて更新します — current_step を進め、コンテキストを更新し、手順にチェックを付けます

タスクの更新

作業の進捗に合わせて、タスクノートを更新します。

## Steps
1. [x] First step — done, resulted in X
2. [x] Second step — done, changed approach because Y
3. [ ] Third step — next up

## Context
Updated context reflecting current state...

フロントマターも更新します。

current_step: 3

タスクの完了

完了したら、次のようにします。

status: done
completed: YYYY-MM-DD

達成したことと、必要なフォローアップを簡潔にまとめて追加します。

圧縮前のフラッシュ

圧縮イベントが間近に迫ったら、次の手順を実行します。

  1. すべてのアクティブなタスクを見つけます:search_notes(note_types=["task"], status="active")
  2. 各タスクについて、次の項目を更新します。
    • 実際の進捗を反映するように current_step を更新します
    • 再開に必要な情報をすべて context に記述します
    • 完了した手順が分かるようにチェックボックスを更新します
  3. これは非常に重要です — 書き留めていないコンテキストは失われます

タスクの検索

BM のスキーマシステムを使うと、タスクを自在に検索できます。

クエリ検索結果
search_notes(note_types=["task"])すべてのタスク
search_notes(note_types=["task"], status="active")アクティブなタスク
search_notes(note_types=["task"], status="blocked")ブロック中のタスク
search_notes(note_types=["task"], metadata_filters={"assigned_to": "claude"})自分のタスク
search_notes("blockers", note_types=["task"])ブロッカーがあるタスク
schema_validate(noteType="Task")すべてのタスクをスキーマに照らして検証
schema_diff(noteType="Task")スキーマと実際のタスクノートとの間のずれを検出

ガイドライン

  • 作業単位ごとにタスクを 1 つ作成します — 複数のプロジェクトを 1 つのタスクに詰め込まないでください
  • 早めに外部化します — 「これは覚えておこう」と思ったら、今すぐ書き留めます
  • 手順よりコンテキストを重視します — 手順は何をするかを示し、コンテキストはその理由と方法を示します
  • 完了したタスクをクローズします — 完了した作業を active のままにしないでください
  • 関連するタスクをリンクします — parent_task [[X]] またはリレーションを使って、関連する作業をつなげます
  • スキーマ検証を活用します — 定期的に schema_validate(noteType="Task") を実行し、不完全なタスクを見つけます

コメント