Skip to content

Refactor subagent thread binding into core#88416

Merged
steipete merged 4 commits into
mainfrom
refactor/core-subagent-thread-binding
May 30, 2026
Merged

Refactor subagent thread binding into core#88416
steipete merged 4 commits into
mainfrom
refactor/core-subagent-thread-binding

Conversation

@steipete

Copy link
Copy Markdown
Contributor

Summary

  • Move native thread: true subagent binding into core via SessionBindingService capability checks, conversation resolution, bind metadata, and route projection.
  • Stop bundled Discord, Matrix, and Feishu plugins from registering subagent_spawning; keep the public hook type as deprecated compatibility and keep subagent_spawned for post-launch lifecycle observation.
  • Prefer the requester session's existing binding when resolving the target conversation, and fail closed on ambiguous requester bindings.
  • Update subagent/thread-binding docs and regression tests for the core-owned path.

Verification

  • pnpm docs:list
  • pnpm test src/agents/sessions-spawn-hooks.test.ts src/agents/subagent-spawn.thread-binding.test.ts src/agents/subagent-spawn.workspace.test.ts src/agents/subagent-spawn.mode-session-diagnostics.test.ts src/plugins/contracts/boundary-invariants.test.ts extensions/matrix/index.test.ts
  • pnpm test extensions/discord/src/subagent-hooks.test.ts extensions/feishu/src/subagent-hooks.test.ts extensions/matrix/src/matrix/subagent-hooks.test.ts extensions/matrix/index.test.ts src/agents/sessions-spawn-hooks.test.ts src/agents/subagent-spawn.thread-binding.test.ts src/agents/subagent-spawn.workspace.test.ts src/agents/subagent-spawn.mode-session-diagnostics.test.ts src/plugins/contracts/boundary-invariants.test.ts
  • pnpm test src/agents/sessions-spawn-hooks.test.ts src/agents/subagent-spawn.thread-binding.test.ts src/agents/subagent-spawn.workspace.test.ts src/agents/subagent-spawn.mode-session-diagnostics.test.ts extensions/feishu/src/subagent-hooks.test.ts
  • node scripts/run-tsgo.mjs -p test/tsconfig/tsconfig.core.test.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/core-test.tsbuildinfo
  • node scripts/run-tsgo.mjs -p tsconfig.core.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/core.tsbuildinfo
  • .agents/skills/autoreview/scripts/autoreview --mode branch --base origin/main (clean; ignored expected no-fallback concern for retired subagent_spawning binding path)
  • pnpm check:changed via Testbox tbx_01ksx2kt0kbgg68w3wf3z3xrt9, GitHub run 26691692808

Real behavior proof

Behavior addressed: Native subagent thread binding no longer depends on bundled subagent_spawning hooks.
Real environment tested: Local focused Vitest shards plus Blacksmith Testbox changed gate.
Exact steps or command run after this patch: See Verification above.
Evidence after fix: Focused tests passed, core typechecks passed, autoreview passed, and Testbox check:changed exited 0.
Observed result after fix: Core binds thread: true subagent sessions through session-binding adapters and emits subagent_spawned after launch metadata is resolved.
What was not tested: Live Discord, Matrix, Telegram, or Feishu channel roundtrips.

@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation channel: discord Channel integration: discord channel: matrix Channel integration: matrix agents Agent runtime and tooling channel: feishu Channel integration: feishu size: L maintainer Maintainer-authored PR labels May 30, 2026
@clawsweeper

clawsweeper Bot commented May 30, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs real behavior proof before merge. Reviewed May 30, 2026, 4:11 PM ET / 20:11 UTC.

Summary
The branch moves thread: true subagent binding into core session-binding adapters, removes bundled Discord/Matrix/Feishu subagent_spawning registrations, deprecates that hook surface, and updates docs/tests.

PR surface: Source +389, Tests +81, Docs +33. Total +503 across 25 files.

Reproducibility: yes. for the review findings by source inspection: the account fallback and Discord thread merge paths are deterministic in the PR head. No live channel reproduction was run.

Review metrics: 1 noteworthy metric.

  • Plugin hook surface: 1 hook deprecated, 3 bundled registrations removed. The PR changes a public plugin hook contract and removes bundled channel hook registrations, so upgrade compatibility needs explicit review before merge.

Merge readiness
Overall: 🧂 unranked krab
Proof: 🧂 unranked krab
Patch quality: 🧂 unranked krab
Result: blocked until real behavior proof from a real setup is added.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • [P1] Fix channel default-account resolution for omitted requester accounts.
  • Preserve the bound child thread in Discord delivery projection/merge behavior.
  • [P1] Add redacted live channel proof showing thread-bound subagent creation and reply routing.

Proof guidance:

  • [P1] Needs real behavior proof before merge: The PR body provides tests and Testbox output only, and explicitly does not test live Discord, Matrix, Telegram, or Feishu roundtrips; contributor-supplied redacted live proof is still needed. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.

Mantis proof suggestion
A native Telegram recording can show whether thread: true subagent creation and replies land in the expected topic after the core ownership move. A maintainer can ask Mantis to capture proof by posting a new PR comment that starts with the OpenClaw Mantis account mention, followed by:

telegram desktop proof: verify sessions_spawn thread=true from a Telegram forum topic creates a subagent topic and routes the child reply there.

Risk before merge

  • [P1] Existing single named account configs without channels.<id>.defaultAccount can reject thread: true subagent spawns because core probes default instead of the channel-resolved account.
  • [P1] Discord child runs spawned from an existing thread can be delivered back to the requester thread if the bound child thread is projected without a threadId.
  • [P1] Deprecating a public plugin hook and removing bundled hook registrations changes plugin/channel upgrade behavior and needs maintainer acceptance plus live transport proof.

Maintainer options:

  1. Fix and prove before merge (recommended)
    Resolve omitted accounts through the channel default contract, preserve the bound child delivery target, and add live channel proof before landing.
  2. Accept the SDK deprecation deliberately
    Maintainers can explicitly accept the subagent_spawning deprecation/removal plan after compatibility behavior is proven.
  3. Pause if live proof is unavailable
    Hold or close this branch if the shifted routing path cannot be demonstrated in a real Discord, Matrix, Telegram, or Feishu flow.

Next step before merge

  • [P1] This needs contributor live proof and maintainer API/compatibility judgment; automation cannot supply the missing real transport proof.

Security
Cleared: No concrete security or supply-chain concern was found in the diff; the blockers are compatibility, routing correctness, and proof.

Review findings

  • [P1] Resolve omitted accounts through channel defaults — src/agents/subagent-spawn.ts:691-692
  • [P1] Preserve the bound Discord child thread — src/agents/subagent-spawn.ts:956
Review details

Best possible solution:

Land this ownership move only after core account resolution uses the channel default contract, bound delivery preserves the child thread target, and redacted live channel proof shows thread-bound spawn and reply routing.

Do we have a high-confidence way to reproduce the issue?

Yes for the review findings by source inspection: the account fallback and Discord thread merge paths are deterministic in the PR head. No live channel reproduction was run.

Is this the best way to solve the issue?

No: centralizing thread binding may be the right direction, but this implementation needs the channel account contract and bound-thread delivery fixes plus live proof before it is merge-ready.

Full review comments:

  • [P1] Resolve omitted accounts through channel defaults — src/agents/subagent-spawn.ts:691-692
    When requester.accountId is omitted, this falls back to the raw config key or default, but the channel contracts can resolve a single configured named account without defaultAccount. Existing configs such as channels.discord.accounts.work can have the adapter registered under work while core probes default, causing thread: true session spawns to fail.
    Confidence: 0.93
  • [P1] Preserve the bound Discord child thread — src/agents/subagent-spawn.ts:956
    routeFromBindingRecord only returns to: channel:<childThread> for Discord because the Discord plugin has no resolveDeliveryTarget; then mergeDeliveryContext keeps the requester threadId, and Discord outbound routes by threadId first. A subagent spawned from an existing Discord thread can therefore deliver the initial child run back to the requester thread instead of the newly bound child thread.
    Confidence: 0.9

Overall correctness: patch is incorrect
Overall confidence: 0.91

AGENTS.md: found and applied where relevant.

Codex review notes: model gpt-5.5, reasoning high; reviewed against a9a86f788b08.

Label changes

Label changes:

  • add P1: The PR can break existing thread-bound subagent workflows and misroute child replies in real channel usage.
  • add merge-risk: 🚨 compatibility: The diff deprecates a public plugin hook and moves routing from bundled channel hooks into core account/session-binding logic.
  • add merge-risk: 🚨 message-delivery: The Discord delivery path can preserve the requester threadId and send the child run to the wrong thread after merge.

Label justifications:

  • P1: The PR can break existing thread-bound subagent workflows and misroute child replies in real channel usage.
  • merge-risk: 🚨 compatibility: The diff deprecates a public plugin hook and moves routing from bundled channel hooks into core account/session-binding logic.
  • merge-risk: 🚨 message-delivery: The Discord delivery path can preserve the requester threadId and send the child run to the wrong thread after merge.
  • rating: 🧂 unranked krab: Overall readiness is 🧂 unranked krab; proof is 🧂 unranked krab and patch quality is 🧂 unranked krab.
  • status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs real behavior proof before merge: The PR body provides tests and Testbox output only, and explicitly does not test live Discord, Matrix, Telegram, or Feishu roundtrips; contributor-supplied redacted live proof is still needed. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.
  • mantis: telegram-visible-proof: Mantis should capture Telegram visible proof. The core routing move affects visible Telegram forum-topic subagent behavior, so a short Telegram Desktop proof would materially help review.
Evidence reviewed

PR surface:

Source +389, Tests +81, Docs +33. Total +503 across 25 files.

View PR surface stats
Area Files Added Removed Net
Source 10 442 53 +389
Tests 12 266 185 +81
Docs 3 42 9 +33
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 25 750 247 +503

What I checked:

  • AGENTS policy applied: Root and scoped docs/agents/plugins/channels/extensions/outbound AGENTS.md files were read; their plugin API compatibility, channel delivery, and live-proof rules are relevant to this PR. (AGENTS.md:1, a9a86f788b08)
  • Account fallback defect remains in PR head: The new core resolver still uses raw channels.<id>.defaultAccount ?? "default", so omitted accounts bypass the existing single-named-account default contract used by channel plugins. (src/agents/subagent-spawn.ts:691, 7a6acc3730d5)
  • Channel default account contract: The shared account helper resolves the configured default, then default, then the only configured account; Matrix has an equivalent resolveMatrixDefaultOrOnlyAccountId path. (src/channels/plugins/account-helpers.ts:85, 7a6acc3730d5)
  • Discord delivery defect remains in PR head: The new bind path projects delivery from the binding record, but Discord lacks messaging.resolveDeliveryTarget; later merging can keep the requester threadId while Discord outbound routes by threadId first. (src/agents/subagent-spawn.ts:956, 7a6acc3730d5)
  • Discord outbound contract: Discord outbound sends to channel:<threadId> whenever threadId is present, so preserving the old requester threadId can route the child run to the wrong thread. (extensions/discord/src/outbound-send-context.ts:28, 7a6acc3730d5)
  • Prior review comments match current source: Two existing review comments already flagged the default-account and Discord thread-delivery issues; source inspection of head 7a6acc3 shows both concerns are still live. (7a6acc3730d5)

Likely related people:

  • steipete: Recent subagent spawn planning/session-binding refactors and this PR's core-binding implementation are authored under this area. (role: recent area contributor; confidence: high; commits: 7b36fa76726a, d6132e10f455, 85a8837d4b01; files: src/agents/subagent-spawn.ts, src/infra/outbound/session-binding-service.ts, src/plugins/hook-types.ts)
  • osolmaz: Thread-bound subagents and ACP thread-bound agent behavior appear to originate in the relevant feature-history commits. (role: introduced behavior; confidence: medium; commits: 8178ea472db1, a7d56e3554d0; files: src/agents/subagent-spawn.ts, extensions/discord/src/monitor/thread-bindings.manager.ts)
  • vincentkoc: The delivery-context merge/projection seam involved in the Discord routing risk was split out in recent cycle work. (role: adjacent owner; confidence: medium; commits: 543c14a4edd1, 74e7b8d47b18; files: src/utils/delivery-context.shared.ts, src/channels/route-projection.ts)
  • Takhoffman: Recent Discord binding lifecycle and active binding registry fixes touch the channel-side behavior this PR now depends on from core. (role: recent area contributor; confidence: medium; commits: a3b047b5fcfb, b2475884fda4, d50526dddc72; files: extensions/discord/src/monitor/thread-bindings.manager.ts, src/infra/outbound/session-binding-service.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 85a8837d4b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +691 to +692
const channels = params.cfg.channels as Record<string, { defaultAccount?: unknown } | undefined>;
return normalizeOptionalString(channels?.[channel]?.defaultAccount) ?? "default";

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Use plugin default account resolution

When requester.accountId is omitted, this falls back to channels.<id>.defaultAccount ?? "default", but the channel plugins already resolve omitted accounts differently: Discord/Feishu use createAccountListHelpers(...).resolveDefaultAccountId, and Matrix uses resolveMatrixDefaultOrOnlyAccountId, all of which can select the only configured named account when defaultAccount is absent. In a config like channels.discord.accounts.work with no channels.discord.defaultAccount, the monitor registers the session-binding adapter under work, while this code asks getCapabilities for default and rejects sessions_spawn(mode="session") / thread=true as unavailable. Resolve the account through the plugin/channel config defaultAccountId contract instead of reading only the raw config key.

Useful? React with 👍 / 👎.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a8caa6fd50

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

};
}
const deliveryOrigin = normalizeDeliveryContext(result.deliveryOrigin);
const deliveryOrigin = routeToDeliveryFields(routeFromBindingRecord(binding)).deliveryContext;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Set Discord delivery thread to the bound child thread

When thread=true is used from an existing Discord thread, this projection returns a delivery origin with to: channel:<new child thread> but no threadId because Discord does not provide a resolveDeliveryTarget for binding records. The later mergeDeliveryContext(bindResult.deliveryOrigin, childSessionOrigin) preserves the requester's old threadId, and Discord outbound routing (extensions/discord/src/outbound-send-context.ts:27) sends to channel:<threadId> whenever it is present. In that scenario the initial child run is delivered back to the requester thread instead of the newly bound subagent thread; include the binding's conversation id as the delivery threadId for Discord (or add an equivalent Discord delivery target resolver) before merging.

Useful? React with 👍 / 👎.

@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. mantis: telegram-visible-proof Mantis should capture Telegram visible proof. labels May 30, 2026
@clawsweeper
clawsweeper Bot temporarily deployed to qa-live-shared May 30, 2026 18:56 Inactive

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7a6acc3730

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +899 to +904
const prepared = prepareSubagentThreadBinding({
cfg: params.cfg,
mode: params.mode,
requesterSessionKey: params.requesterSessionKey,
requester: params.requester,
});

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Preserve legacy subagent_spawning fallback

When an installed third-party channel plugin still relies on api.on("subagent_spawning") during the documented deprecation window, this new path prepares core bindings directly and returns an unavailable/error result before ever invoking the registered hook. The same commit adds a compat record with removeAfter: "2026-08-30" for this hook, so deprecated plugins that have not yet migrated to a session-binding adapter lose sessions_spawn(mode="session", thread=true) immediately instead of receiving compatibility behavior; keep the hook runner as a fallback when core binding preparation cannot handle the target.

Useful? React with 👍 / 👎.

Comment on lines +838 to +844
const fallbackConversationRef = resolveConversationRefForThreadBinding({
cfg: params.cfg,
channel: policy.channel,
accountId: policy.accountId,
to: params.requester.to,
threadId: params.requester.threadId,
});

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Reject Feishu group chats without a topic

For Feishu group chat requests with to: "chat:oc_..." and no threadId, this generic fallback now resolves the chat id as a current conversation and the Feishu session-binding adapter accepts it, binding the entire group chat to the subagent. The removed Feishu subagent_spawning handler intentionally returned an error for isChatTarget without a topic, allowing only DMs or topic conversations; preserve that channel-specific restriction here so a group-level sessions_spawn does not hijack all chat messages for the child session.

Useful? React with 👍 / 👎.

@openclaw-mantis

Copy link
Copy Markdown
Contributor

Mantis Telegram Desktop Proof

Summary: Mantis captured native Telegram Desktop before/after proof for thread-bound subagent spawning.

Main screenshot This PR screenshot
Baseline native Telegram Desktop screenshot Candidate native Telegram Desktop screenshot
Main This PR
Baseline native Telegram Desktop proof GIF Candidate native Telegram Desktop proof GIF

Motion-trimmed clips:

Raw QA files: https://artifacts.openclaw.ai/mantis/telegram-desktop/pr-88416/run-26692145692-1/index.json

@steipete
steipete merged commit 3fc0df9 into main May 30, 2026
129 checks passed
@steipete
steipete deleted the refactor/core-subagent-thread-binding branch May 30, 2026 20:19
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request May 31, 2026
Move subagent thread binding ownership into core so session-mode spawns prepare channel bindings before launching the child agent. Deprecate the legacy subagent_spawning SDK hook in code, compatibility metadata, diagnostics, and plugin docs; plugin authors should observe subagent_spawned instead.

Verification:
- node scripts/run-vitest.mjs src/agents/sessions-spawn-hooks.test.ts src/agents/subagent-spawn.thread-binding.test.ts src/agents/subagent-spawn.workspace.test.ts src/agents/subagent-spawn.mode-session-diagnostics.test.ts
- node scripts/run-tsgo.mjs -p tsconfig.core.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/core.tsbuildinfo
- git diff --check
- .agents/skills/autoreview/scripts/autoreview --mode local
- CI run 26693808952 green, including checks-node-agentic-agents-core and checks-node-agentic-plugin-sdk
SYU8384 pushed a commit to SYU8384/openclaw that referenced this pull request Jun 3, 2026
Move subagent thread binding ownership into core so session-mode spawns prepare channel bindings before launching the child agent. Deprecate the legacy subagent_spawning SDK hook in code, compatibility metadata, diagnostics, and plugin docs; plugin authors should observe subagent_spawned instead.

Verification:
- node scripts/run-vitest.mjs src/agents/sessions-spawn-hooks.test.ts src/agents/subagent-spawn.thread-binding.test.ts src/agents/subagent-spawn.workspace.test.ts src/agents/subagent-spawn.mode-session-diagnostics.test.ts
- node scripts/run-tsgo.mjs -p tsconfig.core.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/core.tsbuildinfo
- git diff --check
- .agents/skills/autoreview/scripts/autoreview --mode local
- CI run 26693808952 green, including checks-node-agentic-agents-core and checks-node-agentic-plugin-sdk
sablehead pushed a commit to sablehead/openclaw that referenced this pull request Jun 10, 2026
Move subagent thread binding ownership into core so session-mode spawns prepare channel bindings before launching the child agent. Deprecate the legacy subagent_spawning SDK hook in code, compatibility metadata, diagnostics, and plugin docs; plugin authors should observe subagent_spawned instead.

Verification:
- node scripts/run-vitest.mjs src/agents/sessions-spawn-hooks.test.ts src/agents/subagent-spawn.thread-binding.test.ts src/agents/subagent-spawn.workspace.test.ts src/agents/subagent-spawn.mode-session-diagnostics.test.ts
- node scripts/run-tsgo.mjs -p tsconfig.core.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/core.tsbuildinfo
- git diff --check
- .agents/skills/autoreview/scripts/autoreview --mode local
- CI run 26693808952 green, including checks-node-agentic-agents-core and checks-node-agentic-plugin-sdk
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agents Agent runtime and tooling channel: discord Channel integration: discord channel: feishu Channel integration: feishu channel: matrix Channel integration: matrix docs Improvements or additions to documentation maintainer Maintainer-authored PR mantis: telegram-visible-proof Mantis should capture Telegram visible proof. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. size: L status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant