複数のAIエージェントが共同作業する際の、作業ルートの確認、判断理由の記録、担当者への相談、レビューで差し戻した成果物の担当変更を定めるスキル。
- 別々の作業場所で共有ファイルを探す
- 他の担当に関わる判断の記録
- 別の専門担当に相談したいとき
GitHubのIssue・コメント・レビューに載せるMarkdownを型付きツリーで組み立て、安全な形式やメタデータを保ちながら一度の描画で公開する作業を支援します。
Build and refactor issue, comment, and review bodies in actions/setup/js using typed report trees and a single publication render.
実行スコア 未検証
インストール方法を見るGitHubのIssue、コメント、レビューに掲載するMarkdownを、文字列の連結ではなく型付きのレポートツリーとして組み立てる作業を支援します。見出し、段落、表、コードブロック、アラートなどを構造として扱い、本文やフッター、帰属情報、実行メタデータを含む文書全体を一度に描画します。既存Markdownの取り込みやテンプレートへの値の挿入にも対応し、メンションやリンクの制限、文字数上限、コメント更新時の追記・置換など、公開時の条件を保つための方針を示します。
GitHub Actionsなどの処理結果をIssueやコメントへ投稿するコードを整えたいときに向いています。既存の本文生成処理を構造化したい場合や、エージェント由来の内容とフレームワーク側の注記を区別して扱いたい場合にも使えます。Jira ADFのようにMarkdownではないデータは別形式として扱う方針です。
既存実装では actions/setup/js/report_ast.cjs などの定義と公開APIを使います。検証には対象のVitestスイート、npm run typecheck、JavaScriptの整形・lintが記載されています。Jira ADFテキストはMarkdownとして解析・描画しません。
この紹介文は、公開されている SKILL.md をもとに AI(OpenAI Codex)が作成しました。正確な仕様は下の原文を確認してください。
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Use this skill when generating or changing Markdown published to issues, comments,
or reviews, especially in actions/setup/js/. Build a Report tree first; render
only the complete document. Do not assemble Markdown using interpolation,
concatenation, body +=, or arrays of Markdown strings joined with newlines.
Parsing an assembled string afterward is not a tree-first refactor.
Search production .cjs files for issues.create, issues.update,
createComment, updateComment, createReview, createReplyForReviewComment,
and GraphQL body variables. Trace each body back through shared helpers, fallback
comments, retries, staged previews, and append/prepend/replace-island updates.
Exclude test fixtures, HTTP payload assembly, and step-summary-only output.
Jira ADF text is not Markdown: preserve its literal entities, Unicode, and
paragraphs instead of routing it through the Markdown parser or renderer.
actions/setup/js/report_ast.cjs defines Report, ReportBlock, and ReportInline.
Use JSDoc annotations so npm run typecheck verifies node kinds:
/** @type {import("./report_ast.cjs").Report} */
const report = {
type: "report",
title: "Workflow result",
children: [
{
type: "paragraph",
agentTainted: false,
children: [
{ type: "text", value: "Created related issue: ", agentTainted: false },
{ type: "issue_reference", number: String(issue.number), agentTainted: false },
],
},
{ type: "code_block", language: "text", value: diagnostic, agentTainted: true },
],
};
Use heading, paragraph, list, table, details, quote, alert,
separator, code_block, and typed inline nodes instead of Markdown punctuation.
GitHub [!NOTE], [!TIP], [!IMPORTANT], [!WARNING], and [!CAUTION]
map to alert nodes with the matching kind; the renderer emits their markers.
Keep alerts separate rather than nesting them inside another alert, which GitHub
does not support. Preserve supported <sub> formatting in details summaries.
Use xml_marker, json_marker, expiration, and closing_reference for machine
metadata and closing links. Preserve xml_marker.compact for identifiers whose
exact spelling is used by cleanup. Use review_marker for the durable,
URI-encoded review caller reference; keep the authoritative marker last.
Dynamic labels, paths, errors, and identifiers belong
in text/code nodes; link destinations belong in link.url.
Import existing agent/user Markdown with parseReportMarkdown, specifying
agentTainted: true, the correct allowedMentions, and the existing heading and
metadata policy. Parse configured templates before scalar substitution using
context; use typed inline/block slots for inserted nodes. Never interpolate
untrusted values into a template before parsing it. A literal code fence in
imported content must not swallow attribution or adjacent generated blocks.
For managed comment memory, set code_block.language to
gh-aw-comment-memory:<id> and fenceLength: 6; rendering lengthens the fence
past embedded backticks. Do not construct or slice fences by hand.
Use the typed variants instead of rendering a helper and reparsing its output:
| Purpose | Tree-first API |
|---|---|
| Generated attribution and guard notices | buildGeneratedFooterBlocks / assembleReportBodyParts in markdown_body_helpers.cjs |
| Deferred footer templates and diagnostic sections | buildFooterBlocks(getFooterMessageParts(context)) in messages_footer.cjs |
| Configured policy footer | getBodyFooterBlocks or appendConfiguredReportFooter |
| Detection warning | getDetectionCautionBlocks |
| Failure-comment attribution | getFooterAgentFailureCommentBlocks |
| Authoritative execution metadata | appendReportExecutionProvenance |
Keep custom templates and their scalar context separate until composition.
Headers and footers may jointly open/close <details>; use
buildIssueBodyReport to parse these wrappers together around body slots.
Allocate unique slot names against both source text and previously allocated
slots, and reject wrappers that swallow slots inside code fences.
Internal framework notes carried between handlers use non-JSON-forgeable Symbols
such as COMMENT_PREAMBLE and ISSUE_BODY_SUFFIX, never agent-settable flags.
Framework-authored nodes use agentTainted: false; agent-owned descendants retain
their taint even inside framework wrappers. Keep required footer diagnostics,
metadata, and policy text protected during size fitting. Do not mark an entire
agent body trusted to keep it from being shortened.
For attributed safe-output issues and comments, use buildIssueBodyReport in
issue_body.cjs; it accepts Markdown or typed body blocks and retains configured
wrappers, attribution, expiration, and execution provenance. Comment callers set
the appropriate itemType and workflowIdMarker: false. Pass the original
workflow runUrl when the target repository differs from the execution repository.
Fallback issues must import the original agent body and compose recovery nodes,
not reparse an already assembled or rendered PR/discussion description.
For other issue producers, pass a typed report to
renderIssueParameters/createReportIssue in issue_report.cjs, preserving the
existing authentication and retry boundary. buildIssueReport accepts typed
blocks as well as imported Markdown. For comments, render the complete tree with
renderSizedReport from report_size.cjs and pass its body to the existing API.
Do not render fragments and concatenate or reparse them. Keep one logical render
boundary, including metadata and trusted footers in its size budget.
renderSizedReport trims trailing whitespace automatically and measures the
publication body against the exact maxLength. Do not trim its result or reserve
an extra character for a terminal newline. Low-level renderReport retains its
terminal newline for Markdown serialization. Never truncate rendered Markdown
or trusted policy text to fit.
Preserve footer on/off behavior, marker identity and order, mention/link limits, expiration, cross-repository attribution, structured state recovery, managed memory extraction, review fallbacks, and append/prepend/island semantics. Assert tree shape as well as rendered output. Cover hostile backticks and HTML delimiters, Unicode, escaped table cells, and the exact publication size limit. Update formatting expectations only for intentional canonical rendering, not to hide lost content or metadata.
Run the matching Vitest suites from actions/setup/js, npm run typecheck,
and the repository JavaScript formatting/lint gates. Follow the developer skill
for final repository validation and publication.
まだレビューはありません。使ってみた感想をお寄せください。
ログインなしで書き込めます。使ってみた感想、質問、動かなかった環境などを気軽にどうぞ。
まだコメントはありません。最初のコメントを書いてみませんか。
複数のAIエージェントが共同作業する際の、作業ルートの確認、判断理由の記録、担当者への相談、レビューで差し戻した成果物の担当変更を定めるスキル。
複数エージェントの開発で、固有のエージェント名をコードやテストに持ち込まないルールと、完了前のテスト確認を共通化するスキルです。失敗からの学びも記録します。
GitHub Agentic Workflowsの設計・作成・更新・障害調査などの依頼を分類し、作業に合う手順を読み込んで進めるスキルです。
実装前に設計変更の提案書をまとめ、チームの合意形成を支えます。課題の根拠、既存機能への影響、判断事項、リスク、初期版の範囲を具体的に整理します。
gh-awが使うgh-aw-firewallのバージョンを更新し、仕様や設定スキーマの差分確認、生成物の再構築、関連テストと追加対応の整理まで進めるスキル。
gh-awでリポジトリ取得後に実行するgitやghの処理をレビューし、認証情報の受け渡し、取得範囲、認証できない場合のエラー処理を点検するスキル。