terascope/teraslice/teraslice-asset-builder
Claude Code and agent skill by terascope/teraslice
- community
- ext:[{"type":"config","description":"Configuration overrides"}]
Checking that the SKILL.md file is still in the repository.
Interactively scaffold a Teraslice asset — either add a new operation (reader, processor, sender, or API) to an existing asset bundle, or scaffold a brand-new asset bundle repo from scratch. Use whenever the user wants to build, create, or scaffold a Teraslice asset, operation, processor, reader, slicer, fetcher, sender, or op-API, or asks to "make an asset". Walks the user through operation type, config schema, and behavior, then generates the source, registry entry, and test files following Terascope conventions.
Install
npx vskill@latest install terascope/teraslice/teraslice-asset-builderSemi-extensibleMentions customization, but needs skill-specific knowledge. Read the extensible skills standard
SKILL.md
Teraslice Asset Builder
Walk the user through building a Teraslice asset, then generate the files. Do not dump questions all at once — ask in focused rounds, propose sensible defaults, and confirm before writing files.
An asset is a deployable bundle of Teraslice operations. A bundle repo (e.g. elasticsearch-assets, standard-assets) contains many operations under asset/src/<operation_name>/. The public bundles are the reference implementations — see references/public-assets.md for their GitHub repos, and read a sibling operation from the relevant repo (via WebFetch) before writing a new one; matching the surrounding style matters more than the templates in this skill. Only read a local clone of a bundle if the user explicitly points you at one — never assume a bundle exists on disk.
Step 0 — Does a public bundle already cover this?
Do this first, before deciding to build anything. Terascope maintains public asset bundles for the common data sources (Elasticsearch/OpenSearch, Kafka, files+S3, generic processors, chaos/testing). Read references/public-assets.md for the list and GitHub URLs.
If the request maps to one of those data sources (e.g. "an Elasticsearch reader", "write to Kafka", "an S3 exporter", "a dedupe processor"):
- Tell the user a public bundle already covers that source — they likely don't need a new bundle.
- Ask what they specifically need — the whole reader/writer (probably already exists → point them at it), or a specific new operation the bundle lacks?
- Read the live repo before building. These bundles get new processors constantly, so don't rely on any static list — WebFetch the bundle's GitHub repo (README,
docs/, and theasset/src/tree) and confirm what operations currently exist. If one already aligns, point to it instead of duplicating. (Only read a local clone if the user explicitly gives you its path.) - If the operation genuinely doesn't exist, add it inside that existing bundle (Step 2), matching its conventions — don't spin up a new bundle.
Only proceed to a brand-new bundle (Step 1) when the data source has no public bundle (e.g. a database with no existing asset).
Step 1 — New operation, or new bundle?
Determine which the user wants:
- New operation in an existing bundle (most common) → Step 2.
- New bundle from scratch (only when no public bundle fits — see Step 0) → read
references/new-bundle.md, scaffold the repo, then return to Step 2 to add the first operation. If the bundle talks to an external service (database, queue, object store), it also needs — all inside its own monorepo — a terafoundation connector (required when introducing a new service like a database; it owns the credentials so they stay out of the job), an API/client package, and a Dockerfile that installs the connector onto the Teraslice image. Readreferences/api-package-and-docker.md.
Ask the user where the target bundle lives — the local path to their checkout of the bundle repo. Don't guess a location; confirm the absolute path before writing anything.
Step 2 — Gather requirements
Ask, in order (skip anything already stated):
- Operation name —
snake_case(e.g.add_uuid,redis_reader). This becomes the_opvalue used in job configs and the directory name. - Operation type — see
references/operation-types.mdfor the full menu and when to pick each. The short version:
- Reader = a
Slicer(creates slices on the exec controller) + aFetcher(reads data on workers). Pick when the op is the source of data. - Processor — transforms/writes data. Sub-variants:
MapProcessor(mutate one record),EachProcessor(side-effects only),FilterProcessor(keep/drop records),BatchProcessor(whole array at once, also used for senders/writers). - API —
OperationAPI(utility exposed to other ops),APIFactory(factory returning{ client, config }, used by reader/sender APIs), orObserver(monitors, mutates nothing).
- Config schema — what
opConfigfields does it need? For each: name, purpose (doc),default, andformat(e.g.required_string,Boolean,Number, or a custom validator). Seereferences/operation-types.mdfor schema conventions. - Behavior — what should the core method actually do? Get enough detail to write a real first implementation, not a stub.
Restate the plan in one short block and get a yes before writing.
Step 3 — Generate files
Create under asset/src/<operation_name>/:
- Implementation file(s):
processor.tsfor a processor or a sender (a sender is aBatchProcessorthat writes records out),fetcher.ts+slicer.tsfor a reader, orapi.tsfor an API. schema.ts— the config schema.interfaces.ts— theOpConfig- extending config interface (only if the op has custom config fields; small ops sometimes skip it).
Use the templates in references/operation-types.md, but adapt imports and style to what the target bundle actually uses (check a sibling op — e.g. some use @terascope/core-utils, older ones use @terascope/utils).
Step 4 — Register the operation
Every operation must be registered in asset/src/index.ts (the "registry"), which maps the op name to its classes:
This file is auto-generated. Prefer regenerating it with teraslice-cli assets registry (or the bundle's own registry script). If the CLI isn't available, add the import + ASSETS entry by hand, matching the existing formatting. The header comment warns manual edits are lost on regen — mention that.
Step 5 — Tests
Offer to scaffold tests. Teraslice uses teraslice-test-harness (WorkerTestHarness for processors/fetchers, SlicerTestHarness for slicers). See references/testing.md. Place them at test/<operation_name>/processor-spec.ts and schema-spec.ts.
Step 6 — Build & verify
Tell the user how to build and test (adapt to the repo's package.json scripts):
To package/deploy the asset:
Do not run build/deploy yourself unless asked — surface the commands and let the user run them.
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/teraslice-asset-builder/SKILL.md
Popularity
- Repository stars
- 59
- Repository forks
- 15
- 7-day trend score
- 20
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Extension points
configConfiguration overrides
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/terascope/teraslice/teraslice-asset-builder)