Skip to content

Conversation

@indietyp
Copy link
Member

🌟 What is the purpose of this PR?

Aligns skills with the Agent Skills specification and migrates anthropics skill management tooling from Python to TypeScript. This creates a vendor-agnostic skill system that can work with any AI agent supporting the specification.

🔗 Related links

🔍 What does this change?

New skill-creator Skill:

  • Combined the existing writing-skills skill with Anthropic's skill-creator skill
  • Rewrote Python scripts from Anthropic's skill-creator in TypeScript with proper Zod validation at libs/@local/repo-chores/node/scripts/skill-management/
  • Invoked via yarn agents:skill-management <command> (init, validate, generate-skill-rules, skill-rules-schema)
  • Templates stored in .claude/skills/skill-creator/assets/
  • Removed the old writing-skills skill (merged into skill-creator)

Skill Structure Changes:

  • Triggers now defined in metadata.triggers within each SKILL.md (single source of truth)
  • Renamed directories: resources/ → references/ to match spec terminology
  • Schema field renames (kebab-case): intentPatterns → intent-patterns, fileTriggers → files, pathPatterns → files.include, pathExclusions → files.exclude, contentPatterns → files.content to match YAML naming scheme.

CI Integration:

  • Added validation step in .github/workflows/lint.yml that validates skills and checks skill-rules.json is up to date

Updated Skills:

  • All existing skills updated to use new frontmatter format with metadata.triggers
  • Updated vendor rules (ark-ui, mastra, panda-css, zod) to new format

Pre-Merge Checklist 🚀

🚢 Has this modified a publishable library?

This PR:

  • does not modify any publishable blocks or libraries, or modifications do not need publishing

📜 Does this require a change to the docs?

The changes in this PR:

  • are internal and do not require a docs change

🕸️ Does this require a change to the Turbo Graph?

The changes in this PR:

  • do not affect the execution graph

@cursor
Copy link

cursor bot commented Dec 19, 2025

PR Summary

Migrates skills to the Agent Skills specification with frontmatter triggers, adds a TypeScript skill-management CLI, updates all skills/rules and CI to validate/generate skill-rules.json, and removes legacy validation code.

  • Skills & Spec
    • Migrate to Agent Skills spec: triggers now in metadata.triggers in each SKILL.md; generate consolidated skill-rules.json v2.0.
    • Add new skill-creator skill; remove old writing-skills; update all existing skills and vendor rules (ark-ui, mastra, panda-css, zod).
  • Tooling (TypeScript CLI)
    • New commands in libs/@local/repo-chores/node/scripts/skill-management: init, validate, generate-skill-rules, skill-rules-schema (Zod-validated).
    • Repository script: yarn agents:skill-management ....
  • CI
    • Lint workflow validates skills and enforces regenerated .claude/skills/skill-rules.json is up to date.
  • Hooks
    • Simplify skill-activation-prompt.ts; remove legacy in-script validation; update snapshots/tests.
  • Docs & Structure
    • Rename resources/references/; refresh SKILL docs and references.
  • Dependencies
    • Add @optique/core, js-yaml (+ types); wire into repo-chores package.

Written by Cursor Bugbot for commit 688a73a. This will update automatically on new commits. Configure here.

Comment on lines +5 to +16
metadata:
triggers:
type: domain
enforcement: suggest
priority: medium
keywords:
- mastra
- "@mastra/"
- mastra.ai
intent-patterns:
- "\\b(use|build|create|implement)\\b.*?\\bmastra\\b"
- "\\b(agent|workflow|rag)\\b.*?\\bmastra\\b"
Copy link
Contributor

Choose a reason for hiding this comment

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

@indietyp I'm curious about these properties: do they really affect the way the agent uses the skill? The "agent skills" standard seems to rather recommend sticking to the description as the means of hinting to the agent about when to load the skill; and they offer this context injection pattern with their own python util to provide more imperative

Copy link
Member Author

Choose a reason for hiding this comment

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

The metadata field is not read by the agent that's correct. But I changed it so that the skill-rules.json file is now derived from the SKILL.md to colocate it. I am also happy to rewrite/use the Anthropic code/skill instead but didn't want to disturb the current hook based approach for anyone who is using it!

Copy link
Contributor

Choose a reason for hiding this comment

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

Ah, you mean open-source contributors outside of hash who might be using it?

Copy link
Member Author

Choose a reason for hiding this comment

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

Not necessarily mostly just for us. When editing the skill files those that are using hooks (eg Tim) don't need to maintain multiple places and we can use it in integrating with other tools (such as amp code) later on. So it's just a movement of information to built up a single source of truth

TimDiekmann
TimDiekmann previously approved these changes Dec 19, 2025
@vilkinsons
Copy link
Member

Just flagging we have snapshot files with German names:

  • .claude/hooks/__snapshots__/dokumentation verbessern.snap
  • .claude/hooks/__snapshots__/wie funktioniert das skill system.snap

@github-actions github-actions bot dismissed TimDiekmann’s stale review December 19, 2025 14:31

Your organization requires reapproval when changes are made, so Graphite has dismissed approvals. See the output of git range-diff at https://github.com/hashintel/hash/actions/runs/20373064722

Copy link
Member Author

Just flagging we have snapshot files with German names:

  • .claude/hooks/__snapshots__/dokumentation verbessern.snap
  • .claude/hooks/__snapshots__/wie funktioniert das skill system.snap

have been removed!

@indietyp indietyp added this pull request to the merge queue Dec 19, 2025
@indietyp indietyp changed the title BE-5880: Adopt open Agent Skills standard H-5880: Adopt open Agent Skills standard Dec 19, 2025
Merged via the queue into main with commit 0b18aa0 Dec 19, 2025
169 checks passed
@indietyp indietyp deleted the bm/h-5880-adjust-skills-to-be-in-line-with-new-open-standard branch December 19, 2025 15:16
@github-actions
Copy link
Contributor

Benchmark results

@rust/hash-graph-benches – Integrations

policy_resolution_large

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 2002 $$26.0 \mathrm{ms} \pm 253 \mathrm{μs}\left({\color{lightgreen}-6.158 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$3.24 \mathrm{ms} \pm 13.8 \mathrm{μs}\left({\color{gray}-3.057 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 1001 $$11.9 \mathrm{ms} \pm 80.7 \mathrm{μs}\left({\color{lightgreen}-5.217 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 3314 $$42.7 \mathrm{ms} \pm 290 \mathrm{μs}\left({\color{gray}-1.473 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$14.3 \mathrm{ms} \pm 121 \mathrm{μs}\left({\color{gray}-2.538 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 1526 $$23.4 \mathrm{ms} \pm 162 \mathrm{μs}\left({\color{gray}-3.684 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 2078 $$26.5 \mathrm{ms} \pm 172 \mathrm{μs}\left({\color{lightgreen}-39.143 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$3.63 \mathrm{ms} \pm 14.7 \mathrm{μs}\left({\color{lightgreen}-82.733 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 1033 $$11.8 \mathrm{ms} \pm 69.9 \mathrm{μs}\left({\color{lightgreen}-62.958 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_medium

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 102 $$3.62 \mathrm{ms} \pm 16.0 \mathrm{μs}\left({\color{gray}-0.207 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$2.85 \mathrm{ms} \pm 14.6 \mathrm{μs}\left({\color{gray}0.581 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 51 $$3.19 \mathrm{ms} \pm 16.6 \mathrm{μs}\left({\color{gray}0.077 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 269 $$4.96 \mathrm{ms} \pm 24.3 \mathrm{μs}\left({\color{gray}-0.649 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$3.39 \mathrm{ms} \pm 15.2 \mathrm{μs}\left({\color{gray}-1.633 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 107 $$3.93 \mathrm{ms} \pm 18.0 \mathrm{μs}\left({\color{gray}-0.012 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 133 $$4.25 \mathrm{ms} \pm 20.9 \mathrm{μs}\left({\color{gray}-1.775 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$3.27 \mathrm{ms} \pm 12.1 \mathrm{μs}\left({\color{gray}-3.915 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 63 $$3.84 \mathrm{ms} \pm 19.4 \mathrm{μs}\left({\color{gray}-1.224 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_none

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 2 $$2.56 \mathrm{ms} \pm 10.6 \mathrm{μs}\left({\color{red}6.71 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$2.49 \mathrm{ms} \pm 8.74 \mathrm{μs}\left({\color{gray}3.47 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 1 $$2.60 \mathrm{ms} \pm 11.6 \mathrm{μs}\left({\color{red}5.21 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 8 $$2.78 \mathrm{ms} \pm 13.4 \mathrm{μs}\left({\color{gray}4.80 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$2.71 \mathrm{ms} \pm 15.2 \mathrm{μs}\left({\color{red}6.83 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 3 $$2.86 \mathrm{ms} \pm 11.9 \mathrm{μs}\left({\color{red}6.16 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_small

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 52 $$2.90 \mathrm{ms} \pm 12.6 \mathrm{μs}\left({\color{red}5.04 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$2.59 \mathrm{ms} \pm 14.3 \mathrm{μs}\left({\color{gray}3.86 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 25 $$2.74 \mathrm{ms} \pm 10.6 \mathrm{μs}\left({\color{red}6.08 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 94 $$3.26 \mathrm{ms} \pm 17.5 \mathrm{μs}\left({\color{gray}4.86 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$2.81 \mathrm{ms} \pm 12.1 \mathrm{μs}\left({\color{red}6.31 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 26 $$3.03 \mathrm{ms} \pm 12.7 \mathrm{μs}\left({\color{gray}4.51 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 66 $$3.12 \mathrm{ms} \pm 15.5 \mathrm{μs}\left({\color{gray}-0.772 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$2.79 \mathrm{ms} \pm 11.4 \mathrm{μs}\left({\color{red}5.93 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 29 $$3.00 \mathrm{ms} \pm 14.1 \mathrm{μs}\left({\color{gray}4.65 \mathrm{\%}}\right) $$ Flame Graph

read_scaling_complete

Function Value Mean Flame graphs
entity_by_id;one_depth 1 entities $$38.5 \mathrm{ms} \pm 168 \mathrm{μs}\left({\color{gray}-0.996 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 10 entities $$77.0 \mathrm{ms} \pm 387 \mathrm{μs}\left({\color{gray}0.487 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 25 entities $$44.9 \mathrm{ms} \pm 181 \mathrm{μs}\left({\color{gray}2.87 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 5 entities $$45.6 \mathrm{ms} \pm 212 \mathrm{μs}\left({\color{gray}0.492 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 50 entities $$56.5 \mathrm{ms} \pm 291 \mathrm{μs}\left({\color{red}5.10 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 1 entities $$41.4 \mathrm{ms} \pm 159 \mathrm{μs}\left({\color{gray}2.77 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 10 entities $$426 \mathrm{ms} \pm 939 \mathrm{μs}\left({\color{gray}2.77 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 25 entities $$95.9 \mathrm{ms} \pm 463 \mathrm{μs}\left({\color{gray}0.255 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 5 entities $$84.8 \mathrm{ms} \pm 376 \mathrm{μs}\left({\color{gray}-0.043 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 50 entities $$288 \mathrm{ms} \pm 918 \mathrm{μs}\left({\color{gray}1.05 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 1 entities $$15.0 \mathrm{ms} \pm 78.7 \mathrm{μs}\left({\color{gray}3.93 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 10 entities $$15.7 \mathrm{ms} \pm 89.3 \mathrm{μs}\left({\color{gray}4.74 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 25 entities $$15.4 \mathrm{ms} \pm 105 \mathrm{μs}\left({\color{gray}-0.561 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 5 entities $$15.3 \mathrm{ms} \pm 65.9 \mathrm{μs}\left({\color{gray}1.67 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 50 entities $$17.6 \mathrm{ms} \pm 110 \mathrm{μs}\left({\color{gray}-3.650 \mathrm{\%}}\right) $$ Flame Graph

read_scaling_linkless

Function Value Mean Flame graphs
entity_by_id 1 entities $$14.6 \mathrm{ms} \pm 69.4 \mathrm{μs}\left({\color{lightgreen}-6.046 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 10 entities $$14.9 \mathrm{ms} \pm 80.0 \mathrm{μs}\left({\color{gray}-3.024 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 100 entities $$14.7 \mathrm{ms} \pm 67.8 \mathrm{μs}\left({\color{gray}-3.736 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 1000 entities $$15.4 \mathrm{ms} \pm 72.1 \mathrm{μs}\left({\color{gray}-3.506 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 10000 entities $$22.2 \mathrm{ms} \pm 150 \mathrm{μs}\left({\color{gray}-3.505 \mathrm{\%}}\right) $$ Flame Graph

representative_read_entity

Function Value Mean Flame graphs
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/block/v/1 $$30.2 \mathrm{ms} \pm 271 \mathrm{μs}\left({\color{gray}-0.622 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/book/v/1 $$30.6 \mathrm{ms} \pm 220 \mathrm{μs}\left({\color{gray}4.18 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/building/v/1 $$30.6 \mathrm{ms} \pm 316 \mathrm{μs}\left({\color{gray}4.67 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/organization/v/1 $$30.5 \mathrm{ms} \pm 319 \mathrm{μs}\left({\color{gray}3.97 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/page/v/2 $$30.2 \mathrm{ms} \pm 293 \mathrm{μs}\left({\color{gray}-0.934 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/person/v/1 $$30.0 \mathrm{ms} \pm 275 \mathrm{μs}\left({\color{gray}0.467 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/playlist/v/1 $$30.3 \mathrm{ms} \pm 251 \mathrm{μs}\left({\color{gray}4.31 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/song/v/1 $$29.7 \mathrm{ms} \pm 267 \mathrm{μs}\left({\color{gray}1.74 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/uk-address/v/1 $$28.7 \mathrm{ms} \pm 241 \mathrm{μs}\left({\color{gray}-3.107 \mathrm{\%}}\right) $$ Flame Graph

representative_read_entity_type

Function Value Mean Flame graphs
get_entity_type_by_id Account ID: bf5a9ef5-dc3b-43cf-a291-6210c0321eba $$8.28 \mathrm{ms} \pm 39.9 \mathrm{μs}\left({\color{gray}2.06 \mathrm{\%}}\right) $$ Flame Graph

representative_read_multiple_entities

Function Value Mean Flame graphs
entity_by_property traversal_paths=0 0 $$46.4 \mathrm{ms} \pm 274 \mathrm{μs}\left({\color{gray}-4.205 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=255 1,resolve_depths=inherit:1;values:255;properties:255;links:127;link_dests:126;type:true $$94.5 \mathrm{ms} \pm 491 \mathrm{μs}\left({\color{gray}-2.481 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:0;link_dests:0;type:false $$51.9 \mathrm{ms} \pm 313 \mathrm{μs}\left({\color{gray}-4.877 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:1;link_dests:0;type:true $$61.4 \mathrm{ms} \pm 308 \mathrm{μs}\left({\color{gray}-0.200 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:2;links:1;link_dests:0;type:true $$68.0 \mathrm{ms} \pm 326 \mathrm{μs}\left({\color{gray}-2.473 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:2;properties:2;links:1;link_dests:0;type:true $$75.0 \mathrm{ms} \pm 297 \mathrm{μs}\left({\color{gray}-2.582 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=0 0 $$50.0 \mathrm{ms} \pm 207 \mathrm{μs}\left({\color{gray}-2.814 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=255 1,resolve_depths=inherit:1;values:255;properties:255;links:127;link_dests:126;type:true $$77.3 \mathrm{ms} \pm 329 \mathrm{μs}\left({\color{gray}-3.859 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:0;link_dests:0;type:false $$58.2 \mathrm{ms} \pm 373 \mathrm{μs}\left({\color{gray}0.277 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:1;link_dests:0;type:true $$65.2 \mathrm{ms} \pm 340 \mathrm{μs}\left({\color{gray}-1.885 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:2;links:1;link_dests:0;type:true $$66.3 \mathrm{ms} \pm 333 \mathrm{μs}\left({\color{gray}-4.052 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:2;properties:2;links:1;link_dests:0;type:true $$67.4 \mathrm{ms} \pm 338 \mathrm{μs}\left({\color{gray}-2.757 \mathrm{\%}}\right) $$

scenarios

Function Value Mean Flame graphs
full_test query-limited $$141 \mathrm{ms} \pm 518 \mathrm{μs}\left({\color{gray}-1.491 \mathrm{\%}}\right) $$ Flame Graph
full_test query-unlimited $$139 \mathrm{ms} \pm 459 \mathrm{μs}\left({\color{gray}-1.703 \mathrm{\%}}\right) $$ Flame Graph
linked_queries query-limited $$39.5 \mathrm{ms} \pm 189 \mathrm{μs}\left({\color{lightgreen}-62.313 \mathrm{\%}}\right) $$ Flame Graph
linked_queries query-unlimited $$604 \mathrm{ms} \pm 1.04 \mathrm{ms}\left({\color{gray}-0.217 \mathrm{\%}}\right) $$ Flame Graph

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/deps Relates to third-party dependencies (area) area/infra Relates to version control, CI, CD or IaC (area) area/libs Relates to first-party libraries/crates/packages (area) type/eng > backend Owned by the @backend team

Development

Successfully merging this pull request may close these issues.

5 participants