opencode-skills-antigravity 1.0.4 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/bundled-skills/ad-creative/SKILL.md +371 -0
  2. package/bundled-skills/ad-creative/evals/evals.json +90 -0
  3. package/bundled-skills/ad-creative/references/generative-tools.md +637 -0
  4. package/bundled-skills/ad-creative/references/platform-specs.md +213 -0
  5. package/bundled-skills/ai-seo/SKILL.md +407 -0
  6. package/bundled-skills/ai-seo/evals/evals.json +90 -0
  7. package/bundled-skills/ai-seo/references/content-patterns.md +285 -0
  8. package/bundled-skills/ai-seo/references/platform-ranking-factors.md +152 -0
  9. package/bundled-skills/backend-dev-guidelines/SKILL.md +1 -1
  10. package/bundled-skills/cc-skill-security-review/SKILL.md +1 -1
  11. package/bundled-skills/churn-prevention/SKILL.md +433 -0
  12. package/bundled-skills/churn-prevention/evals/evals.json +93 -0
  13. package/bundled-skills/churn-prevention/references/cancel-flow-patterns.md +316 -0
  14. package/bundled-skills/churn-prevention/references/dunning-playbook.md +408 -0
  15. package/bundled-skills/claude-api/LICENSE.txt +202 -0
  16. package/bundled-skills/claude-api/SKILL.md +252 -0
  17. package/bundled-skills/claude-api/csharp/claude-api.md +70 -0
  18. package/bundled-skills/claude-api/curl/examples.md +164 -0
  19. package/bundled-skills/claude-api/go/claude-api.md +146 -0
  20. package/bundled-skills/claude-api/java/claude-api.md +128 -0
  21. package/bundled-skills/claude-api/php/claude-api.md +88 -0
  22. package/bundled-skills/claude-api/python/agent-sdk/README.md +269 -0
  23. package/bundled-skills/claude-api/python/agent-sdk/patterns.md +319 -0
  24. package/bundled-skills/claude-api/python/claude-api/README.md +404 -0
  25. package/bundled-skills/claude-api/python/claude-api/batches.md +182 -0
  26. package/bundled-skills/claude-api/python/claude-api/files-api.md +162 -0
  27. package/bundled-skills/claude-api/python/claude-api/streaming.md +162 -0
  28. package/bundled-skills/claude-api/python/claude-api/tool-use.md +587 -0
  29. package/bundled-skills/claude-api/ruby/claude-api.md +87 -0
  30. package/bundled-skills/claude-api/shared/error-codes.md +205 -0
  31. package/bundled-skills/claude-api/shared/live-sources.md +121 -0
  32. package/bundled-skills/claude-api/shared/models.md +68 -0
  33. package/bundled-skills/claude-api/shared/tool-use-concepts.md +305 -0
  34. package/bundled-skills/claude-api/typescript/agent-sdk/README.md +220 -0
  35. package/bundled-skills/claude-api/typescript/agent-sdk/patterns.md +150 -0
  36. package/bundled-skills/claude-api/typescript/claude-api/README.md +313 -0
  37. package/bundled-skills/claude-api/typescript/claude-api/batches.md +106 -0
  38. package/bundled-skills/claude-api/typescript/claude-api/files-api.md +98 -0
  39. package/bundled-skills/claude-api/typescript/claude-api/streaming.md +178 -0
  40. package/bundled-skills/claude-api/typescript/claude-api/tool-use.md +477 -0
  41. package/bundled-skills/codex-review/SKILL.md +1 -1
  42. package/bundled-skills/cold-email/SKILL.md +167 -0
  43. package/bundled-skills/cold-email/evals/evals.json +94 -0
  44. package/bundled-skills/cold-email/references/benchmarks.md +83 -0
  45. package/bundled-skills/cold-email/references/follow-up-sequences.md +81 -0
  46. package/bundled-skills/cold-email/references/frameworks.md +90 -0
  47. package/bundled-skills/cold-email/references/personalization.md +79 -0
  48. package/bundled-skills/cold-email/references/subject-lines.md +53 -0
  49. package/bundled-skills/content-strategy/SKILL.md +374 -0
  50. package/bundled-skills/content-strategy/evals/evals.json +90 -0
  51. package/bundled-skills/content-strategy/references/headless-cms.md +194 -0
  52. package/bundled-skills/context7-auto-research/SKILL.md +1 -1
  53. package/bundled-skills/dbos-golang/SKILL.md +1 -1
  54. package/bundled-skills/dbos-python/SKILL.md +1 -1
  55. package/bundled-skills/dbos-typescript/SKILL.md +1 -1
  56. package/bundled-skills/debug-buttercup/SKILL.md +1 -1
  57. package/bundled-skills/defuddle/SKILL.md +50 -0
  58. package/bundled-skills/docs/integrations/jetski-cortex.md +3 -3
  59. package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +1 -1
  60. package/bundled-skills/docs/integrations/jetski-gemini-loader/package.json +1 -0
  61. package/bundled-skills/docs/maintainers/repo-growth-seo.md +3 -3
  62. package/bundled-skills/docs/maintainers/skills-import-2026-03-21.md +81 -0
  63. package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
  64. package/bundled-skills/docs/users/bundles.md +1 -1
  65. package/bundled-skills/docs/users/claude-code-skills.md +1 -1
  66. package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
  67. package/bundled-skills/docs/users/getting-started.md +1 -1
  68. package/bundled-skills/docs/users/kiro-integration.md +1 -1
  69. package/bundled-skills/docs/users/usage.md +4 -4
  70. package/bundled-skills/docs/users/visual-guide.md +4 -4
  71. package/bundled-skills/evaluation/SKILL.md +1 -1
  72. package/bundled-skills/exa-search/SKILL.md +1 -1
  73. package/bundled-skills/firecrawl-scraper/SKILL.md +1 -1
  74. package/bundled-skills/frontend-dev-guidelines/SKILL.md +1 -1
  75. package/bundled-skills/gha-security-review/SKILL.md +2 -1
  76. package/bundled-skills/git-pushing/SKILL.md +1 -1
  77. package/bundled-skills/internal-comms/LICENSE.txt +202 -0
  78. package/bundled-skills/internal-comms/SKILL.md +35 -0
  79. package/bundled-skills/internal-comms/examples/3p-updates.md +47 -0
  80. package/bundled-skills/internal-comms/examples/company-newsletter.md +65 -0
  81. package/bundled-skills/internal-comms/examples/faq-answers.md +30 -0
  82. package/bundled-skills/internal-comms/examples/general-comms.md +16 -0
  83. package/bundled-skills/json-canvas/SKILL.md +253 -0
  84. package/bundled-skills/json-canvas/references/EXAMPLES.md +329 -0
  85. package/bundled-skills/lead-magnets/SKILL.md +319 -0
  86. package/bundled-skills/lead-magnets/references/benchmarks.md +129 -0
  87. package/bundled-skills/lead-magnets/references/format-guide.md +196 -0
  88. package/bundled-skills/memory-systems/SKILL.md +1 -1
  89. package/bundled-skills/obsidian-bases/SKILL.md +506 -0
  90. package/bundled-skills/obsidian-bases/references/FUNCTIONS_REFERENCE.md +173 -0
  91. package/bundled-skills/obsidian-cli/SKILL.md +115 -0
  92. package/bundled-skills/obsidian-markdown/SKILL.md +205 -0
  93. package/bundled-skills/obsidian-markdown/references/CALLOUTS.md +58 -0
  94. package/bundled-skills/obsidian-markdown/references/EMBEDS.md +63 -0
  95. package/bundled-skills/obsidian-markdown/references/PROPERTIES.md +61 -0
  96. package/bundled-skills/product-marketing-context/SKILL.md +250 -0
  97. package/bundled-skills/product-marketing-context/evals/evals.json +85 -0
  98. package/bundled-skills/react-best-practices/SKILL.md +1 -1
  99. package/bundled-skills/revops/SKILL.md +352 -0
  100. package/bundled-skills/revops/evals/evals.json +91 -0
  101. package/bundled-skills/revops/references/automation-playbooks.md +290 -0
  102. package/bundled-skills/revops/references/lifecycle-definitions.md +278 -0
  103. package/bundled-skills/revops/references/routing-rules.md +203 -0
  104. package/bundled-skills/revops/references/scoring-models.md +247 -0
  105. package/bundled-skills/sales-enablement/SKILL.md +358 -0
  106. package/bundled-skills/sales-enablement/evals/evals.json +91 -0
  107. package/bundled-skills/sales-enablement/references/deck-frameworks.md +263 -0
  108. package/bundled-skills/sales-enablement/references/demo-scripts.md +355 -0
  109. package/bundled-skills/sales-enablement/references/objection-library.md +270 -0
  110. package/bundled-skills/sales-enablement/references/one-pager-templates.md +208 -0
  111. package/bundled-skills/seo/SKILL.md +139 -0
  112. package/bundled-skills/seo/references/cwv-thresholds.md +108 -0
  113. package/bundled-skills/seo/references/eeat-framework.md +214 -0
  114. package/bundled-skills/seo/references/quality-gates.md +155 -0
  115. package/bundled-skills/seo/references/schema-types.md +118 -0
  116. package/bundled-skills/seo-competitor-pages/SKILL.md +229 -0
  117. package/bundled-skills/seo-content/SKILL.md +186 -0
  118. package/bundled-skills/seo-dataforseo/SKILL.md +395 -0
  119. package/bundled-skills/seo-geo/SKILL.md +254 -0
  120. package/bundled-skills/seo-hreflang/SKILL.md +209 -0
  121. package/bundled-skills/seo-image-gen/SKILL.md +183 -0
  122. package/bundled-skills/seo-images/SKILL.md +193 -0
  123. package/bundled-skills/seo-page/SKILL.md +103 -0
  124. package/bundled-skills/seo-plan/SKILL.md +136 -0
  125. package/bundled-skills/seo-plan/assets/agency.md +175 -0
  126. package/bundled-skills/seo-plan/assets/ecommerce.md +167 -0
  127. package/bundled-skills/seo-plan/assets/generic.md +144 -0
  128. package/bundled-skills/seo-plan/assets/local-service.md +160 -0
  129. package/bundled-skills/seo-plan/assets/publisher.md +153 -0
  130. package/bundled-skills/seo-plan/assets/saas.md +135 -0
  131. package/bundled-skills/seo-programmatic/SKILL.md +184 -0
  132. package/bundled-skills/seo-schema/SKILL.md +178 -0
  133. package/bundled-skills/seo-sitemap/SKILL.md +129 -0
  134. package/bundled-skills/seo-technical/SKILL.md +175 -0
  135. package/bundled-skills/site-architecture/SKILL.md +366 -0
  136. package/bundled-skills/site-architecture/evals/evals.json +88 -0
  137. package/bundled-skills/site-architecture/references/mermaid-templates.md +216 -0
  138. package/bundled-skills/site-architecture/references/navigation-patterns.md +305 -0
  139. package/bundled-skills/site-architecture/references/site-type-templates.md +293 -0
  140. package/bundled-skills/skill-improver/SKILL.md +1 -1
  141. package/bundled-skills/tavily-web/SKILL.md +1 -1
  142. package/bundled-skills/test-fixing/SKILL.md +1 -1
  143. package/bundled-skills/tool-design/SKILL.md +1 -1
  144. package/bundled-skills/ui-ux-pro-max/SKILL.md +1 -1
  145. package/bundled-skills/verification-before-completion/SKILL.md +1 -1
  146. package/bundled-skills/wiki-changelog/SKILL.md +1 -1
  147. package/bundled-skills/wiki-onboarding/SKILL.md +1 -1
  148. package/bundled-skills/wiki-qa/SKILL.md +1 -1
  149. package/bundled-skills/wiki-researcher/SKILL.md +1 -1
  150. package/bundled-skills/wiki-vitepress/SKILL.md +1 -1
  151. package/package.json +1 -1
@@ -0,0 +1,47 @@
1
+ ## Instructions
2
+ You are being asked to write a 3P update. 3P updates stand for "Progress, Plans, Problems." The main audience is for executives, leadership, other teammates, etc. They're meant to be very succinct and to-the-point: think something you can read in 30-60sec or less. They're also for people with some, but not a lot of context on what the team does.
3
+
4
+ 3Ps can cover a team of any size, ranging all the way up to the entire company. The bigger the team, the less granular the tasks should be. For example, "mobile team" might have "shipped feature" or "fixed bugs," whereas the company might have really meaty 3Ps, like "hired 20 new people" or "closed 10 new deals."
5
+
6
+ They represent the work of the team across a time period, almost always one week. They include three sections:
7
+ 1) Progress: what the team has accomplished over the next time period. Focus mainly on things shipped, milestones achieved, tasks created, etc.
8
+ 2) Plans: what the team plans to do over the next time period. Focus on what things are top-of-mind, really high priority, etc. for the team.
9
+ 3) Problems: anything that is slowing the team down. This could be things like too few people, bugs or blockers that are preventing the team from moving forward, some deal that fell through, etc.
10
+
11
+ Before writing them, make sure that you know the team name. If it's not specified, you can ask explicitly what the team name you're writing for is.
12
+
13
+
14
+ ## Tools Available
15
+ Whenever possible, try to pull from available sources to get the information you need:
16
+ - Slack: posts from team members with their updates - ideally look for posts in large channels with lots of reactions
17
+ - Google Drive: docs written from critical team members with lots of views
18
+ - Email: emails with lots of responses of lots of content that seems relevant
19
+ - Calendar: non-recurring meetings that have a lot of importance, like product reviews, etc.
20
+
21
+
22
+ Try to gather as much context as you can, focusing on the things that covered the time period you're writing for:
23
+ - Progress: anything between a week ago and today
24
+ - Plans: anything from today to the next week
25
+ - Problems: anything between a week ago and today
26
+
27
+
28
+ If you don't have access, you can ask the user for things they want to cover. They might also include these things to you directly, in which case you're mostly just formatting for this particular format.
29
+
30
+ ## Workflow
31
+
32
+ 1. **Clarify scope**: Confirm the team name and time period (usually past week for Progress/Problems, next
33
+ week for Plans)
34
+ 2. **Gather information**: Use available tools or ask the user directly
35
+ 3. **Draft the update**: Follow the strict formatting guidelines
36
+ 4. **Review**: Ensure it's concise (30-60 seconds to read) and data-driven
37
+
38
+ ## Formatting
39
+
40
+ The format is always the same, very strict formatting. Never use any formatting other than this. Pick an emoji that is fun and captures the vibe of the team and update.
41
+
42
+ [pick an emoji] [Team Name] (Dates Covered, usually a week)
43
+ Progress: [1-3 sentences of content]
44
+ Plans: [1-3 sentences of content]
45
+ Problems: [1-3 sentences of content]
46
+
47
+ Each section should be no more than 1-3 sentences: clear, to the point. It should be data-driven, and generally include metrics where possible. The tone should be very matter-of-fact, not super prose-heavy.
@@ -0,0 +1,65 @@
1
+ ## Instructions
2
+ You are being asked to write a company-wide newsletter update. You are meant to summarize the past week/month of a company in the form of a newsletter that the entire company will read. It should be maybe ~20-25 bullet points long. It will be sent via Slack and email, so make it consumable for that.
3
+
4
+ Ideally it includes the following attributes:
5
+ - Lots of links: pulling documents from Google Drive that are very relevant, linking to prominent Slack messages in announce channels and from executives, perhgaps referencing emails that went company-wide, highlighting significant things that have happened in the company.
6
+ - Short and to-the-point: each bullet should probably be no longer than ~1-2 sentences
7
+ - Use the "we" tense, as you are part of the company. Many of the bullets should say "we did this" or "we did that"
8
+
9
+ ## Tools to use
10
+ If you have access to the following tools, please try to use them. If not, you can also let the user know directly that their responses would be better if they gave them access.
11
+
12
+ - Slack: look for messages in channels with lots of people, with lots of reactions or lots of responses within the thread
13
+ - Email: look for things from executives that discuss company-wide announcements
14
+ - Calendar: if there were meetings with large attendee lists, particularly things like All-Hands meetings, big company announcements, etc. If there were documents attached to those meetings, those are great links to include.
15
+ - Documents: if there were new docs published in the last week or two that got a lot of attention, you can link them. These should be things like company-wide vision docs, plans for the upcoming quarter or half, things authored by critical executives, etc.
16
+ - External press: if you see references to articles or press we've received over the past week, that could be really cool too.
17
+
18
+ If you don't have access to any of these things, you can ask the user for things they want to cover. In this case, you'll mostly just be polishing up and fitting to this format more directly.
19
+
20
+ ## Sections
21
+ The company is pretty big: 1000+ people. There are a variety of different teams and initiatives going on across the company. To make sure the update works well, try breaking it into sections of similar things. You might break into clusters like {product development, go to market, finance} or {recruiting, execution, vision}, or {external news, internal news} etc. Try to make sure the different areas of the company are highlighted well.
22
+
23
+ ## Prioritization
24
+ Focus on:
25
+ - Company-wide impact (not team-specific details)
26
+ - Announcements from leadership
27
+ - Major milestones and achievements
28
+ - Information that affects most employees
29
+ - External recognition or press
30
+
31
+ Avoid:
32
+ - Overly granular team updates (save those for 3Ps)
33
+ - Information only relevant to small groups
34
+ - Duplicate information already communicated
35
+
36
+ ## Example Formats
37
+
38
+ :megaphone: Company Announcements
39
+ - Announcement 1
40
+ - Announcement 2
41
+ - Announcement 3
42
+
43
+ :dart: Progress on Priorities
44
+ - Area 1
45
+ - Sub-area 1
46
+ - Sub-area 2
47
+ - Sub-area 3
48
+ - Area 2
49
+ - Sub-area 1
50
+ - Sub-area 2
51
+ - Sub-area 3
52
+ - Area 3
53
+ - Sub-area 1
54
+ - Sub-area 2
55
+ - Sub-area 3
56
+
57
+ :pillar: Leadership Updates
58
+ - Post 1
59
+ - Post 2
60
+ - Post 3
61
+
62
+ :thread: Social Updates
63
+ - Update 1
64
+ - Update 2
65
+ - Update 3
@@ -0,0 +1,30 @@
1
+ ## Instructions
2
+ You are an assistant for answering questions that are being asked across the company. Every week, there are lots of questions that get asked across the company, and your goal is to try to summarize what those questions are. We want our company to be well-informed and on the same page, so your job is to produce a set of frequently asked questions that our employees are asking and attempt to answer them. Your singular job is to do two things:
3
+
4
+ - Find questions that are big sources of confusion for lots of employees at the company, generally about things that affect a large portion of the employee base
5
+ - Attempt to give a nice summarized answer to that question in order to minimize confusion.
6
+
7
+ Some examples of areas that may be interesting to folks: recent corporate events (fundraising, new executives, etc.), upcoming launches, hiring progress, changes to vision or focus, etc.
8
+
9
+
10
+ ## Tools Available
11
+ You should use the company's available tools, where communication and work happens. For most companies, it looks something like this:
12
+ - Slack: questions being asked across the company - it could be questions in response to posts with lots of responses, questions being asked with lots of reactions or thumbs up to show support, or anything else to show that a large number of employees want to ask the same things
13
+ - Email: emails with FAQs written directly in them can be a good source as well
14
+ - Documents: docs in places like Google Drive, linked on calendar events, etc. can also be a good source of FAQs, either directly added or inferred based on the contents of the doc
15
+
16
+ ## Formatting
17
+ The formatting should be pretty basic:
18
+
19
+ - *Question*: [insert question - 1 sentence]
20
+ - *Answer*: [insert answer - 1-2 sentence]
21
+
22
+ ## Guidance
23
+ Make sure you're being holistic in your questions. Don't focus too much on just the user in question or the team they are a part of, but try to capture the entire company. Try to be as holistic as you can in reading all the tools available, producing responses that are relevant to all at the company.
24
+
25
+ ## Answer Guidelines
26
+ - Base answers on official company communications when possible
27
+ - If information is uncertain, indicate that clearly
28
+ - Link to authoritative sources (docs, announcements, emails)
29
+ - Keep tone professional but approachable
30
+ - Flag if a question requires executive input or official response
@@ -0,0 +1,16 @@
1
+ ## Instructions
2
+ You are being asked to write internal company communication that doesn't fit into the standard formats (3P
3
+ updates, newsletters, or FAQs).
4
+
5
+ Before proceeding:
6
+ 1. Ask the user about their target audience
7
+ 2. Understand the communication's purpose
8
+ 3. Clarify the desired tone (formal, casual, urgent, informational)
9
+ 4. Confirm any specific formatting requirements
10
+
11
+ Use these general principles:
12
+ - Be clear and concise
13
+ - Use active voice
14
+ - Put the most important information first
15
+ - Include relevant links and references
16
+ - Match the company's communication style
@@ -0,0 +1,253 @@
1
+ ---
2
+ name: json-canvas
3
+ description: Create and edit JSON Canvas files (.canvas) with nodes, edges, groups, and connections. Use when working with .canvas files, creating visual canvases, mind maps, flowcharts, or when the user mentions Canvas files in Obsidian.
4
+ risk: unknown
5
+ source: "https://github.com/kepano/obsidian-skills"
6
+ date_added: "2026-03-21"
7
+ ---
8
+
9
+ # JSON Canvas Skill
10
+
11
+ ## When to Use
12
+
13
+ - Use when creating or editing `.canvas` files for Obsidian.
14
+ - Use for mind maps, flowcharts, visual note structures, or connected canvases.
15
+ - Use when the user explicitly mentions JSON Canvas or Obsidian Canvas files.
16
+
17
+ ## File Structure
18
+
19
+ A canvas file (`.canvas`) contains two top-level arrays following the [JSON Canvas Spec 1.0](https://jsoncanvas.org/spec/1.0/):
20
+
21
+ ```json
22
+ {
23
+ "nodes": [],
24
+ "edges": []
25
+ }
26
+ ```
27
+
28
+ - `nodes` (optional): Array of node objects
29
+ - `edges` (optional): Array of edge objects connecting nodes
30
+
31
+ ## Common Workflows
32
+
33
+ ### 1. Create a New Canvas
34
+
35
+ 1. Create a `.canvas` file with the base structure `{"nodes": [], "edges": []}`
36
+ 2. Generate unique 16-character hex IDs for each node (e.g., `"6f0ad84f44ce9c17"`)
37
+ 3. Add nodes with required fields: `id`, `type`, `x`, `y`, `width`, `height`
38
+ 4. Add edges referencing valid node IDs via `fromNode` and `toNode`
39
+ 5. **Validate**: Parse the JSON to confirm it is valid. Verify all `fromNode`/`toNode` values exist in the nodes array
40
+
41
+ ### 2. Add a Node to an Existing Canvas
42
+
43
+ 1. Read and parse the existing `.canvas` file
44
+ 2. Generate a unique ID that does not collide with existing node or edge IDs
45
+ 3. Choose position (`x`, `y`) that avoids overlapping existing nodes (leave 50-100px spacing)
46
+ 4. Append the new node object to the `nodes` array
47
+ 5. Optionally add edges connecting the new node to existing nodes
48
+ 6. **Validate**: Confirm all IDs are unique and all edge references resolve to existing nodes
49
+
50
+ ### 3. Connect Two Nodes
51
+
52
+ 1. Identify the source and target node IDs
53
+ 2. Generate a unique edge ID
54
+ 3. Set `fromNode` and `toNode` to the source and target IDs
55
+ 4. Optionally set `fromSide`/`toSide` (top, right, bottom, left) for anchor points
56
+ 5. Optionally set `label` for descriptive text on the edge
57
+ 6. Append the edge to the `edges` array
58
+ 7. **Validate**: Confirm both `fromNode` and `toNode` reference existing node IDs
59
+
60
+ ### 4. Edit an Existing Canvas
61
+
62
+ 1. Read and parse the `.canvas` file as JSON
63
+ 2. Locate the target node or edge by `id`
64
+ 3. Modify the desired attributes (text, position, color, etc.)
65
+ 4. Write the updated JSON back to the file
66
+ 5. **Validate**: Re-check all ID uniqueness and edge reference integrity after editing
67
+
68
+ ## Nodes
69
+
70
+ Nodes are objects placed on the canvas. Array order determines z-index: first node = bottom layer, last node = top layer.
71
+
72
+ ### Generic Node Attributes
73
+
74
+ | Attribute | Required | Type | Description |
75
+ |-----------|----------|------|-------------|
76
+ | `id` | Yes | string | Unique 16-char hex identifier |
77
+ | `type` | Yes | string | `text`, `file`, `link`, or `group` |
78
+ | `x` | Yes | integer | X position in pixels |
79
+ | `y` | Yes | integer | Y position in pixels |
80
+ | `width` | Yes | integer | Width in pixels |
81
+ | `height` | Yes | integer | Height in pixels |
82
+ | `color` | No | canvasColor | Preset `"1"`-`"6"` or hex (e.g., `"#FF0000"`) |
83
+
84
+ ### Text Nodes
85
+
86
+ | Attribute | Required | Type | Description |
87
+ |-----------|----------|------|-------------|
88
+ | `text` | Yes | string | Plain text with Markdown syntax |
89
+
90
+ ```json
91
+ {
92
+ "id": "6f0ad84f44ce9c17",
93
+ "type": "text",
94
+ "x": 0,
95
+ "y": 0,
96
+ "width": 400,
97
+ "height": 200,
98
+ "text": "# Hello World\n\nThis is **Markdown** content."
99
+ }
100
+ ```
101
+
102
+ **Newline pitfall**: Use `\n` for line breaks in JSON strings. Do **not** use the literal `\\n` -- Obsidian renders that as the characters `\` and `n`.
103
+
104
+ ### File Nodes
105
+
106
+ | Attribute | Required | Type | Description |
107
+ |-----------|----------|------|-------------|
108
+ | `file` | Yes | string | Path to file within the system |
109
+ | `subpath` | No | string | Link to heading or block (starts with `#`) |
110
+
111
+ ```json
112
+ {
113
+ "id": "a1b2c3d4e5f67890",
114
+ "type": "file",
115
+ "x": 500,
116
+ "y": 0,
117
+ "width": 400,
118
+ "height": 300,
119
+ "file": "Attachments/diagram.png"
120
+ }
121
+ ```
122
+
123
+ ### Link Nodes
124
+
125
+ | Attribute | Required | Type | Description |
126
+ |-----------|----------|------|-------------|
127
+ | `url` | Yes | string | External URL |
128
+
129
+ ```json
130
+ {
131
+ "id": "c3d4e5f678901234",
132
+ "type": "link",
133
+ "x": 1000,
134
+ "y": 0,
135
+ "width": 400,
136
+ "height": 200,
137
+ "url": "https://obsidian.md"
138
+ }
139
+ ```
140
+
141
+ ### Group Nodes
142
+
143
+ Groups are visual containers for organizing other nodes. Position child nodes inside the group's bounds.
144
+
145
+ | Attribute | Required | Type | Description |
146
+ |-----------|----------|------|-------------|
147
+ | `label` | No | string | Text label for the group |
148
+ | `background` | No | string | Path to background image |
149
+ | `backgroundStyle` | No | string | `cover`, `ratio`, or `repeat` |
150
+
151
+ ```json
152
+ {
153
+ "id": "d4e5f6789012345a",
154
+ "type": "group",
155
+ "x": -50,
156
+ "y": -50,
157
+ "width": 1000,
158
+ "height": 600,
159
+ "label": "Project Overview",
160
+ "color": "4"
161
+ }
162
+ ```
163
+
164
+ ## Edges
165
+
166
+ Edges connect nodes via `fromNode` and `toNode` IDs.
167
+
168
+ | Attribute | Required | Type | Default | Description |
169
+ |-----------|----------|------|---------|-------------|
170
+ | `id` | Yes | string | - | Unique identifier |
171
+ | `fromNode` | Yes | string | - | Source node ID |
172
+ | `fromSide` | No | string | - | `top`, `right`, `bottom`, or `left` |
173
+ | `fromEnd` | No | string | `none` | `none` or `arrow` |
174
+ | `toNode` | Yes | string | - | Target node ID |
175
+ | `toSide` | No | string | - | `top`, `right`, `bottom`, or `left` |
176
+ | `toEnd` | No | string | `arrow` | `none` or `arrow` |
177
+ | `color` | No | canvasColor | - | Line color |
178
+ | `label` | No | string | - | Text label |
179
+
180
+ ```json
181
+ {
182
+ "id": "0123456789abcdef",
183
+ "fromNode": "6f0ad84f44ce9c17",
184
+ "fromSide": "right",
185
+ "toNode": "a1b2c3d4e5f67890",
186
+ "toSide": "left",
187
+ "toEnd": "arrow",
188
+ "label": "leads to"
189
+ }
190
+ ```
191
+
192
+ ## Colors
193
+
194
+ The `canvasColor` type accepts either a hex string or a preset number:
195
+
196
+ | Preset | Color |
197
+ |--------|-------|
198
+ | `"1"` | Red |
199
+ | `"2"` | Orange |
200
+ | `"3"` | Yellow |
201
+ | `"4"` | Green |
202
+ | `"5"` | Cyan |
203
+ | `"6"` | Purple |
204
+
205
+ Preset color values are intentionally undefined -- applications use their own brand colors.
206
+
207
+ ## ID Generation
208
+
209
+ Generate 16-character lowercase hexadecimal strings (64-bit random value):
210
+
211
+ ```
212
+ "6f0ad84f44ce9c17"
213
+ "a3b2c1d0e9f8a7b6"
214
+ ```
215
+
216
+ ## Layout Guidelines
217
+
218
+ - Coordinates can be negative (canvas extends infinitely)
219
+ - `x` increases right, `y` increases down; position is the top-left corner
220
+ - Space nodes 50-100px apart; leave 20-50px padding inside groups
221
+ - Align to grid (multiples of 10 or 20) for cleaner layouts
222
+
223
+ | Node Type | Suggested Width | Suggested Height |
224
+ |-----------|-----------------|------------------|
225
+ | Small text | 200-300 | 80-150 |
226
+ | Medium text | 300-450 | 150-300 |
227
+ | Large text | 400-600 | 300-500 |
228
+ | File preview | 300-500 | 200-400 |
229
+ | Link preview | 250-400 | 100-200 |
230
+
231
+ ## Validation Checklist
232
+
233
+ After creating or editing a canvas file, verify:
234
+
235
+ 1. All `id` values are unique across both nodes and edges
236
+ 2. Every `fromNode` and `toNode` references an existing node ID
237
+ 3. Required fields are present for each node type (`text` for text nodes, `file` for file nodes, `url` for link nodes)
238
+ 4. `type` is one of: `text`, `file`, `link`, `group`
239
+ 5. `fromSide`/`toSide` values are one of: `top`, `right`, `bottom`, `left`
240
+ 6. `fromEnd`/`toEnd` values are one of: `none`, `arrow`
241
+ 7. Color presets are `"1"` through `"6"` or valid hex (e.g., `"#FF0000"`)
242
+ 8. JSON is valid and parseable
243
+
244
+ If validation fails, check for duplicate IDs, dangling edge references, or malformed JSON strings (especially unescaped newlines in text content).
245
+
246
+ ## Complete Examples
247
+
248
+ See [references/EXAMPLES.md](references/EXAMPLES.md) for full canvas examples including mind maps, project boards, research canvases, and flowcharts.
249
+
250
+ ## References
251
+
252
+ - [JSON Canvas Spec 1.0](https://jsoncanvas.org/spec/1.0/)
253
+ - [JSON Canvas GitHub](https://github.com/obsidianmd/jsoncanvas)