본문으로 건너뛰기
cccskills
무료GitHub에 공개

figure

Create an animated diagram showing request flows, background jobs, or feature changes. The result is a single SVG image for README files, pull requests, issues, or blog posts, with support for light and dark themes.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

원문원문 설명 보기

Draw an animated figure (boxes, arrows, moving data) as one self-contained SVG for a GitHub README, PR, issue or blog post. Use when a change or an explanation needs a diagram — how a request flows, what a background job does, what a feature changed — or when the user asks for a diagram, figure, animation or "show it visually". The docs site's own pages use the interactive player instead (see step 4).

연동 도구GitHub
설치 방법 보기

이럴 때 유용합니다

  • Explaining request and data flows
  • Illustrating how a background job works
  • Showing feature changes in a pull request
  • Adding animated diagrams to README files and blog posts

포함된 파일(1)

  • SKILL.md7.6 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Figure

One animated SVG, no scripts, no upload: it renders and plays anywhere markdown does — GitHub README, PR and issue comments, blog posts, Notion. Sharp at any size, and it follows the reader's light or dark theme.

Figures are Giotto diagrams: one JSON document, the same format the docs site's interactive figures use (hindsight-docs/figures/*.json).

You write the diagram JSON — never SVG. One command renders it. No build, no browser.

1. Write the diagram

Do not save it as a file in the repo. It is an input, not a deliverable — pipe it in (step 2), and the rendered SVG keeps a copy of it for you.

{
  "title": "Retain",
  "speed": 2000,
  "elements": [
    { "id": "root", "type": "group", "children": ["agent", "api", "bank"], "layout": { "direction": "row", "gap": 48 } },
    { "id": "agent", "type": "rectangle", "content": [{ "type": "title", "text": "Your AI Agent" }] },
    { "id": "api", "type": "group", "label": { "title": "Hindsight API" }, "children": ["retain"], "layout": { "direction": "column", "gap": 24 } },
    { "id": "retain", "type": "rectangle", "content": [{ "type": "title", "text": "Retain" }, { "type": "subtitle", "text": "LLM extraction" }] },
    { "id": "bank", "type": "group", "label": { "title": "Memory Bank" }, "children": ["facts", "obs"], "layout": { "direction": "column", "gap": 28 } },
    { "id": "facts", "type": "cylinder", "content": [{ "type": "title", "text": "Facts" }, { "type": "subtitle", "text": "world · experience" }] },
    { "id": "obs", "type": "cylinder", "content": [{ "type": "title", "text": "Observations" }] },
    { "id": "call", "type": "arrow", "route": "curved", "start": { "id": "agent" }, "end": { "id": "retain" }, "label": { "text": "retain()" } },
    { "id": "store", "type": "arrow", "route": "curved", "start": { "id": "retain" }, "end": { "id": "facts" }, "label": { "text": "extract" } },
    { "id": "consolidate", "type": "arrow", "route": "curved", "start": { "id": "facts" }, "end": { "id": "obs" }, "label": { "text": "consolidate" }, "quiet": true }
  ],
  "scenes": [
    {
      "label": "retain()",
      "beats": [
        { "edges": { "edge": "call", "data": "“Alice joined Google in March”" }, "say": "Your agent sends what happened." },
        {
          "edges": "store",
          "show": { "facts": [{ "tag": "world", "tone": "blue", "text": "Alice joined Google", "meta": "Mar 2026", "mark": "new" }] },
          "say": "An LLM pulls out the facts."
        },
        {
          "edges": "consolidate",
          "ms": 2600,
          "show": { "obs": [{ "text": "Alice works at Google", "meta": "2 sources" }] },
          "say": "The worker merges them into one belief."
        }
      ]
    }
  ]
}

Elements — a flat list. A group lists its children by id and lays them out (layout: { direction: "row" | "column", gap, align }); a label: { title } draws a frame around it. Children line up at the top/left unless the layout says otherwise: use align: "center" in rows and align: "stretch" in columns (equal-width boxes), as the docs figures do. rectangle boxes are the things that do something; cylinder is data at rest; diamond is a decision. A box's content is blocks: title, subtitle, text, list, chips, code. Give every element a stable id.

Arrows — { type: "arrow", start: { id }, end: { id }, label?: { text }, route: "curved", around?, quiet? }; the ends name a box or a group. around: "above" | "below" arcs over the boxes in between; quiet: true draws the arrow only while a scene uses it (for long arrows that would cut across).

Scenes and beats — each scene is one story the figure tells; the SVG plays them in a loop. A beat is one moment: edges (an arrow id, { edge, back, data } for a reverse hop or a data chip, or an array to run several at once), say (the caption), show (fills the card inside a box until the scene ends), light (highlight boxes for that beat; on the scene, for the whole scene), ms (how long the beat lasts).

Card rows — { tag?, tone?, text, meta?, mark?, mono? }. tone is blue | purple | green | orange | red | gray. Use tag for the kind of thing (world, user, page), meta for a detail, and mark for what happened to it (new, ✓, cited, ↻). **bold** and `code` work in any text.

The full format is the FORMAT text in node_modules/giotto/lib/edit.js. The 13 figures in hindsight-docs/figures/ are working examples — the fastest start is copying the closest one.

Keep it honest and specific: real example data beats placeholders, and every claim in a label, card or caption must match what the code actually does — check the code, don't assume.

2. Render it — from stdin, so nothing is left on disk

npx giotto export - path/to/out.svg <<'DOC'
{ "title": …, "elements": […], "scenes": […] }
DOC

giotto comes from the docs site's dependencies (npm install at the repo root). The quoted <<'DOC' heredoc passes the JSON through untouched, and the only file produced is the SVG. Layout and scene warnings print on stderr: fix them. A reference to an element that doesn't exist (an arrow end, a group child, a box a scene fills) is an error: the export fails and writes nothing.

Other forms:

npx giotto export hindsight-docs/figures/retain.json out.svg   # a docs figure, as an SVG
npx giotto export doc.json out.svg --theme dark --static       # one still frame, dark
npx giotto spec out.svg                                        # print the diagram an SVG carries

Every SVG embeds its diagram in <metadata id="giotto-doc">, so a figure stays editable without anyone keeping the JSON: read it back with giotto spec, change what you need, render again.

3. Look at it before you ship it

Always. Text that overflows its box, an arrow crossing a box, a caption that does not match what is moving — obvious on sight, invisible in the source.

cd $(dirname out.svg) && python3 -m http.server 8777 &   # the browser tool blocks file:// URLs

Then open http://localhost:8777/out.svg, screenshot it, wait a few seconds and screenshot again to catch a later beat. open out.svg works too when a human is watching.

4. Put it where it belongs

  • PR or issue comment — commit the SVG on the branch, then reference its raw URL: ![figure](https://raw.githubusercontent.com/<owner>/<repo>/<branch>/<path>.svg). GitHub renders and animates it immediately.

  • README or repo docs — commit it and link it with a relative path.

  • Blog post — hindsight-docs/static/img/blog/, referenced as /img/blog/<name>.svg.

  • The docs site's own pages — don't use an SVG. Those pages use the interactive player, which has tabs, pause, speed and hover. Save the diagram as hindsight-docs/figures/<name>.json and put it on the page:

    import Figure from '@site/src/components/Figure';
    import retain from '@site/figures/retain.json';
    
    <Figure doc={retain} />
    

What the SVG cannot do

It loops through every scene with no controls: no tabs, no pause, no hover. If the figure needs those, it belongs on the docs site. Keep an SVG to one or two scenes so the loop comes back round quickly.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Record task handoffs between Bots in shared Hindsight memory, including progress, remaining work, sources, and caveats. Other Bots can retrieve the record later, continue unfinished work, and report the outcome back through shared memory.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Handing unfinished work to another Bot
  • Resuming a task started by another Bot
  • Sharing findings with Bots outside the current conversation
vectorize-io/hindsight5.1만2026년 10월 17일 업데이트

Review changed code against project rules and report missing tests, unused code, typing problems, and style violations. It also checks API design and data isolation, helping developers identify issues after implementation.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Reviewing changes after implementation
  • Finding missing tests and unused code
  • Checking Python types and API design
vectorize-io/hindsight5.1만2026년 10월 17일 업데이트

Create a specialized Claude Code subagent with Hindsight long-term memory. Start with an empty agent or import prepared documents, then equip it with knowledge pages and memory search to reuse information across sessions.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Create a specialized agent that remembers across sessions
  • Build an agent from prepared reference documents
  • Start an empty agent and add knowledge over time
vectorize-io/hindsight5.1만2026년 10월 17일 업데이트

Plan how an AI application should use Hindsight memory. Identify useful information to retain, define user-scoping tags and memory bank settings, and specify how retrieved facts and synthesized knowledge should reach the model.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Plan memory that carries conversation context across sessions
  • Design tags that separate each user's memories
  • Plan summaries of customer preferences and recurring issues
vectorize-io/hindsight5.1만2026년 10월 17일 업데이트

Store project conventions, task outcomes, and troubleshooting lessons in a shared Hindsight Cloud memory bank. Retrieve relevant context before new work, or synthesize past experience to guide decisions and help teammates reuse what has been learned.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Save project coding and testing conventions
  • Share failure causes, fixes, and workarounds
  • Retrieve related lessons before starting a task
vectorize-io/hindsight5.1만2026년 10월 17일 업데이트

Manage Hindsight memory for coding sessions: retrieve past decisions, store documents and initiative plans, correct outdated information, and configure memory by project. It also explains automatic conversation capture and helps investigate memory configuration problems.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Retrieving past project decisions and conventions
  • Saving external notes and initiative plans
  • Correcting outdated or inaccurate memory
vectorize-io/hindsight5.1만2026년 10월 17일 업데이트

vectorize-io의 스킬 모두 보기

이 스킬의 문제 신고