Agent skill

Thinking Orbs

by boraoztunc in boraoztunc/skills

Add accessible animated AI loading and agent-status indicators with the React thinking-orbs library.

Apache-2.0Auto-check passed

Install Thinking Orbs

skills CLI
$ npx skills add boraoztunc/skills --skill thinking-orbs -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install boraoztunc/skills thinking-orbs --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/boraoztunc/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/thinking-orbs .claude/skills/thinking-orbs && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
thinking-orbs
GitHub stars
395
Used in
2 other repos
Token cost
~2.4k tokens
SKILL.md length
1,039 words
Files
2
Skills in repo
52
Repo updated
First seen
Licence
Apache-2.0

At a glance

Add accessible animated AI loading and agent-status indicators with the React thinking-orbs library.

  • Works in 8 steps: Use thinking-orbs in React 18+… → Map the real product lifecycle to one of… → Use only the tuned 20 or 64 pixel size.… → …
  • Tool-running interface needs a semantic working
  • SKILL.md covers Core Contract, Install, Choose the State and Choose the Size, plus 11 more sections
  • Calls npm and git

What it does

Thinking Orbs is an agent skill from boraoztunc/skills. Add accessible animated AI loading and agent-status indicators with the React thinking-orbs library. Use when a chat, copilot, voice, search, generation, or tool-running interface needs a semantic working, searching, solving, listening, composing, or shaping state; when replacing a generic spinner with an AI activity orb; or when implementing the library's size, theme, speed, pause, reduced-motion, and canvas behavior.

Its SKILL.md is about 2.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `REFERENCES.md`).

It works with React. The repository describes itself as: Claude Code skills for copywriting, SEO, design, and more. The licence is Apache-2.0.

When your agent uses it

  • Tool-running interface needs a semantic working
  • Replacing a generic spinner with an AI activity orb
  • Implementing the librarys size
  • Canvas behavior

Example prompts

  • “/thinking-orbs”

Requirements

  • Node.js

Workflow steps

8 steps, taken from the first numbered list in SKILL.md.

  1. Use thinking-orbs in React 18+ interfaces that need indeterminate AI activity feedback.
  2. Map the real product lifecycle to one of the six shipped states.
  3. Use only the tuned 20 or 64 pixel size. Do not stretch one preset into another.
  4. Keep theme="auto" unless the surrounding surface has a known fixed theme.
  5. Pair the orb with concise visible status text when the activity matters to the user.
  6. Override aria-label with a task-specific label, or hide the orb from assistive technology when adjacent live text already announces the…
  7. Use paused to freeze the current frame. Do not simulate pause with speed={0}.
  8. Treat the orb as indeterminate feedback, never as a progress percentage or completion signal.

What it can do on your machine

Read from SKILL.md and the folder at commit 645553c. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • npm
    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use npm and git, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Thinking Orbs loads about 2.4k tokens when it runs. Until then it costs about 109 tokens; SKILL.md has 1,039 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~109
When it runs · the whole SKILL.md, loaded when a task matches
~2.4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from boraoztunc/skills at commit 645553c, republished under its Apache-2.0 licence (© boraoztunc). 1,039 words, ~2,410 tokens.

Download SKILL.mdSave it as .claude/skills/thinking-orbs/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
thinking-orbs
description
Add accessible animated AI loading and agent-status indicators with the React thinking-orbs library. Use when a chat, copilot, voice, search, generation, or tool-running interface needs a semantic working, searching, solving, listening, composing, or shaping state; when replacing a generic spinner with an AI activity orb; or when implementing the library's size, theme, speed, pause, reduced-motion, and canvas behavior.

Thinking Orbs

Core Contract

  1. Use thinking-orbs in React 18+ interfaces that need indeterminate AI activity feedback.
  2. Map the real product lifecycle to one of the six shipped states.
  3. Use only the tuned 20 or 64 pixel size. Do not stretch one preset into another.
  4. Keep theme="auto" unless the surrounding surface has a known fixed theme.
  5. Pair the orb with concise visible status text when the activity matters to the user.
  6. Override aria-label with a task-specific label, or hide the orb from assistive technology when adjacent live text already announces the same state.
  7. Use paused to freeze the current frame. Do not simulate pause with speed={0}.
  8. Treat the orb as indeterminate feedback, never as a progress percentage or completion signal.

The package renders monochrome dots on a transparent 2D canvas. It does not expose custom colors, arbitrary sizes, or determinate progress.

Install

Inspect the project package manager, then install:

bash
npm install thinking-orbs

The package declares react and react-dom version 18 or newer as peer dependencies. Import the component and exported types from the package root:

tsx
import {
  ThinkingOrb,
  type OrbSize,
  type OrbState,
  type OrbTheme,
  type ThinkingOrbProps,
} from "thinking-orbs";

Choose the State

  • working — generic tool execution, multi-step work, or an activity without a more precise state.
  • searching — retrieval, web search, file search, or knowledge lookup.
  • solving — reasoning, analysis, calculation, or planning.
  • listening — microphone input, speech capture, or waiting for a spoken turn.
  • composing — writing, summarizing, drafting, or generating a text response.
  • shaping — creating or refining an image, layout, structured artifact, or other formed output.

Prefer a truthful generic working state over a visually interesting but inaccurate state. Change the state only when the underlying activity changes.

Choose the Size

  • Use size={20} inline with text, inside buttons, or in compact status rows.
  • Use size={64} at chat-avatar scale, in an empty state, or as the main visual status.

The presets have different dot counts, dot sizes, and speed tuning. They are separate designs rather than a scale factor. If the layout needs more surrounding space, size the wrapper instead of applying CSS transforms to the canvas.

Basic Usage

tsx
import { ThinkingOrb } from "thinking-orbs";

export function AgentStatus() {
  return (
    <ThinkingOrb
      state="searching"
      size={20}
      theme="auto"
      aria-label="Searching project files…"
    />
  );
}

All other canvas props pass through, including className, style, data-*, event handlers, and ARIA attributes.

Model the Product Lifecycle

Keep product phases separate from visual states so the mapping stays explicit:

tsx
import { ThinkingOrb, type OrbState } from "thinking-orbs";

type AgentPhase =
  | "idle"
  | "retrieving"
  | "reasoning"
  | "writing"
  | "creating"
  | "done"
  | "error";

const ORB_BY_PHASE: Partial<Record<AgentPhase, OrbState>> = {
  retrieving: "searching",
  reasoning: "solving",
  writing: "composing",
  creating: "shaping",
};

export function AgentActivity({ phase }: { phase: AgentPhase }) {
  const state = ORB_BY_PHASE[phase];
  if (!state) return null;

  return <ThinkingOrb state={state} size={20} />;
}

Remove the orb on done, error, cancellation, or idle. Show the appropriate result, retry, or error UI instead of leaving the last activity animation running.

Announce Status Once

The component defaults to role="img" with a per-state label such as “Searching…”. When visible text describes the same state, make the text the single announcement source:

tsx
export function LiveAgentStatus() {
  return (
    <div role="status" aria-live="polite" className="agent-status">
      <ThinkingOrb state="solving" size={20} aria-hidden="true" />
      <span>Reviewing the repository…</span>
    </div>
  );
}

Use aria-live="polite" for ordinary phase changes. Avoid rapid label churn. Do not add another hidden live region when role="status" already owns the announcement.

Theme

Use one of:

tsx
<ThinkingOrb theme="auto" />
<ThinkingOrb theme="dark" />
<ThinkingOrb theme="light" />
  • auto first checks an ancestor data-theme="dark|light" attribute or dark / light class.
  • If no ancestor theme exists, auto follows prefers-color-scheme.
  • Theme changes update live.
  • dark means light dots intended for a dark background.
  • light means dark dots intended for a light background.

The canvas is transparent. Verify contrast against the actual surface rather than the page root alone.

Speed and Pause

tsx
<ThinkingOrb state="working" speed={0.85} />
<ThinkingOrb state="composing" paused={isWaitingForApproval} />

speed multiplies the baked speed of the selected state and size. Start at 1; use roughly 0.75–1.25 for subtle product tuning. Extreme values can make the hand-tuned motion feel frantic or stalled.

paused freezes the current frame while retaining the visual status. Remove the component when the activity has actually ended.

Next.js and Client Rendering

The component uses React effects, canvas, requestAnimationFrame, media queries, and observers. Keep the package import behind a client boundary in the Next.js App Router:

tsx
"use client";

import { ThinkingOrb } from "thinking-orbs";

export function ThinkingStatus() {
  return <ThinkingOrb state="working" size={20} />;
}

The library is SSR-safe because it paints only on the client after resolving the theme. A client boundary is still required where the framework enforces server and client component separation.

Show full SKILL.md (422 more words)Show less

Built-In Runtime Behavior

  • Draws with plain Canvas 2D arcs; no WebGL or SVG filters.
  • Caps device pixel ratio at 2.
  • Uses one requestAnimationFrame loop per visible instance.
  • Uses the shared performance.now() clock so multiple orbs stay in phase.
  • Pauses when the canvas scrolls offscreen through IntersectionObserver.
  • Pauses when the browser tab is hidden.
  • Renders one deterministic static frame under prefers-reduced-motion: reduce.
  • Continues following live theme changes in reduced-motion mode.

Do not rebuild these behaviors in a wrapper. Add product state management and layout around the component, not a second animation loop.

Power-User Canvas API

Prefer <ThinkingOrb> for product UI. The package also exports its resolved presets and raw frame painters for a custom canvas outside React:

ts
import { MODE_DRAWS, resolvePreset } from "thinking-orbs";

const { mode, speed, opts } = resolvePreset("searching", 64);
const drawFrame = MODE_DRAWS[mode];

drawFrame(
  context,
  64,
  (performance.now() / 1000) * speed,
  true, // true draws light ink for a dark surface
  opts,
);

STATE_TO_MODE exposes the internal mapping:

  • working → orbits
  • searching → globe
  • solving → rubik
  • listening → wave
  • composing → ribbon
  • shaping → morph

Use the raw API only when another renderer owns the canvas lifecycle. It provides a frame painter, not component behavior. Reimplement DPR sizing, clearing, animation scheduling, pausing, theme resolution, reduced motion, visibility handling, cleanup, and accessibility when bypassing <ThinkingOrb>.

Verification

Run the project's typecheck, tests, production build, and git diff --check. Then verify in a real browser:

  1. Trigger every product phase and confirm the mapped orb state is truthful.
  2. Confirm 20 and 64 pixel instances are crisp without CSS scaling.
  3. Test dark, light, and live theme switching.
  4. Test reduced motion and confirm the orb becomes a static representative frame.
  5. Scroll the orb offscreen and return; confirm it resumes without visible breakage.
  6. Hide and restore the tab; confirm animation resumes.
  7. Inspect accessibility: announce the status exactly once and use a task-specific label.
  8. Confirm the orb disappears on success, error, cancellation, and idle.
  9. Confirm no console errors, hydration warnings, or layout shifts occur.

Common Pitfalls

  • Type error on size: use exactly 20 or 64; do not pass arbitrary dimensions.
  • Wrong contrast: remember dark targets dark backgrounds and therefore draws light ink.
  • Duplicate screen-reader output: hide the canvas when adjacent role="status" text already announces the task.
  • Misleading state: do not show searching during generation or composing during microphone capture.
  • Permanent loading UI: remove the orb when work ends and render the actual terminal state.
  • Hydration or server-component error: move the import into a client component.
  • Brand color requested: the public API is monochrome; choose another loader or make an intentional library fork instead of relying on unsupported styling.

Handoff

Report the mapped product phases, chosen size, theme mode, accessible label strategy, reduced-motion behavior, and build/browser verification. Distinguish local implementation from a deployed release.

© boraoztunc, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file in thinking-orbs of boraoztunc/skills.

  • SKILL.md
  • REFERENCES.md

Open the folder on GitHubat commit 645553c

Used in 2 other repositories

We found 2 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 2 other GitHub owners. This page covers the copy in boraoztunc/skills, which our catalogue first saw on October 7, 2026.

Compare with similar skills

Thinking Orbs next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Thinking Orbs compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Thinking Orbs this skillboraoztunc/skills3952 repos~2.4kAutomated safety check: PassApache-2.0
Web Artifacts Builderanthropics/skills180k41 repos~769Automated safety check: PassApache-2.0
Vercel Composition Patternssupabase/supabase111k59 repos~726Automated safety check: PassMIT
React Doctormakeplane/plane61k12 repos~657Automated safety check: PassAGPL-3.0
React Router Developmentremix-run/react-router57k1 repos~1.5kAutomated safety check: PassMIT
React UI State PatternsChrisWiles/claude-code-showcase6.1k8 repos~1.6kAutomated safety check: PassNone

Similar skills

  • Web Artifacts Builder

    anthropics/skills

    Official

    Builds multi-component claude.ai HTML artifacts as a small React, TypeScript and Tailwind project, then bundles it into one shareable HTML file.

    180k GitHub starsUsed in 41 repos~769 tokens
    Frontend & DesignAuto-check passed
  • Official

    React composition patterns that scale. An agent skill from supabase/supabase.

    111k GitHub starsUsed in 59 repos~726 tokens
    DevelopmentAuto-check passed
  • React Doctor

    makeplane/plane

    Scans React code for lint, accessibility, bundle size and architecture issues, reports a health score and checks that changes do not lower it.

    61k GitHub starsUsed in 12 repos~657 tokens
    Frontend & DesignAuto-check passed
  • React Router Development

    remix-run/react-router

    Guides work on React Router apps by first identifying whether the app uses Framework, Data or Declarative mode, then loading the matching reference and the installed package docs.

    57k GitHub starsUsed in 1 repo~1.5k tokens
    Frontend & DesignAuto-check passed
  • React UI State Patterns

    ChrisWiles/claude-code-showcase

    Sets patterns for React interfaces: when to show loading spinners or skeletons, how to surface errors, how to disable buttons during async work and how to handle empty lists.

    6.1k GitHub starsUsed in 8 repos~1.6k tokens
    Frontend & DesignAuto-check passed
  • Stitch to Remotion Walkthrough Videos

    google-labs-code/stitch-skills

    Official

    Builds walkthrough videos from Stitch design projects using Remotion, with transitions, zoom effects and text overlays on each screen.

    8.4k GitHub starsUsed in 6 repos~3.2k tokens
    Media & CreativeAuto-check: notes

More from boraoztunc/skills

All 52 skills in this repo
  • Gsap

    boraoztunc/skills

    GSAP animation reference for HyperFrames. An agent skill from boraoztunc/skills.

    395 GitHub starsUsed in 5 repos~1.9k tokens
    Auto-check passed
  • Hyperframes

    boraoztunc/skills

    Create video compositions, animations, title cards, overlays, captions, voiceovers, audio-reactive visuals, and scene transitions in HyperFrames HTML.

    395 GitHub starsUsed in 9 repos~7.6k tokens
    Auto-check passed
  • Remotion To Hyperframes

    boraoztunc/skills

    Translate an existing Remotion (React-based) video composition into a HyperFrames HTML composition.

    395 GitHub stars~2.2k tokensUpdated 1 mo ago
    Auto-check passed
  • Animejs

    boraoztunc/skills

    Anime.js adapter patterns for HyperFrames. An agent skill from boraoztunc/skills.

    395 GitHub starsUsed in 2 repos~828 tokens
    Auto-check passed
  • Beam Glow States

    boraoztunc/skills

    Create React loading, processing, selected, current, focus, and pressed states with the border-beam package's animated edge glow.

    395 GitHub starsUsed in 2 repos~3.2k tokens
    Auto-check passed
  • Minimal Zine Poster

    boraoztunc/skills

    Compile a theme, sentence, object, mood, article idea, or photo into a quiet Japanese/Korean zine-style editorial poster — tall aged paper, large negative space, one small image anchor, experimental…

    395 GitHub stars~2.5k tokensUpdated 1 mo ago
    Auto-check passed

Works with

Questions about Thinking Orbs

What does Thinking Orbs do?

Add accessible animated AI loading and agent-status indicators with the React thinking-orbs library. Thinking Orbs is an agent skill from boraoztunc/skills. Add accessible animated AI loading and agent-status indicators with the React thinking-orbs library.

When should I use Thinking Orbs?

Thinking Orbs fits situations like: tool-running interface needs a semantic working; replacing a generic spinner with an AI activity orb; implementing the librarys size; canvas behavior.

How do I install Thinking Orbs in Claude Code?

Run `npx skills add boraoztunc/skills --skill thinking-orbs -a claude-code`. Or copy the skill folder (thinking-orbs in boraoztunc/skills) into .claude/skills/thinking-orbs in your project. Claude Code loads it when a task matches its description.

How do I install Thinking Orbs in Codex?

Run `npx skills add boraoztunc/skills --skill thinking-orbs -a codex`. Or copy the skill folder (thinking-orbs in boraoztunc/skills) into .agents/skills/thinking-orbs in your project. Codex loads it when a task matches its description.

Can I use Thinking Orbs in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add boraoztunc/skills --skill thinking-orbs -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/thinking-orbs, .gemini/skills/thinking-orbs, .github/skills/thinking-orbs and .opencode/skills/thinking-orbs in your project.

What does Thinking Orbs need to run?

Going by SKILL.md and its folder, Thinking Orbs needs the command-line tools its instructions call (npm and git). Our summary lists: Node.js.

Does Thinking Orbs access the network?

SKILL.md contains no URLs. Its commands use npm and git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Thinking Orbs safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Thinking Orbs use?

Thinking Orbs is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Thinking Orbs use?

About 2.4k tokens (SKILL.md is roughly 9.6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Thinking Orbs?

Skills that share tags, products or a category with Thinking Orbs: Web Artifacts Builder (anthropics/skills, 180k stars), Vercel Composition Patterns (supabase/supabase, 111k stars), React Doctor (makeplane/plane, 61k stars) and React Router Development (remix-run/react-router, 57k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Thinking Orbs?

boraoztunc (a GitHub user) maintains it in boraoztunc/skills, which has 395 GitHub stars. The repository holds 52 skills in this directory. The repository was last updated on August 15, 2026.

Source: boraoztunc/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.