Web Artifacts Builder
anthropics/skills
Builds multi-component claude.ai HTML artifacts as a small React, TypeScript and Tailwind project, then bundles it into one shareable HTML file.
Add accessible animated AI loading and agent-status indicators with the React thinking-orbs library.
$ npx skills add boraoztunc/skills --skill thinking-orbs -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install boraoztunc/skills thinking-orbs --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ 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-srcUse ~/.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/
Install the "thinking-orbs" agent skill from https://github.com/boraoztunc/skills/tree/main/thinking-orbs into .claude/skills/thinking-orbs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "thinking-orbs", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/boraoztunc/skills/tree/main/thinking-orbsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add boraoztunc/skills --skill thinking-orbs -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install boraoztunc/skills thinking-orbs --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/boraoztunc/skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/thinking-orbs .agents/skills/thinking-orbs && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "thinking-orbs" agent skill from https://github.com/boraoztunc/skills/tree/main/thinking-orbs into .agents/skills/thinking-orbs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "thinking-orbs", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add boraoztunc/skills --skill thinking-orbs -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install boraoztunc/skills thinking-orbs --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/boraoztunc/skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/thinking-orbs .cursor/skills/thinking-orbs && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "thinking-orbs" agent skill from https://github.com/boraoztunc/skills/tree/main/thinking-orbs into .cursor/skills/thinking-orbs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "thinking-orbs", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/boraoztunc/skills.git --path thinking-orbs--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add boraoztunc/skills --skill thinking-orbs -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install boraoztunc/skills thinking-orbs --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/boraoztunc/skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/thinking-orbs .gemini/skills/thinking-orbs && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "thinking-orbs" agent skill from https://github.com/boraoztunc/skills/tree/main/thinking-orbs into .gemini/skills/thinking-orbs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "thinking-orbs", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install boraoztunc/skills thinking-orbsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add boraoztunc/skills --skill thinking-orbs -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/boraoztunc/skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/thinking-orbs .github/skills/thinking-orbs && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "thinking-orbs" agent skill from https://github.com/boraoztunc/skills/tree/main/thinking-orbs into .github/skills/thinking-orbs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "thinking-orbs", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add boraoztunc/skills --skill thinking-orbs -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install boraoztunc/skills thinking-orbs --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/boraoztunc/skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/thinking-orbs .opencode/skills/thinking-orbs && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "thinking-orbs" agent skill from https://github.com/boraoztunc/skills/tree/main/thinking-orbs into .opencode/skills/thinking-orbs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "thinking-orbs", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
thinking-orbsAdd 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. 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.
8 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 645553c. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
npmgitFrom the folder's file list and the shell code blocks in SKILL.md.
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.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
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.
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.
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.
The full file from boraoztunc/skills at commit 645553c, republished under its Apache-2.0 licence (© boraoztunc). 1,039 words, ~2,410 tokens.
.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.thinking-orbs in React 18+ interfaces that need indeterminate AI activity feedback.20 or 64 pixel size. Do not stretch one preset into another.theme="auto" unless the surrounding surface has a known fixed theme.aria-label with a task-specific label, or hide the orb from assistive technology when adjacent live text already announces the same state.paused to freeze the current frame. Do not simulate pause with speed={0}.The package renders monochrome dots on a transparent 2D canvas. It does not expose custom colors, arbitrary sizes, or determinate progress.
Inspect the project package manager, then install:
npm install thinking-orbsThe package declares react and react-dom version 18 or newer as peer dependencies. Import the component and exported types from the package root:
import {
ThinkingOrb,
type OrbSize,
type OrbState,
type OrbTheme,
type ThinkingOrbProps,
} from "thinking-orbs";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.
size={20} inline with text, inside buttons, or in compact status rows.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.
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.
Keep product phases separate from visual states so the mapping stays explicit:
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.
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:
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.
Use one of:
<ThinkingOrb theme="auto" />
<ThinkingOrb theme="dark" />
<ThinkingOrb theme="light" />auto first checks an ancestor data-theme="dark|light" attribute or dark / light class.auto follows prefers-color-scheme.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.
<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.
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:
"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.
2.requestAnimationFrame loop per visible instance.performance.now() clock so multiple orbs stay in phase.IntersectionObserver.prefers-reduced-motion: reduce.Do not rebuild these behaviors in a wrapper. Add product state management and layout around the component, not a second animation loop.
Prefer <ThinkingOrb> for product UI. The package also exports its resolved presets and raw frame painters for a custom canvas outside React:
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 → orbitssearching → globesolving → rubiklistening → wavecomposing → ribbonshaping → morphUse 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>.
Run the project's typecheck, tests, production build, and git diff --check. Then verify in a real browser:
20 and 64 pixel instances are crisp without CSS scaling.20 or 64; do not pass arbitrary dimensions.dark targets dark backgrounds and therefore draws light ink.role="status" text already announces the task.searching during generation or composing during microphone capture.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
SKILL.md and 1 other file in thinking-orbs of boraoztunc/skills.
Open the folder on GitHubat commit 645553c
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.
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Thinking Orbs this skillboraoztunc/skills | 395 | 2 repos | ~2.4k | Automated safety check: Pass | Apache-2.0 | |
| Web Artifacts Builderanthropics/skills | 180k | 41 repos | ~769 | Automated safety check: Pass | Apache-2.0 | |
| Vercel Composition Patternssupabase/supabase | 111k | 59 repos | ~726 | Automated safety check: Pass | MIT | |
| React Doctormakeplane/plane | 61k | 12 repos | ~657 | Automated safety check: Pass | AGPL-3.0 | |
| React Router Developmentremix-run/react-router | 57k | 1 repos | ~1.5k | Automated safety check: Pass | MIT | |
| React UI State PatternsChrisWiles/claude-code-showcase | 6.1k | 8 repos | ~1.6k | Automated safety check: Pass | None |
anthropics/skills
Builds multi-component claude.ai HTML artifacts as a small React, TypeScript and Tailwind project, then bundles it into one shareable HTML file.
supabase/supabase
React composition patterns that scale. An agent skill from supabase/supabase.
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.
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.
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.
google-labs-code/stitch-skills
Builds walkthrough videos from Stitch design projects using Remotion, with transitions, zoom effects and text overlays on each screen.
boraoztunc/skills
GSAP animation reference for HyperFrames. An agent skill from boraoztunc/skills.
boraoztunc/skills
Create video compositions, animations, title cards, overlays, captions, voiceovers, audio-reactive visuals, and scene transitions in HyperFrames HTML.
boraoztunc/skills
Translate an existing Remotion (React-based) video composition into a HyperFrames HTML composition.
boraoztunc/skills
Anime.js adapter patterns for HyperFrames. An agent skill from boraoztunc/skills.
boraoztunc/skills
Create React loading, processing, selected, current, focus, and pressed states with the border-beam package's animated edge glow.
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…
Works with
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.