Skip to content

Deprecate tarball-based automation presets in favor of plugin-spec runners #612

Open

Description

@malhotra5

Summary

Now that the plugin spec supports automations with both custom runners and a default runner, we should plan to deprecate tarball-based automation creation flows, including the prompt and plugin preset endpoints.

This issue tracks the migration from service-generated tarballs toward plugin-spec automation definitions as the primary contract.

Background

Today the Automation Service supports tarball-based automations through flows such as:

  • POST /api/automation/v1/preset/prompt
  • POST /api/automation/v1/preset/plugin
  • uploaded/custom tarballs used by the raw automation creation path

The prompt and plugin preset endpoints generate or package code into tarballs, upload those tarballs, and dispatch them as sandbox workloads. That made sense before the plugin spec could directly describe automation execution. With the plugin spec now able to represent automation behavior through custom runners and a default runner, tarballs are no longer the ideal long-term API shape for prompt/plugin-style automations.

Why deprecate tarball-based presets

  • The plugin spec becomes the single, reviewable source of truth for automation behavior.
  • The default runner can cover common prompt/plugin automation cases without generated tarball boilerplate.
  • Custom runners provide an explicit escape hatch for advanced execution logic.
  • Automation definitions become easier to version, inspect, validate, and sync through catalog/git flows.
  • The service can reduce duplicated packaging, upload, validation, and generated-code paths.
  • Clients get a clearer product model: define an automation via plugin spec, then choose default or custom runner behavior.

Proposed direction

  1. Treat plugin-spec automations as the preferred creation path.
  2. Map existing prompt preset behavior onto the plugin spec default runner.
  3. Map existing plugin preset behavior onto plugin spec automation definitions rather than service-generated tarballs.
  4. Keep custom runner support for cases that previously required custom tarballs.
  5. Mark tarball-based prompt and plugin endpoints as deprecated once equivalent plugin-spec paths are available.
  6. Preserve existing tarball automations during a compatibility period, but stop recommending tarball presets for new usage.

Scope

Deprecation should include at least:

  • POST /api/automation/v1/preset/prompt
  • POST /api/automation/v1/preset/plugin
  • Documentation and examples that recommend prompt/plugin tarball presets
  • Capability metadata that currently presents tarball presets as the preferred path
  • Catalog/bundle guidance that points new automations at tarball packaging when plugin-spec runners would work

This issue does not necessarily require immediately removing raw tarball upload support. Raw/custom tarballs may need a longer compatibility window or a separate deprecation plan because they can represent arbitrary workloads.

Suggested migration plan

Phase 1: Add the replacement path

  • Add or document the plugin-spec automation creation API shape.
  • Ensure prompt-like automations can run through the default runner.
  • Ensure plugin-based automations can declare plugins, prompt/instructions, triggers, timeout, repositories, and relevant metadata without generated tarballs.
  • Ensure custom runner definitions cover advanced use cases that previously required custom tarball contents.

Phase 2: Make the replacement visible

  • Update capabilities/preflight responses to advertise plugin-spec automation support.
  • Update docs and examples to recommend plugin-spec automation creation.
  • Update catalog/template flows to emit plugin-spec automations where possible.
  • Add migration guidance for existing prompt/plugin preset users.

Phase 3: Deprecate tarball preset endpoints

  • Add deprecation notices to preset/prompt and preset/plugin responses, logs, or docs.
  • Consider response headers such as Deprecation and Sunset once a timeline is chosen.
  • Keep the endpoints functional during the compatibility window.
  • Add telemetry to understand remaining usage before removal.

Phase 4: Remove or freeze legacy paths

  • Stop adding new features to tarball-based prompt/plugin presets.
  • Remove deprecated endpoints only after usage is low and migrations are available.
  • Keep support for running existing automation records until an explicit data migration or end-of-life date.

Acceptance criteria

  • A plugin-spec automation creation path exists for default-runner prompt-style automations.
  • A plugin-spec automation creation path exists for plugin-based automations.
  • Custom runners cover the main use cases that previously needed custom tarballs.
  • Docs identify plugin-spec automations as the preferred path.
  • preset/prompt and preset/plugin are documented as deprecated, with migration guidance.
  • Capability/preflight responses let clients detect the new preferred path.
  • Existing tarball-based automations continue to run during the compatibility period.
  • Telemetry or logs can measure remaining usage of deprecated endpoints.

Open questions

  • What is the exact API shape for creating plugin-spec automations in this service?
  • Should raw custom tarball uploads be deprecated now, or only the prompt/plugin preset endpoints first?
  • How long should the compatibility window be?
  • Do existing automation records need a migration to plugin-spec form, or can legacy records remain as-is until edited/recreated?
  • Should the UI hide tarball presets immediately after replacement paths ship, or show them as legacy/advanced options?

This issue was created by an AI agent (OpenHands) on behalf of the user.

Activity

  1. all-hands-bot commented on Oct 19, 2026

    @all-hands-bot
    Contributor

    The following comments were added by the OpenHands AI agent.

    Decision needed

    The migration direction is reasonable, but this issue is an umbrella plan whose own ## Open questions are unresolved product/design decisions, and several of its acceptance criteria cannot be made observable against the current code. Two gaps in particular block a smallest-coherent scope:

    • POST /api/automation/v1/plugin-spec (CreatePluginSpecAutomationRequest in plugin_specs.py) requires an external plugin manifest and accepts no prompt, repos, model, or variants, while POST /v1/preset/prompt and POST /v1/preset/plugin accept all of them. The plugin-spec conversation ("default") runner derives its prompt from the manifest (/{plugin}:{command} {arguments}) and does no clone_repos, so no prompt-style plugin-spec path exists yet.
    • No deprecation mechanism exists for routes here (only Pydantic field deprecated=True), GET /v1/capabilities has no plugin-spec feature flag, and no usage telemetry for these endpoints is defined, so "deprecated" and "measurable usage" have no agreed shape.

    ready-for-dev is withheld until these are answered.

    1. Is this the umbrella tracking issue for all four phases, or should it be scoped to one phase (e.g. Phase 1+2: ship the replacement path and document it), with Phase 3 deprecation and Phase 4 removal as follow-up issues with their own criteria?
    2. What must the plugin-spec path gain before prompt/plugin presets can be called replaceable? Specifically, does it need a free-text prompt with no plugin authoring, repository cloning, model/profile selection, and A/B variants to match preset/prompt and preset/plugin, or is authoring an executable plugin the accepted replacement for those cases? This decides whether the work is "document the existing path" or "add new request fields and runner behavior."
    3. Which signal should mark deprecation, and is there an agreed compatibility window or sunset date? Options in the repo's style are route deprecated: true in the OpenAPI schema, Deprecation/Sunset response headers, or docs only. Without a chosen date, Sunset and Phase 4 removal cannot be specified.
    4. What are the explicit non-goals? Are raw tarball creation (POST /v1/uploads plus raw POST /v1) and existing tarball automation records in scope here (migrated vs. left as-is), and should this issue include a GET /v1/capabilities feature name for the preferred path plus the Canvas change to hide or demote tarball presets, or do those belong to OpenHands/extensions / OpenHands/OpenHands?
  2. enyst commented on Oct 20, 2026

    @enyst
    Member

    Love this! 🙏

  3. simonrosenberg commented on Oct 20, 2026

    @simonrosenberg
    Member

    I'm an AI agent (Claude Code) helping @simonrosenberg.

    Two follow-ups for this issue's docs and skills scope:

    The prompt-style plugin-spec path the triage found missing is in review:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions