Slack Block Kit の新ブロックを試してみた【エージェント編】
2026 年に入ってから、Slack の Block Kit に新しいブロックが続々と追加されています。本シリーズでは、これらの新ブロックを実際に試しながら紹介していきます。
- 第 1 弾: データ編
- 第 2 弾: 汎用表示編
- 第 3 弾: エージェント編(本記事)
- 第 4 弾: ストリーミング編
- 第 5 弾: 検証・CI 編
今回は第 3 弾として、エージェント系ブロックである task_card / plan / context_actions の 3 つを紹介します。これらはエージェントの思考過程とタスク進捗、そして応答へのフィードバック手段を Slack ネイティブの UI で表示できるブロック群です。
3 つのブロックの概要
| ブロック | 追加時期 | 用途 |
|---|---|---|
| task_card | 2026 年 2 月 11 日[1] | 単一タスクの進捗表示 |
| plan | 2026 年 2 月 11 日[1:1] | 複数タスクをまとめた計画の表示 |
| context_actions | 2025 年 10 月 7 日[2] | AI 応答へのフィードバックボタン等の表示 |
task_card と plan は同時に追加されたもので、LLM ツールでおなじみの「Thinking...」の表示を Slack アプリでも実現するためのブロックです。
これらはストリーミング API と組み合わせて逐次更新する設計になっていますが、その連携は第 4 弾のストリーミング編で扱います。本記事ではまず、各ブロックが単体でどう表示されるかを確認します。
なお、検証は前回同様 Block Kit Builder で行います。
task_card block
単一のタスクをステータスインジケーター付きで表示するブロックです[3]。
| 項目 | 内容 |
|---|---|
task_id |
必須。タスクの ID |
title |
必須。タスクのタイトル。plain text 形式 |
status |
必須。in_progress / complete / error |
details |
タスクの詳細。単一の rich_text 形式 |
output |
タスクの出力。単一の rich_text 形式 |
sources |
応答の生成に使った URL source element の配列。クリック可能な参照リンクとして表示される |
icon |
タスクに関連付けるアイコン |
hide_title |
true にすると title が非表示になり、details が先頭要素になる。この場合も title 自体は必須 |
{
"blocks": [
{
"type": "task_card",
"task_id": "task_1",
"title": "社内ドキュメントを検索中",
"status": "in_progress",
"output": {
"type": "rich_text",
"elements": [
{
"type": "rich_text_section",
"elements": [
{ "type": "text", "text": "経費精算に関するページが 3 件見つかりました" }
]
}
]
},
"sources": [
{ "type": "url", "url": "https://example.com/wiki/keihi", "text": "経費精算ガイド" }
]
}
]
}

plan block
複数の task をまとめて 1 つの計画として表示するブロックです[4]。
| 項目 | 内容 |
|---|---|
title |
必須。計画のタイトル。plain text 形式 |
tasks |
必須。タスクの配列で最大 50 件。各要素は task_card と同じ構造だが type は持たない。task_id は plan 内で一意にする必要あり |
エージェントが「これから何をするか」「どこまで進んだか」を見せる、いわゆる思考過程の表示はこのブロックが担います。
{
"blocks": [
{
"type": "plan",
"title": "経費精算の質問に回答中",
"tasks": [
{
"task_id": "step_1",
"title": "質問の意図を分析",
"status": "complete",
"output": {
"type": "rich_text",
"elements": [
{
"type": "rich_text_section",
"elements": [
{ "type": "text", "text": "「出張費の精算期限」に関する質問と判定" }
]
}
]
}
},
{
"task_id": "step_2",
"title": "社内ドキュメントを検索",
"status": "in_progress"
},
{
"task_id": "step_3",
"title": "回答を生成",
"status": "pending"
}
]
}
]
}

context_actions block
AI 応答の末尾に、フィードバックボタンなどの小さな操作要素を並べるブロックです[5]。
| 項目 | 内容 |
|---|---|
elements |
必須。feedback buttons element と icon button element の配列。最大 5 個 |
block_id |
インタラクションペイロードで操作元を特定するために使える |
置ける要素は 2 種類だけです。feedback_buttons は 👍 / 👎 のペアで応答への評価を受け取り、icon_button は削除などの単一アクションを提供します。
{
"blocks": [
{
"type": "context_actions",
"elements": [
{
"type": "feedback_buttons",
"action_id": "answer_feedback",
"positive_button": {
"text": { "type": "plain_text", "text": "👍" },
"value": "positive_feedback"
},
"negative_button": {
"text": { "type": "plain_text", "text": "👎" },
"value": "negative_feedback"
}
}
]
}
]
}

第 1 弾で紹介した data_table などの表示系ブロックと違い、こちらの要素は action_id を持ちます。つまりユーザーの操作が block_actions ペイロードとしてアプリに届く、従来のボタンと同じ操作系のブロックです。フィードバックの収集から評価データの蓄積までアプリ側で実装できます。
まとめ
本記事では、エージェント系の 3 ブロックを紹介しました。
これまで Slack におけるエージェントの進捗表示といえば、メッセージを何度も編集・上書きする実装が基本でしたが、plan block の登場によって綺麗な実装が可能になりましたね。
一方で、これらのブロックの本領は、ストリーミング API でタスクを逐次更新していく使い方にあります。次回の第 4 弾はストリーミング編として、chat.startStream をはじめとするストリーミング API でブロックの逐次更新を試します。お楽しみに!
https://docs.slack.dev/changelog/2026/02/11/task-cards-plan-blocks ↩︎ ↩︎
https://docs.slack.dev/changelog/2025/10/7/chat-streaming ↩︎
https://docs.slack.dev/reference/block-kit/blocks/task-card-block ↩︎
https://docs.slack.dev/reference/block-kit/blocks/plan-block ↩︎
https://docs.slack.dev/reference/block-kit/blocks/context-actions-block ↩︎










