@geekbeer/minion 4.1.3 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -809,20 +809,22 @@ Base path: All endpoints are prefixed with `/api/minion` by the agent's API clie
809
809
  |--------|----------|-------------|
810
810
  | GET | `/api/minion/me/projects` | 参加プロジェクト一覧(role 含む) |
811
811
 
812
+ Query parameters:
813
+ - `workspace_id` (optional, UUID): 指定したワークスペースに属するプロジェクトのみ返す。省略すると参加している全プロジェクト(複数ワークスペース横断)を返す。
814
+
812
815
  Response:
813
816
  ```json
814
- [
815
- {
816
- "id": "uuid",
817
- "name": "project-name",
818
- "description": "...",
819
- "github_owner": "org",
820
- "github_repo": "repo",
821
- "role": "pm",
822
- "created_at": "...",
823
- "updated_at": "..."
824
- }
825
- ]
817
+ {
818
+ "projects": [
819
+ {
820
+ "id": "uuid",
821
+ "name": "project-name",
822
+ "description": "...",
823
+ "workspace_id": "uuid",
824
+ "role": "pm"
825
+ }
826
+ ]
827
+ }
826
828
  ```
827
829
 
828
830
  `role` is one of `"pm"` (project manager), `"engineer"`, or `"accountant"`.
@@ -2107,56 +2109,74 @@ DAGスキルノードの `skill_version_id` は **オプション** です。
2107
2109
  ローカルエージェントの `/api/project-memories` は上記 HQ API へのプロキシ。
2108
2110
  詳細なリクエスト/レスポンス仕様はローカル API セクションの「Project Memories」を参照。
2109
2111
 
2110
- ### Notes (HQ, プロジェクトノート)
2112
+ ### Notes (HQ, ワークスペース/プロジェクトノート)
2113
+
2114
+ ノートはワークスペース直下に保存され、任意で 1 つ以上のプロジェクトにリンクできる(`note_project_links`)。
2115
+ **テキストベースの成果物(レポート、調査結果、要約等)はノートに保存すること。** HQダッシュボードでユーザーが即座に閲覧・編集・検索でき、バージョン管理もされる。
2116
+
2117
+ ミニオンには**ワークスペース経由API**と**プロジェクト経由API**の2系統がある:
2111
2118
 
2112
- プロジェクトに紐づくノート。**テキストベースの成果物(レポート、調査結果、要約等)はノートに保存すること。**
2113
- ノートはHQダッシュボードでユーザーが即座に閲覧・編集・検索でき、バージョン管理もされる。
2119
+ - **ワークスペース経由** — 自分が所属するワークスペース内のすべてのノートにアクセス可能 (プロジェクト未リンクのノート含む)。一般的な検索・整理に使う
2120
+ - **プロジェクト経由** — 作業コンテキストが特定プロジェクトに紐づいているときに、そのプロジェクトのノートだけを絞り込む用途。プロジェクトメンバーシップで認可される
2121
+
2122
+ **削除エンドポイントは存在しない**(事故防止のため人間操作限定)。アーカイブが必要な場合は `status=archived` で PATCH すること。
2123
+
2124
+ #### Workspace-scoped Notes
2114
2125
 
2115
2126
  | Method | Endpoint | Description |
2116
2127
  |--------|----------|-------------|
2117
- | GET | `/api/minion/projects/:projectId/notes` | プロジェクトのノート一覧。Query: `?status=active&include_content=true` |
2118
- | POST | `/api/minion/projects/:projectId/notes` | ノートを作成しプロジェクトにリンク |
2119
- | GET | `/api/minion/projects/:projectId/notes/:noteId` | ノート詳細(全文含む) |
2120
- | PATCH | `/api/minion/projects/:projectId/notes/:noteId` | ノートを更新(内容変更時にバージョン自動作成) |
2121
- | GET | `/api/minion/projects/:projectId/notes/search?q=keyword` | ノートを全文検索 |
2128
+ | GET | `/api/minion/workspaces/:id/notes` | ワークスペースのノート一覧。Query: `?status=active&search=&project_id=&include_content=true` |
2129
+ | POST | `/api/minion/workspaces/:id/notes` | ノート作成。Body: `{title, content?, project_ids?: string[]}`。`project_ids` 指定時は自動でリンク |
2130
+ | GET | `/api/minion/workspaces/:id/notes/:noteId` | ノート詳細(全文) |
2131
+ | PATCH | `/api/minion/workspaces/:id/notes/:noteId` | 更新(内容変更時にバージョン自動作成)。Body: `{title?, content?, status?, change_summary?}` |
2132
+ | GET | `/api/minion/workspaces/:id/notes/search?q=keyword` | ワークスペース全体を全文検索 |
2122
2133
 
2123
- POST `/api/minion/projects/:projectId/notes` body:
2134
+ POST `/api/minion/workspaces/:id/notes` body:
2124
2135
  ```json
2125
2136
  {
2126
2137
  "title": "調査レポート: ユーザー行動分析",
2127
- "content": "## 概要\n..."
2138
+ "content": "## 概要\n...",
2139
+ "project_ids": ["<uuid>"]
2128
2140
  }
2129
2141
  ```
2130
2142
 
2131
2143
  | Field | Type | Required | Description |
2132
2144
  |-------|------|----------|-------------|
2133
- | `title` | string | Yes | ノートのタイトル |
2134
- | `content` | string | No | ノートの本文(Markdown |
2145
+ | `title` | string | Yes | ワークスペース内で一意である必要がある |
2146
+ | `content` | string | No | Markdown本文 |
2147
+ | `project_ids` | string[] | No | リンクするプロジェクト(ワークスペースに属している必要あり) |
2135
2148
 
2136
- PATCH `/api/minion/projects/:projectId/notes/:noteId` body:
2137
- ```json
2138
- {
2139
- "title": "更新されたタイトル",
2140
- "content": "更新された本文",
2141
- "change_summary": "データを追加"
2142
- }
2143
- ```
2149
+ #### Project-scoped Notes
2144
2150
 
2145
- | Field | Type | Required | Description |
2146
- |-------|------|----------|-------------|
2147
- | `title` | string | No | 新しいタイトル |
2148
- | `content` | string | No | 新しい本文 |
2149
- | `change_summary` | string | No | 変更の要約(バージョン履歴に記録) |
2151
+ 特定プロジェクトのノートだけを絞り込みたいときに使う。認可は `project_members` を経由。
2152
+
2153
+ | Method | Endpoint | Description |
2154
+ |--------|----------|-------------|
2155
+ | GET | `/api/minion/projects/:projectId/notes` | プロジェクトのノート一覧。Query: `?status=active&include_content=true` |
2156
+ | POST | `/api/minion/projects/:projectId/notes` | ノート作成 + 当該プロジェクトに自動リンク |
2157
+ | GET | `/api/minion/projects/:projectId/notes/:noteId` | ノート詳細(全文含む) |
2158
+ | PATCH | `/api/minion/projects/:projectId/notes/:noteId` | ノートを更新(内容変更時にバージョン自動作成) |
2159
+ | GET | `/api/minion/projects/:projectId/notes/search?q=keyword` | プロジェクト内のノートを全文検索 |
2160
+
2161
+ PATCH body は workspace 版と共通: `{title?, content?, change_summary?}` (status は workspace 経由のみ受理)。
2150
2162
 
2151
2163
  #### hq CLI ラッパー
2152
2164
 
2153
2165
  ```bash
2166
+ # プロジェクトスコープ
2154
2167
  hq note create <project_id> --title "タイトル" --content "本文"
2155
2168
  hq note create <project_id> --title "タイトル" --file /tmp/report.md
2156
2169
  hq note update <project_id> <note_id> --content "更新内容" --change-summary "修正理由"
2157
2170
  hq note list <project_id>
2158
2171
  hq note get <project_id> <note_id>
2159
2172
  hq note search <project_id> "キーワード"
2173
+
2174
+ # ワークスペーススコープ (プロジェクト紐づけなしも対象)
2175
+ hq note create --workspace <workspace_id> --title "タイトル" --content "本文"
2176
+ hq note update --workspace <workspace_id> <note_id> --content "更新内容"
2177
+ hq note list --workspace <workspace_id>
2178
+ hq note get --workspace <workspace_id> <note_id>
2179
+ hq note search --workspace <workspace_id> "キーワード"
2160
2180
  ```
2161
2181
 
2162
2182
  ### Meeting Rooms 🧪 (HQ, experimental, v3.59.0〜)
package/linux/bin/hq CHANGED
@@ -19,12 +19,17 @@
19
19
  # hq list workspaces - List workspaces this minion belongs to
20
20
  # hq list dag-workflows [project_id] - List DAG workflows (optionally filter by project)
21
21
  # hq note create <project_id> --title "Title" --content "Body" [--file path]
22
- # - Create a note linked to the project
22
+ # hq note create --workspace <workspace_id> --title "Title" --content "Body" [--file path] [--project-ids <id,id>]
23
+ # - Create a note (project- or workspace-scoped)
23
24
  # hq note update <project_id> <note_id> --content "Body" [--title "Title"] [--file path] [--change-summary "summary"]
25
+ # hq note update --workspace <workspace_id> <note_id> --content "Body" [--title "Title"] [--status active|archived]
24
26
  # - Update an existing note
25
27
  # hq note list <project_id> - List notes in the project
28
+ # hq note list --workspace <workspace_id> - List notes in the workspace (incl. project-unlinked)
26
29
  # hq note get <project_id> <note_id> - Get a single note with full content
30
+ # hq note get --workspace <workspace_id> <note_id> - Same, workspace-scoped
27
31
  # hq note search <project_id> <query> - Search notes in the project
32
+ # hq note search --workspace <workspace_id> <query> - Search across the whole workspace
28
33
  # hq create dag-workflow <body.json> - Create a DAG workflow (PM only). Body: {project_id, name, graph?, ...}
29
34
  # hq put dag-workflow <id> <body.json> - Update DAG workflow draft (PM only). Body: {graph?, content?, ...}
30
35
  # hq publish dag-workflow <id> - Publish the draft as a new version (PM only, validated)
@@ -163,10 +168,15 @@ print_usage() {
163
168
  echo " hq list workspaces - List workspaces this minion belongs to" >&2
164
169
  echo " hq list dag-workflows [project_id] - List DAG workflows (optionally by project)" >&2
165
170
  echo " hq note create <project_id> --title \"Title\" --content \"Body\" [--file path]" >&2
171
+ echo " hq note create --workspace <ws_id> --title \"Title\" --content \"Body\" [--project-ids <id,id>]" >&2
166
172
  echo " hq note update <project_id> <note_id> --content \"Body\" [--title \"Title\"] [--file path]" >&2
167
- echo " hq note list <project_id> - List notes in the project" >&2
168
- echo " hq note get <project_id> <note_id> - Get a single note" >&2
169
- echo " hq note search <project_id> <query> - Search notes in the project" >&2
173
+ echo " hq note update --workspace <ws_id> <note_id> --content \"Body\" [--title \"Title\"] [--status active|archived]" >&2
174
+ echo " hq note list <project_id> - List notes in the project" >&2
175
+ echo " hq note list --workspace <ws_id> - List notes in the workspace" >&2
176
+ echo " hq note get <project_id> <note_id> - Get a single note" >&2
177
+ echo " hq note get --workspace <ws_id> <note_id> - Get a single note (workspace-scoped)" >&2
178
+ echo " hq note search <project_id> <query> - Search notes in the project" >&2
179
+ echo " hq note search --workspace <ws_id> <query> - Search notes across the workspace" >&2
170
180
  echo " hq create dag-workflow <body.json> - Create a DAG workflow (PM only)" >&2
171
181
  echo " hq put dag-workflow <id> <body.json> - Update DAG workflow draft (PM only)" >&2
172
182
  echo " hq publish dag-workflow <id> - Publish the draft as a new version (PM only)" >&2
@@ -310,22 +320,38 @@ case "${1:-}" in
310
320
 
311
321
  note)
312
322
  action="${2:-}"
323
+ shift 2 || true
324
+ # Resolve scope: either "--workspace <ws_id>" (must be first) or positional <project_id>.
325
+ note_base=""
326
+ if [ "${1:-}" = "--workspace" ]; then
327
+ ws_id="${2:-}"
328
+ if [ -z "$ws_id" ]; then
329
+ echo "Error: --workspace requires a workspace_id" >&2
330
+ exit 1
331
+ fi
332
+ note_base="$BASE_URL/workspaces/$ws_id/notes"
333
+ shift 2
334
+ else
335
+ project_id="${1:-}"
336
+ if [ -z "$project_id" ] || [ "${project_id#--}" != "$project_id" ]; then
337
+ echo "Usage: hq note $action <project_id> ... | hq note $action --workspace <ws_id> ..." >&2
338
+ exit 1
339
+ fi
340
+ note_base="$BASE_URL/projects/$project_id/notes"
341
+ shift
342
+ fi
313
343
  case "$action" in
314
344
  create)
315
- project_id="${3:-}"
316
- if [ -z "$project_id" ]; then
317
- echo "Usage: hq note create <project_id> --title \"Title\" --content \"Body\" [--file path]" >&2
318
- exit 1
319
- fi
320
- shift 3
321
345
  note_title=""
322
346
  note_content=""
323
347
  note_file=""
348
+ project_ids_csv=""
324
349
  while [ $# -gt 0 ]; do
325
350
  case "$1" in
326
351
  --title) note_title="$2"; shift 2 ;;
327
352
  --content) note_content="$2"; shift 2 ;;
328
353
  --file) note_file="$2"; shift 2 ;;
354
+ --project-ids) project_ids_csv="$2"; shift 2 ;;
329
355
  *) echo "Unknown option: $1" >&2; exit 1 ;;
330
356
  esac
331
357
  done
@@ -344,38 +370,47 @@ case "${1:-}" in
344
370
  echo "Error: --content or --file is required" >&2
345
371
  exit 1
346
372
  fi
347
- # Build JSON body using jq or python3
348
373
  if command -v jq &>/dev/null; then
349
374
  body=$(jq -n --arg t "$note_title" --arg c "$note_content" '{title: $t, content: $c}')
375
+ if [ -n "$project_ids_csv" ]; then
376
+ body=$(echo "$body" | jq --arg ids "$project_ids_csv" '. + {project_ids: ($ids | split(","))}')
377
+ fi
350
378
  elif command -v python3 &>/dev/null; then
351
- body=$(python3 -c "import json,sys; print(json.dumps({'title': sys.argv[1], 'content': sys.argv[2]}))" "$note_title" "$note_content")
379
+ body=$(python3 -c "
380
+ import json, sys
381
+ d = {'title': sys.argv[1], 'content': sys.argv[2]}
382
+ if sys.argv[3]:
383
+ d['project_ids'] = [s for s in sys.argv[3].split(',') if s]
384
+ print(json.dumps(d))
385
+ " "$note_title" "$note_content" "$project_ids_csv")
352
386
  else
353
387
  echo "Error: jq or python3 is required to build JSON" >&2
354
388
  exit 1
355
389
  fi
356
390
  tmpfile=$(mktemp)
357
391
  echo "$body" > "$tmpfile"
358
- send_json_request POST "$BASE_URL/projects/$project_id/notes" "$tmpfile"
392
+ send_json_request POST "$note_base" "$tmpfile"
359
393
  rm -f "$tmpfile"
360
394
  ;;
361
395
  update)
362
- project_id="${3:-}"
363
- note_id="${4:-}"
364
- if [ -z "$project_id" ] || [ -z "$note_id" ]; then
365
- echo "Usage: hq note update <project_id> <note_id> --content \"Body\" [--title \"Title\"] [--file path] [--change-summary \"summary\"]" >&2
396
+ note_id="${1:-}"
397
+ if [ -z "$note_id" ]; then
398
+ echo "Error: <note_id> is required" >&2
366
399
  exit 1
367
400
  fi
368
- shift 4
401
+ shift
369
402
  note_title=""
370
403
  note_content=""
371
404
  note_file=""
372
405
  change_summary=""
406
+ note_status=""
373
407
  while [ $# -gt 0 ]; do
374
408
  case "$1" in
375
409
  --title) note_title="$2"; shift 2 ;;
376
410
  --content) note_content="$2"; shift 2 ;;
377
411
  --file) note_file="$2"; shift 2 ;;
378
412
  --change-summary) change_summary="$2"; shift 2 ;;
413
+ --status) note_status="$2"; shift 2 ;;
379
414
  *) echo "Unknown option: $1" >&2; exit 1 ;;
380
415
  esac
381
416
  done
@@ -386,16 +421,16 @@ case "${1:-}" in
386
421
  fi
387
422
  note_content=$(cat "$note_file")
388
423
  fi
389
- if [ -z "$note_content" ] && [ -z "$note_title" ]; then
390
- echo "Error: at least --content, --file, or --title is required" >&2
424
+ if [ -z "$note_content" ] && [ -z "$note_title" ] && [ -z "$note_status" ]; then
425
+ echo "Error: at least --content, --file, --title, or --status is required" >&2
391
426
  exit 1
392
427
  fi
393
- # Build JSON body
394
428
  if command -v jq &>/dev/null; then
395
429
  body="{}"
396
430
  [ -n "$note_title" ] && body=$(echo "$body" | jq --arg t "$note_title" '. + {title: $t}')
397
431
  [ -n "$note_content" ] && body=$(echo "$body" | jq --arg c "$note_content" '. + {content: $c}')
398
432
  [ -n "$change_summary" ] && body=$(echo "$body" | jq --arg s "$change_summary" '. + {change_summary: $s}')
433
+ [ -n "$note_status" ] && body=$(echo "$body" | jq --arg st "$note_status" '. + {status: $st}')
399
434
  elif command -v python3 &>/dev/null; then
400
435
  body=$(python3 -c "
401
436
  import json, sys
@@ -403,20 +438,20 @@ d = {}
403
438
  if sys.argv[1]: d['title'] = sys.argv[1]
404
439
  if sys.argv[2]: d['content'] = sys.argv[2]
405
440
  if sys.argv[3]: d['change_summary'] = sys.argv[3]
441
+ if sys.argv[4]: d['status'] = sys.argv[4]
406
442
  print(json.dumps(d))
407
- " "$note_title" "$note_content" "$change_summary")
443
+ " "$note_title" "$note_content" "$change_summary" "$note_status")
408
444
  else
409
445
  echo "Error: jq or python3 is required to build JSON" >&2
410
446
  exit 1
411
447
  fi
412
448
  tmpfile=$(mktemp)
413
449
  echo "$body" > "$tmpfile"
414
- # Use PATCH for update
415
450
  response=$(curl -s -w "\n%{http_code}" -X PATCH \
416
451
  -H "Authorization: Bearer $API_TOKEN" \
417
452
  -H "Content-Type: application/json" \
418
453
  --data-binary "@$tmpfile" \
419
- "$BASE_URL/projects/$project_id/notes/$note_id")
454
+ "$note_base/$note_id")
420
455
  rm -f "$tmpfile"
421
456
  http_code=$(echo "$response" | tail -1)
422
457
  body_out=$(echo "$response" | sed '$d')
@@ -429,30 +464,22 @@ print(json.dumps(d))
429
464
  fi
430
465
  ;;
431
466
  list)
432
- project_id="${3:-}"
433
- if [ -z "$project_id" ]; then
434
- echo "Usage: hq note list <project_id>" >&2
435
- exit 1
436
- fi
437
- fetch_resource "$BASE_URL/projects/$project_id/notes?include_content=false"
467
+ fetch_resource "$note_base?include_content=false"
438
468
  ;;
439
469
  get)
440
- project_id="${3:-}"
441
- note_id="${4:-}"
442
- if [ -z "$project_id" ] || [ -z "$note_id" ]; then
443
- echo "Usage: hq note get <project_id> <note_id>" >&2
470
+ note_id="${1:-}"
471
+ if [ -z "$note_id" ]; then
472
+ echo "Error: <note_id> is required" >&2
444
473
  exit 1
445
474
  fi
446
- fetch_resource "$BASE_URL/projects/$project_id/notes/$note_id"
475
+ fetch_resource "$note_base/$note_id"
447
476
  ;;
448
477
  search)
449
- project_id="${3:-}"
450
- query="${4:-}"
451
- if [ -z "$project_id" ] || [ -z "$query" ]; then
452
- echo "Usage: hq note search <project_id> <query>" >&2
478
+ query="${1:-}"
479
+ if [ -z "$query" ]; then
480
+ echo "Error: <query> is required" >&2
453
481
  exit 1
454
482
  fi
455
- # URL-encode the query
456
483
  if command -v jq &>/dev/null; then
457
484
  encoded=$(printf '%s' "$query" | jq -sRr @uri)
458
485
  elif command -v python3 &>/dev/null; then
@@ -460,7 +487,7 @@ print(json.dumps(d))
460
487
  else
461
488
  encoded="$query"
462
489
  fi
463
- fetch_resource "$BASE_URL/projects/$project_id/notes/search?q=$encoded"
490
+ fetch_resource "$note_base/search?q=$encoded"
464
491
  ;;
465
492
  *)
466
493
  echo "Unknown note action: $action" >&2
@@ -391,7 +391,7 @@ async function buildContextPrefix(message, context, sessionId, workspaceId, refe
391
391
  '[ファイル出力ルール]',
392
392
  '成果物の保存先は以下のルールに従うこと。`/home/minion/` 直下にファイルを保存しないこと。',
393
393
  '',
394
- '- **テキスト成果物**(レポート、調査結果、要約等)→ ノートに保存: `hq note create <project_id> --title "タイトル" --content "本文"`',
394
+ '- **テキスト成果物**(レポート、調査結果、要約等)→ ノートに保存: `hq note create <project_id> --title "タイトル" --content "本文"` (プロジェクト紐づけなしは `hq note create --workspace <ws_id> ...`)',
395
395
  '- **バイナリファイル**(PDF、画像、ZIP等)→ `~/files/` に配置(ユーザーがHQからダウンロード可能)',
396
396
  '- **一時ファイル** → `/tmp/` に配置(作業後に削除)',
397
397
  '',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geekbeer/minion",
3
- "version": "4.1.3",
3
+ "version": "4.2.0",
4
4
  "description": "AI Agent runtime for Minion - manages status and skill deployment on VPS",
5
5
  "main": "linux/server.js",
6
6
  "bin": {
package/rules/core.md CHANGED
@@ -445,28 +445,32 @@ display_name が同じユーザーが同一ワークスペースに複数いる
445
445
 
446
446
  ### ノートへの保存 (`hq note` コマンド)
447
447
 
448
- テキストベースの成果物は原則ノートに保存する。ノートはプロジェクトに紐づき、HQダッシュボードで閲覧できる。
448
+ テキストベースの成果物は原則ノートに保存する。ノートはワークスペース直下に保存され、任意で 1 つ以上のプロジェクトにリンクできる。HQダッシュボードで閲覧・編集・検索でき、バージョン管理もされる。
449
+
450
+ スコープの使い分け:
451
+
452
+ - **プロジェクトスコープ** — 作業がプロジェクトに紐づくとき (`hq note ... <project_id>`)。プロジェクトのノートタブから即発見できる
453
+ - **ワークスペーススコープ** — プロジェクトに紐づかない一般的なメモや、ワークスペース横断で検索したいとき (`hq note ... --workspace <workspace_id>`)。プロジェクト未指定でも作成・検索できる
449
454
 
450
455
  ```bash
451
- # ノートを作成(プロジェクトに紐づけ)
456
+ # プロジェクトスコープ(作業コンテキストが特定プロジェクト)
452
457
  hq note create <project_id> --title "レポートタイトル" --content "本文..."
453
-
454
- # 長い内容はファイルから読み込む
455
458
  hq note create <project_id> --title "調査結果" --file /tmp/report.md
456
-
457
- # 既存ノートを更新
458
459
  hq note update <project_id> <note_id> --content "更新された内容"
459
-
460
- # ノート一覧を確認
461
460
  hq note list <project_id>
462
-
463
- # ノート内容を取得
464
461
  hq note get <project_id> <note_id>
465
-
466
- # ノートを検索
467
462
  hq note search <project_id> "キーワード"
463
+
464
+ # ワークスペーススコープ(プロジェクト未紐づけのノート含む)
465
+ hq note create --workspace <workspace_id> --title "メモ" --content "..."
466
+ hq note update --workspace <workspace_id> <note_id> --content "更新内容"
467
+ hq note list --workspace <workspace_id>
468
+ hq note get --workspace <workspace_id> <note_id>
469
+ hq note search --workspace <workspace_id> "キーワード"
468
470
  ```
469
471
 
472
+ **削除はミニオンから実行できない**(事故防止のため人間操作限定)。不要なノートは `hq note update ... --status archived` (または PATCH の `status: "archived"`) でアーカイブすること。
473
+
470
474
  ### ノート内のユーザーメンション
471
475
 
472
476
  人間ユーザーがノート編集UIで `Ctrl+I` を押すと、自分の発言を示すアバター付きチップが行頭に挿入される。マークダウン上は次の形式で永続化される:
@@ -452,7 +452,7 @@ async function buildContextPrefix(message, context, sessionId, workspaceId, refe
452
452
  '[ファイル出力ルール]',
453
453
  '成果物の保存先は以下のルールに従うこと。`/home/minion/` 直下にファイルを保存しないこと。',
454
454
  '',
455
- '- **テキスト成果物**(レポート、調査結果、要約等)→ ノートに保存: `hq note create <project_id> --title "タイトル" --content "本文"`',
455
+ '- **テキスト成果物**(レポート、調査結果、要約等)→ ノートに保存: `hq note create <project_id> --title "タイトル" --content "本文"` (プロジェクト紐づけなしは `hq note create --workspace <ws_id> ...`)',
456
456
  '- **バイナリファイル**(PDF、画像、ZIP等)→ `~/files/` に配置(ユーザーがHQからダウンロード可能)',
457
457
  '- **一時ファイル** → `/tmp/` に配置(作業後に削除)',
458
458
  '',