webrobot-plugin-dev

Build WebRobot plugins with Scala ETL stages and Java JAX-RS REST API endpoints.

Updated Apr 29, 2026
One-click install
npx skills add https://github.com/WebRobot-Ltd/claude-code-webrobot-skills --skill webrobot-plugin-dev-webrobot-ltd
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: webrobot-plugin-dev
Source: https://github.com/WebRobot-Ltd/claude-code-webrobot-skills/tree/main/skills/webrobot-plugin-dev
Command: npx skills add https://github.com/WebRobot-Ltd/claude-code-webrobot-skills --skill webrobot-plugin-dev-webrobot-ltd

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Extending the WebRobot data platform requires knowledge of two distinct plugin architectures — Scala-based ETL stages loaded via Java ServiceLoader and Java JAX-RS REST API plugins — each with strict conventions for manifests, multi-tenancy, database access, and Spark serialization that are easy to get wrong. ## Core Features & Use Cases - ETL Plugin Development: Implement WTransformStage, WPartitionStage, WSinkStage, and other stage types in Scala with Gradle, including ServiceLoader registration, manifest.json authoring, and LLM-enabled per-row enrichment via WebroStageContext. - REST API Plugin Development: Build JAX-RS resources in Java with Maven, covering multi-tenant organization_id filtering, JDBC access patterns, kernel ORM services, and Flyway migrations. - Stage Catalog Discovery: Query the public stage catalog API before naming new stages to avoid collisions that silently override existing stages. - Use Case: A partner wants to add a sentiment analysis stage to their pipelines. The Skill guides them to implement a WPartitionStage using ctx.llm.infer, register it via ServiceLoader, declare it in manifest.json, and verify no name collision against the live catalog. ## Quick Start Ask the assistant to create a new WebRobot ETL plugin with a transform stage that scores rows, or a REST API plugin exposing endpoints for a new domain.

Frequently Asked Questions about webrobot-plugin-dev

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I create a custom ETL stage for WebRobot pipelines?

Implement a stage interface such as WTransformStage or WSinkStage in Scala, register the class in META-INF/services matching the fully-qualified interface name, and declare the stage with its args in manifest.json. Build with Gradle using the webrobot-plugin-sdk from JitPack.

How do I build a REST API plugin with JAX-RS for WebRobot?

Create a Java class annotated with @Singleton and @Path, implement endpoints with @RequiresScopes, and resolve the tenant via OrganizationContextHelper.getOrganizationId. Package it with Maven, add Flyway migrations under db/migration, and declare the entrypoint in manifest.json.

When should I use WPartitionStage instead of WTransformStage?

Use WPartitionStage when the stage needs WebroStageContext access, such as ctx.llm.infer, ctx.query, or ctx.execute for per-row enrichment. WTransformStage is stateless and serialized to Spark workers, so it receives no context.

Why does my WebRobot plugin stage name silently override another stage?

Stage name collisions at plugin load silently override existing stages. Query the public catalog endpoint at /webrobot/api/catalog/stages before naming a new stage to verify the ID is not already registered.

How does multi-tenancy work in WebRobot REST API plugins?

Every domain table must include organization_id, resolved from the JWT via OrganizationContextHelper.getOrganizationId and never from the request body. All queries must filter by organization_id to isolate tenant data.

Why does my Spark stage fail serialization with HttpClient fields?

Non-Serializable fields like HttpClient must be declared as @transient lazy val so they are re-created after deserialization on each executor. Without this, Spark throws a NotSerializableException when shipping the stage to workers.