Skip to content

chore(claude): vendor review subagents + fix agent definitions#991

Merged
oskarszoon merged 4 commits into
bsv-blockchain:mainfrom
oskarszoon:chore/vendor-claude-subagents
Jun 1, 2026
Merged

chore(claude): vendor review subagents + fix agent definitions#991
oskarszoon merged 4 commits into
bsv-blockchain:mainfrom
oskarszoon:chore/vendor-claude-subagents

Conversation

@oskarszoon

@oskarszoon oskarszoon commented May 29, 2026

Copy link
Copy Markdown
Contributor

What

  • Vendor 9 specialist subagents from VoltAgent/awesome-claude-code-subagents into .claude/agents/ as real files: golang-pro, code-reviewer, security-auditor, qa-expert, performance-engineer, typescript-pro, frontend-developer, security-engineer, penetration-tester.
  • Fix bitcoin-expert: it had no description frontmatter, so it failed to register as a selectable subagent in stricter sessions. Added one.
  • Consolidate the two documentation reviewers — folded review-docs' parallel per-directory fan-out methodology into document-reviewer, then removed review-docs. Repointed the code-review workflow (.github/workflows/claude-code-review.yml) and .claude/rules/agents.md at document-reviewer.
  • List all available agents in .claude/rules/agents.md.

Why

The repo's .claude/agents set was missing every language/security/perf reviewer the team relies on for PR reviews, and bitcoin-expert was silently unavailable in some sessions (missing description). Consolidating the duplicate doc reviewers also removes a now-dangling reference from the code-review workflow.

Licensing

The 9 vendored agents are MIT-licensed (© 2025 VoltAgent). Each carries an SPDX-License-Identifier + copyright + source header in its frontmatter — sufficient attribution for the vendored files. A repo-wide THIRD_PARTY_LICENSES/NOTICES process is out of scope here and deferred as a separate, broader change.

Notes

  • Vendored agents are point-in-time copies (not submodules); the per-file source header links back to upstream for future syncs. Copied verbatim from upstream (no third-party tool metadata).
  • Tooling / CI-prompt only — no code or runtime behavior changes.

- Vendor 9 specialist subagents from VoltAgent/awesome-claude-code-subagents
  (golang-pro, code-reviewer, security-auditor, qa-expert, performance-engineer,
  typescript-pro, frontend-developer, security-engineer, penetration-tester),
  each annotated with its upstream source link.
- Add missing `description` frontmatter to bitcoin-expert so it registers
  reliably as a selectable subagent.
- Fold review-docs' parallel per-directory fan-out into document-reviewer, then
  remove review-docs; repoint claude-code-review.yml and rules/agents.md at
  document-reviewer.
- List all available agents in .claude/rules/agents.md.

Tooling/CI-prompt only; no code or runtime behavior changes.
@github-actions

github-actions Bot commented May 29, 2026

Copy link
Copy Markdown
Contributor

🤖 Claude Code Review

Status: Complete

No issues found.

This PR properly vendors 9 specialist subagents from VoltAgent/awesome-claude-code-subagents with correct MIT licensing headers, fixes the bitcoin-expert agent registration issue, and consolidates the documentation review agents. All changes are tooling/CI-prompt only with no runtime impact.

@oskarszoon oskarszoon requested review from icellan and ordishs May 29, 2026 19:21
Per the MIT license of VoltAgent/awesome-claude-code-subagents, each vendored agent now carries an SPDX-License-Identifier, copyright notice, and source link (replacing the prior plain source comment).
…ents (MIT)

Includes the verbatim MIT license text and copyright covering the 9 .claude/agents/ files vendored from VoltAgent/awesome-claude-code-subagents, satisfying MIT's notice-retention requirement alongside the per-file SPDX headers.
@github-actions

github-actions Bot commented May 29, 2026

Copy link
Copy Markdown
Contributor

Benchmark Comparison Report

Baseline: main (unknown)

Current: PR-991 (f07432d)

Summary

  • Regressions: 0
  • Improvements: 0
  • Unchanged: 144
  • Significance level: p < 0.05
All benchmark results (sec/op)
Benchmark Baseline Current Change p-value
_NewBlockFromBytes-4 1.651µ 1.624µ ~ 0.400
SplitSyncedParentMap_SetIfNotExists/256_buckets-4 71.18n 71.27n ~ 0.700
SplitSyncedParentMap_SetIfNotExists/16_buckets-4 71.51n 71.60n ~ 1.000
SplitSyncedParentMap_SetIfNotExists/1_bucket-4 71.05n 75.06n ~ 0.100
SplitSyncedParentMap_ConcurrentSetIfNotExists/256_buckets... 32.87n 32.52n ~ 0.200
SplitSyncedParentMap_ConcurrentSetIfNotExists/16_buckets_... 56.35n 55.68n ~ 0.700
SplitSyncedParentMap_ConcurrentSetIfNotExists/1_bucket_pa... 127.7n 126.5n ~ 0.400
MiningCandidate_Stringify_Short-4 219.8n 218.7n ~ 0.700
MiningCandidate_Stringify_Long-4 1.619µ 1.620µ ~ 0.400
MiningSolution_Stringify-4 840.1n 842.9n ~ 0.100
BlockInfo_MarshalJSON-4 1.713µ 1.713µ ~ 1.000
NewFromBytes-4 131.9n 168.1n ~ 0.700
AddTxBatchColumnar_Validation-4 2.499µ 2.511µ ~ 1.000
OffsetValidationLoop-4 596.2n 591.7n ~ 0.200
Mine_EasyDifficulty-4 66.94µ 66.79µ ~ 1.000
Mine_WithAddress-4 6.944µ 6.930µ ~ 0.700
BlockAssembler_AddTx-4 0.02699n 0.02512n ~ 0.400
AddNode-4 11.64 11.35 ~ 0.700
AddNodeWithMap-4 11.61 12.26 ~ 0.400
DirectSubtreeAdd/4_per_subtree-4 58.71n 59.06n ~ 0.700
DirectSubtreeAdd/64_per_subtree-4 30.16n 29.91n ~ 0.200
DirectSubtreeAdd/256_per_subtree-4 29.21n 29.08n ~ 0.500
DirectSubtreeAdd/1024_per_subtree-4 28.16n 27.99n ~ 0.500
DirectSubtreeAdd/2048_per_subtree-4 27.65n 27.74n ~ 0.700
SubtreeProcessorAdd/4_per_subtree-4 299.9n 289.5n ~ 0.400
SubtreeProcessorAdd/64_per_subtree-4 281.5n 280.0n ~ 0.400
SubtreeProcessorAdd/256_per_subtree-4 282.4n 280.4n ~ 0.700
SubtreeProcessorAdd/1024_per_subtree-4 275.9n 273.0n ~ 0.200
SubtreeProcessorAdd/2048_per_subtree-4 278.2n 271.7n ~ 0.100
SubtreeProcessorRotate/4_per_subtree-4 284.2n 278.0n ~ 0.200
SubtreeProcessorRotate/64_per_subtree-4 275.8n 275.8n ~ 1.000
SubtreeProcessorRotate/256_per_subtree-4 276.4n 275.9n ~ 1.000
SubtreeProcessorRotate/1024_per_subtree-4 278.6n 277.3n ~ 0.600
SubtreeNodeAddOnly/4_per_subtree-4 55.20n 55.61n ~ 0.200
SubtreeNodeAddOnly/64_per_subtree-4 34.41n 34.62n ~ 0.100
SubtreeNodeAddOnly/256_per_subtree-4 33.53n 33.63n ~ 1.000
SubtreeNodeAddOnly/1024_per_subtree-4 32.92n 32.88n ~ 1.000
SubtreeCreationOnly/4_per_subtree-4 116.5n 117.7n ~ 0.200
SubtreeCreationOnly/64_per_subtree-4 422.1n 422.5n ~ 1.000
SubtreeCreationOnly/256_per_subtree-4 1.414µ 1.405µ ~ 0.100
SubtreeCreationOnly/1024_per_subtree-4 4.438µ 4.498µ ~ 0.100
SubtreeCreationOnly/2048_per_subtree-4 8.606µ 8.520µ ~ 0.700
SubtreeProcessorOverheadBreakdown/64_per_subtree-4 280.4n 275.6n ~ 0.100
SubtreeProcessorOverheadBreakdown/1024_per_subtree-4 276.8n 278.5n ~ 0.100
ParallelGetAndSetIfNotExists/1k_nodes-4 2.220m 2.240m ~ 0.200
ParallelGetAndSetIfNotExists/10k_nodes-4 5.369m 5.433m ~ 0.200
ParallelGetAndSetIfNotExists/50k_nodes-4 7.143m 7.551m ~ 0.100
ParallelGetAndSetIfNotExists/100k_nodes-4 10.10m 10.29m ~ 0.100
SequentialGetAndSetIfNotExists/1k_nodes-4 1.952m 1.964m ~ 0.400
SequentialGetAndSetIfNotExists/10k_nodes-4 4.395m 4.387m ~ 1.000
SequentialGetAndSetIfNotExists/50k_nodes-4 12.46m 12.42m ~ 1.000
SequentialGetAndSetIfNotExists/100k_nodes-4 22.68m 22.78m ~ 0.700
ProcessOwnBlockSubtreeNodesParallel/1k_nodes-4 2.299m 2.278m ~ 0.400
ProcessOwnBlockSubtreeNodesParallel/10k_nodes-4 8.434m 8.503m ~ 0.100
ProcessOwnBlockSubtreeNodesParallel/100k_nodes-4 13.44m 13.44m ~ 0.700
ProcessOwnBlockSubtreeNodesSequential/1k_nodes-4 2.000m 1.986m ~ 0.400
ProcessOwnBlockSubtreeNodesSequential/10k_nodes-4 7.861m 7.956m ~ 1.000
ProcessOwnBlockSubtreeNodesSequential/100k_nodes-4 47.76m 42.61m ~ 0.200
DiskTxMap_SetIfNotExists-4 3.867µ 3.940µ ~ 1.000
DiskTxMap_SetIfNotExists_Parallel-4 3.661µ 3.524µ ~ 0.400
DiskTxMap_ExistenceOnly-4 361.1n 361.0n ~ 0.700
Queue-4 192.6n 189.0n ~ 0.200
AtomicPointer-4 3.653n 3.635n ~ 0.700
ReorgOptimizations/DedupFilterPipeline/Old/10K-4 842.8µ 835.8µ ~ 0.400
ReorgOptimizations/DedupFilterPipeline/New/10K-4 775.6µ 768.5µ ~ 0.700
ReorgOptimizations/AllMarkFalse/Old/10K-4 107.8µ 108.0µ ~ 1.000
ReorgOptimizations/AllMarkFalse/New/10K-4 64.75µ 64.06µ ~ 0.100
ReorgOptimizations/HashSlicePool/Old/10K-4 54.38µ 54.18µ ~ 0.700
ReorgOptimizations/HashSlicePool/New/10K-4 10.95µ 11.16µ ~ 0.700
ReorgOptimizations/NodeFlags/Old/10K-4 4.576µ 4.568µ ~ 0.400
ReorgOptimizations/NodeFlags/New/10K-4 2.035µ 1.557µ ~ 0.100
ReorgOptimizations/DedupFilterPipeline/Old/100K-4 9.200m 9.323m ~ 0.200
ReorgOptimizations/DedupFilterPipeline/New/100K-4 9.697m 10.138m ~ 0.100
ReorgOptimizations/AllMarkFalse/Old/100K-4 1.098m 1.094m ~ 0.700
ReorgOptimizations/AllMarkFalse/New/100K-4 707.4µ 707.2µ ~ 0.700
ReorgOptimizations/HashSlicePool/Old/100K-4 476.6µ 522.8µ ~ 0.100
ReorgOptimizations/HashSlicePool/New/100K-4 213.2µ 204.9µ ~ 1.000
ReorgOptimizations/NodeFlags/Old/100K-4 49.36µ 47.18µ ~ 0.200
ReorgOptimizations/NodeFlags/New/100K-4 17.26µ 16.60µ ~ 0.400
TxMapSetIfNotExists-4 49.36n 49.77n ~ 0.100
TxMapSetIfNotExistsDuplicate-4 41.30n 41.30n ~ 0.800
ChannelSendReceive-4 599.1n 610.9n ~ 0.100
CalcBlockWork-4 514.3n 514.2n ~ 1.000
CalculateWork-4 699.9n 702.3n ~ 0.100
BuildBlockLocatorString_Helpers/Size_10-4 1.375µ 1.607µ ~ 0.700
BuildBlockLocatorString_Helpers/Size_100-4 12.99µ 13.05µ ~ 1.000
BuildBlockLocatorString_Helpers/Size_1000-4 127.9µ 127.3µ ~ 0.200
CatchupWithHeaderCache-4 104.4m 104.3m ~ 0.700
_BufferPoolAllocation/16KB-4 3.105µ 2.879µ ~ 0.100
_BufferPoolAllocation/32KB-4 7.190µ 6.831µ ~ 0.400
_BufferPoolAllocation/64KB-4 13.04µ 12.05µ ~ 0.700
_BufferPoolAllocation/128KB-4 26.19µ 23.67µ ~ 0.200
_BufferPoolAllocation/512KB-4 106.63µ 82.32µ ~ 0.100
_BufferPoolConcurrent/32KB-4 15.02µ 16.02µ ~ 0.700
_BufferPoolConcurrent/64KB-4 22.80µ 22.70µ ~ 1.000
_BufferPoolConcurrent/512KB-4 109.9µ 111.6µ ~ 0.700
_SubtreeDeserializationWithBufferSizes/16KB-4 487.6µ 539.7µ ~ 0.100
_SubtreeDeserializationWithBufferSizes/32KB-4 492.6µ 537.1µ ~ 0.100
_SubtreeDeserializationWithBufferSizes/64KB-4 480.3µ 541.9µ ~ 0.100
_SubtreeDeserializationWithBufferSizes/128KB-4 488.4µ 540.1µ ~ 0.100
_SubtreeDeserializationWithBufferSizes/512KB-4 485.2µ 481.8µ ~ 0.100
_SubtreeDataDeserializationWithBufferSizes/16KB-4 28.82m 28.41m ~ 0.200
_SubtreeDataDeserializationWithBufferSizes/32KB-4 28.63m 28.31m ~ 0.400
_SubtreeDataDeserializationWithBufferSizes/64KB-4 28.52m 28.64m ~ 0.700
_SubtreeDataDeserializationWithBufferSizes/128KB-4 28.48m 28.52m ~ 0.700
_SubtreeDataDeserializationWithBufferSizes/512KB-4 28.46m 28.07m ~ 0.100
_PooledVsNonPooled/Pooled-4 641.9n 644.6n ~ 0.200
_PooledVsNonPooled/NonPooled-4 5.972µ 5.433µ ~ 0.100
_MemoryFootprint/Current_512KB_32concurrent-4 5.052µ 5.379µ ~ 0.100
_MemoryFootprint/Proposed_32KB_32concurrent-4 7.350µ 7.835µ ~ 0.100
_MemoryFootprint/Alternative_64KB_32concurrent-4 7.233µ 7.307µ ~ 0.700
_prepareTxsPerLevel-4 399.4m 421.1m ~ 0.100
_prepareTxsPerLevelOrdered-4 4.062m 3.801m ~ 0.200
_prepareTxsPerLevel_Comparison/Original-4 399.8m 415.6m ~ 0.100
_prepareTxsPerLevel_Comparison/Optimized-4 3.712m 4.292m ~ 0.100
SubtreeSizes/10k_tx_4_per_subtree-4 1.414m 1.394m ~ 1.000
SubtreeSizes/10k_tx_16_per_subtree-4 327.1µ 332.6µ ~ 0.700
SubtreeSizes/10k_tx_64_per_subtree-4 80.44µ 81.01µ ~ 0.200
SubtreeSizes/10k_tx_256_per_subtree-4 20.34µ 20.60µ ~ 0.100
SubtreeSizes/10k_tx_512_per_subtree-4 10.14µ 10.12µ ~ 1.000
SubtreeSizes/10k_tx_1024_per_subtree-4 4.968µ 4.991µ ~ 0.200
SubtreeSizes/10k_tx_2k_per_subtree-4 2.490µ 2.497µ ~ 0.100
BlockSizeScaling/10k_tx_64_per_subtree-4 80.82µ 79.05µ ~ 0.400
BlockSizeScaling/10k_tx_256_per_subtree-4 20.31µ 20.04µ ~ 0.100
BlockSizeScaling/10k_tx_1024_per_subtree-4 5.041µ 4.998µ ~ 0.700
BlockSizeScaling/50k_tx_64_per_subtree-4 402.0µ 403.8µ ~ 0.700
BlockSizeScaling/50k_tx_256_per_subtree-4 100.1µ 100.4µ ~ 0.200
BlockSizeScaling/50k_tx_1024_per_subtree-4 24.98µ 24.93µ ~ 1.000
SubtreeAllocations/small_subtrees_exists_check-4 164.1µ 165.3µ ~ 0.100
SubtreeAllocations/small_subtrees_data_fetch-4 173.0µ 173.1µ ~ 0.700
SubtreeAllocations/small_subtrees_full_validation-4 333.7µ 328.9µ ~ 0.200
SubtreeAllocations/medium_subtrees_exists_check-4 10.15µ 10.07µ ~ 0.100
SubtreeAllocations/medium_subtrees_data_fetch-4 10.80µ 10.87µ ~ 0.700
SubtreeAllocations/medium_subtrees_full_validation-4 20.55µ 20.78µ ~ 0.100
SubtreeAllocations/large_subtrees_exists_check-4 2.483µ 2.494µ ~ 0.400
SubtreeAllocations/large_subtrees_data_fetch-4 2.706µ 2.721µ ~ 1.000
SubtreeAllocations/large_subtrees_full_validation-4 5.143µ 5.304µ ~ 0.200
StoreBlock_Sequential/BelowCSVHeight-4 270.9µ 267.8µ ~ 0.700
StoreBlock_Sequential/AboveCSVHeight-4 265.7µ 273.1µ ~ 0.100
GetUtxoHashes-4 280.2n 270.6n ~ 0.200
GetUtxoHashes_ManyOutputs-4 46.97µ 50.97µ ~ 0.100
_NewMetaDataFromBytes-4 213.7n 214.4n ~ 0.700
_Bytes-4 394.9n 401.6n ~ 0.100
_MetaBytes-4 138.9n 139.5n ~ 0.600

Threshold: >10% with p < 0.05 | Generated: 2026-05-29 19:50 UTC

…op THIRD_PARTY_LICENSES

Vendored agents carried stray Outworked-tool frontmatter (outworked-*); re-copied clean from upstream, keeping only the MIT SPDX/copyright/source header. Per-file headers suffice here; a repo-wide THIRD_PARTY_LICENSES is deferred as a separate, broader change.
@sonarqubecloud

Copy link
Copy Markdown

@ordishs ordishs left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Approve. Tooling/docs-only change — no Go or runtime surface touched. Verified mechanical integrity:

  • No dangling review-docs references; CI workflow and agents.md both correctly repointed at document-reviewer.md, which exists and is well-formed.
  • Frontmatter valid on all agent files; bitcoin-expert now has its description. SPDX/copyright headers are inert YAML comments, so they don't pollute agent metadata.

Non-blocking nits for a future pass: the vendored agents hard-pin model: opus/sonnet (cost lever — four default to Opus), carry upstream "context-manager" boilerplate that references a nonexistent collaborator, and strict MIT compliance depends on the deferred NOTICES work.

@oskarszoon oskarszoon merged commit ba0dcac into bsv-blockchain:main Jun 1, 2026
27 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants