agentleFS
nirholasnirholas/three.ws/.agents/skills/find-3d-assets/SKILL.md

find-3d-assets

Skill264 starsChanged 43 days agoApache-2.0View on GitHub

Search thousands of ready-made 3D assets on three.ws (CC0 props and objects, rigged humanoid characters, motion clips) and get paste-ready code or a downloaded file. Use when you or the user need a 3D model, prop, object, character, or animation for a scene, site, game, or app ("I need a 3D chair", "find a rigged character", "is there a wave animation", "add a lamp model to my page"). Free: no account, no API key, no payment. Check here BEFORE generating a model from scratch.

We split this skill into the rules it gives an agent

5 rules. About 0 are common, 2 are distinctive, and 3 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈2

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 3

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Search the catalog. If something fits, use it.

    line 33
  2. Very specific:

    If a three.ws MCP server is connected, three free tools cover the whole flow:

    line 42
  3. Distinctive:

    Not connected? Add the keyless studio server.

    line 55
  4. Very specific:

    Search semantics worth knowing: every word must match something, which keeps a two-word query precise.

    line 79
  5. Very specific:

    Every object in the library is CC0: public domain, commercial use fine, no attribution required.

    line 142

≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Find a ready-made 3D asset

three.ws publishes three asset libraries and joins them into one searchable catalog:

KindWhat it is
objectCC0 props and objects (furniture, lighting, tools, electronics, decor) staged as web GLB
characterReady-made rigged humanoids, animation-ready out of the box
animationRetargetable motion clips as THREE.AnimationClip JSON (the largest library, in the thousands)

The libraries grow, so do not quote a count from memory: every search response carries the live per-kind totals in facets.kinds, and total is the size of the whole catalog.

Everything here is free and public: no account, no API key, no payment, no rate card.

Check the catalog before you generate

Generating a model takes GPU minutes and returns something nobody has reviewed. The catalog returns a finished, textured asset instantly. So the order is:

  1. Search the catalog. If something fits, use it. Done.
  2. Nothing fits, and it is a prop or object? Use generate-3d-model.
  3. Nothing fits, and it is a character? Use create-3d-avatar.

Say which one you did. "I found an existing CC0 chair" and "I generated a chair" are different answers and the user should know which they got.

The fastest path: MCP tools

If a three.ws MCP server is connected, three free tools cover the whole flow:

ToolUse
search_catalogFind assets by text, kind, category, or tag
get_catalog_itemOne item in full, with links and related items
get_item_sourcePaste-ready code for one item
search_catalog { "q": "wooden chair", "kind": "object", "limit": 5 }
get_item_source { "id": "object:painted_wooden_chair_01" }

Not connected? Add the keyless studio server. It needs no account and also carries the free generation tools the catalog falls through to:

{ "mcpServers": { "three-ws-studio": { "type": "http", "url": "https://three.ws/api/mcp-studio" } } }

The main server, https://three.ws/api/mcp, lists the same three tools, but an MCP client that adds it is asked to sign in to a three.ws account as soon as it connects, because most of that server's tools act on an account. Add it when the user already has one or wants their own library; for the catalog alone, the studio server is the no-account path. Plain HTTP (below) also needs no account.

Without MCP: the HTTP endpoint

curl -s 'https://three.ws/api/catalog?q=industrial+lamp&kind=object&limit=5'
curl -s 'https://three.ws/api/catalog?id=object:painted_wooden_chair_01'

The search form returns items[] with id, title, tags, license, url (the CDN GLB or clip JSON), thumb, and facets you can use to narrow the next query. The id form adds links, related, and snippets for every framework that applies.

Search semantics worth knowing: every word must match something, which keeps a two-word query precise. If nothing matches all of them, the response comes back with relaxed: true and the partial matches, best first. Check that flag before telling a user you found an exact match.

Putting it in a project: the CLI

npx @three-ws/assets search wooden chair --kind object
npx @three-ws/assets add object:painted_wooden_chair_01

add downloads the GLB into public/three-ws/ (or three-ws-assets/ when the project has no public/ directory) and prints the snippet already rewritten to the local path, so the host site does not depend on the three.ws CDN staying up.

It is safe to re-run: identical bytes report as already up to date, and a file edited after it was added is never overwritten without --force.

Useful flags: --dir <path>, --framework <f>, --thumb, --json.

Which framework to emit

get_item_source (and show/add in the CLI) default to the right one per kind. Override with framework only when the project dictates it.

FrameworkEmitsDefault for
model-viewerThe <model-viewer> tag, build, and integrity hash the three.ws browse grids render withprops
agent-3dThe <agent-3d> web component, pinned to the exact published version with its SRI hashrigged characters
threePlain three.js: GLTFLoader for a model, THREE.AnimationClip.parse for a clipmotion clips
reactThe same as a React component, or a hook for a clipReact projects
allEvery applicable variant in one responsewhen you are choosing

The agent-3d snippet is never pinned to latest, because latest can change under the reader with no action on their side. Keep the version and the integrity attribute intact when you paste it.

Worked example

User: "put a chair on the landing page"

search_catalog { "q": "wooden chair", "kind": "object", "limit": 3 }
10 matches for "wooden chair" (showing 3 from offset 0):
- `object:painted_wooden_chair_01` | Painted Wooden Chair 01 | CC0 | chair, wood, painted
- `object:painted_wooden_chair_02` | Painted Wooden Chair 02 | CC0 | old, wooden, vintage
- `object:WoodenChair_01` | Wooden Chair 01 | CC0 | wood, prop, vintage
get_item_source { "id": "object:painted_wooden_chair_01" }

Returns the <model-viewer> block to paste, the preview link, and the license (CC0). Paste it, tell the user which asset you used and that it is public domain, and link the preview so they can look at it before shipping.

Licensing

Every object in the library is CC0: public domain, commercial use fine, no attribution required. Characters and clips carry their own license field, which travels with every response. Read it and pass it on; do not assume CC0 outside the object library.

Related skills

  • generate-3d-model when the catalog has no match for a prop.
  • create-3d-avatar when the catalog has no match for a character.
  • embed-three-ws-avatar for the full <agent-3d> embedding story, including moods, animations, and driving the avatar from page code.
  • rig-a-model to add a skeleton to a static GLB you already have.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.