Skip to content

docs(skills): merge output-schema skill into actor-development - #87

Merged
patrikbraborec merged 10 commits into
mainfrom
docs/merge-output-schema-into-actor-development
Sep 30, 2026
Merged

patrikbraborec merged 10 commits into
mainfrom
docs/merge-output-schema-into-actor-development

Conversation

@patrikbraborec

@patrikbraborec patrikbraborec commented Sep 9, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Reviewed the Actor development skills against the writing-for-agents guidance and consolidated them so there is one skill to install and one place for schema rules.

Two skills become one, and four overlapping schema references collapse into one:

 skills/
 ├── apify-actor-development/
 │   ├── SKILL.md                          # 2,221 → 1,292 words, rewritten
 │   └── references/
 │       ├── input-schema.md               # 191 → 550 words, rewritten from v1 spec
-│       ├── dataset-schema.md             # −209
-│       ├── output-schema.md              # −49
-│       ├── key-value-store-schema.md     # −129
+│       └── output-schemas.md             # +152, the single source of schema rules
-├── apify-generate-output-schema/
-│   └── SKILL.md                          # −415, whole skill removed
 └── apify-actorization/
     └── references/schemas-and-output.md  # repointed at output-schemas.md

Why

The two skills disagreed, so an agent following one produced schemas the other rejected:

 agent writes a schema
-  reads actor-development/references/dataset-schema.md
-    → omits `nullable`, puts `required` at one level only
-  generate-output-schema skill validates it
-    → rejects: hard rules say `nullable` everywhere, `required` at both levels
+  reads actor-development/references/output-schemas.md
+    → one set of rules, no contradiction

The same disagreement covered additionalProperties at both levels and type: string on output properties.

What changed

  • Merge apify-generate-output-schema into apify-actor-development as references/output-schemas.md. The standalone skill, its marketplace entry, and its README/AGENTS.md references are removed. Its trigger branch ("generate or update schemas") now lives in the actor-development description.
  • Delete the three duplicate schema references (dataset-schema.md, output-schema.md, key-value-store-schema.md).
  • Rewrite input-schema.md from the v1 specification: default vs prefill vs required, editors per type, isSecret, errorMessage, resource fields, deprecated patternKey/patternValue.
  • Rewrite SKILL.md: workflow steps first with checkable done-conditions, reference pointers folded into the steps, each rule stated once in positive form, command list reduced to the non-obvious entries.
  • Point the actorization schema reference at the shared output-schemas.md. agents/AGENTS.md regenerated with scripts/generate_agents.py.

Aligned with the templates and apify/actor-templates#929

Reading the skill next to the new template AGENTS.md as an agent would turned up places where following either one produced wrong code:

  • Python standby crashed: the example used Actor.config.container_port, which the Python SDK does not have. It is Actor.configuration.web_server_port, as in python-standby. Local testing now goes through apify run (checked: it serves js-standby on 4321 and answers the readiness probe with 200) instead of contradicting the "only apify run" rule.
  • Logger: log from the apify package (import { Actor, log } from 'apify'), as every template imports it, instead of apify/log.
  • Python layout: entry point my_actor/main.py, not src/main.py; uv projects (pyproject.toml, uv.lock) covered.
  • actor.json keys: inputSchema / outputSchema, which the templates use since actor-templates#822; input / output are the deprecated names.
  • Validation: apify validate-schema is part of the output-schema checklist. CLI 1.10 reads only the deprecated output key, so it skips an outputSchema; the checklist says so. A template's "fields": {} is a placeholder, not a style to match.
  • Added: aborting handler (JS and Python), proxy setup from the proxyConfiguration input, a monetization section (pay-per-event Actor.charge, spending limit), apify actor generate-schema-types for TypeScript, Python crawler and router names.
  • commands/create-actor.md reduced to discovery and approval gates around the skill's workflow. It linked to template files that do not exist and carried its own divergent workflow and README list.

Everything else in the diff is fallout from the removal:

graph LR
    A["delete apify-generate-output-schema"] --> B["marketplace.json<br/>−16 entry"]
    A --> C["README.md<br/>−4 listing"]
    A --> D["commands/create-actor.md<br/>repoint links"]
    A --> E["agents/AGENTS.md<br/>regenerated by script"]
Loading
File Words before Words after
apify-actor-development/SKILL.md 2,221 1,292
Output-schema material (skill + 3 references) 3,406 988
input-schema.md 191 550

Breaking change

The apify-generate-output-schema plugin no longer exists. Users who installed it get the same behaviour from apify-actor-development.

Dropped and left alone, flagging for review

dropped (could not verify against current Crawlee — restore if still relevant)
├── requestHandlerTimeoutMillis gotcha
└── additionalHttpHeaders vs preNavigationHooks

dropped (restates the environment and public docs)
├── project-structure tree
└── Playwright MCP JSON config block

left alone (pre-existing, not introduced here)
└── actor-json.md                   → still duplicates Structure/Example blocks and the `generatedBy` instruction

…im for agents

- Move apify-generate-output-schema into actor-development as
  references/output-schemas.md; remove the standalone skill, its
  marketplace entry, and README/AGENTS.md references
- Delete the three duplicate schema references (dataset, output,
  key-value store) that disagreed with the generator's hard rules
- Rewrite input-schema.md from the v1 specification: default vs
  prefill vs required, editors per type, isSecret, errorMessage,
  resource type
- Rewrite SKILL.md: workflow steps first with completion criteria,
  reference pointers folded into steps, each rule stated once in
  positive form, new description naming the trigger branches
- Point create-actor command and actorization reference at the
  shared output-schemas.md
apify create now prompts for name, use case, language, template, and
source hosting, and installs dependencies itself. Document the
non-interactive form (name + --template), the manifest template IDs
(js-empty, ts-empty, python-empty, *-standby), --source for Git-hosted
Actors, and git push as the deploy path for those.
Lead with the non-interactive form, drop the prompt list and the
--use-case/--language filter (unreachable when --template is passed),
drop CLI-output exposition from the deploy step, and note that the
standby templates already set usesStandbyMode.
@patrikbraborec
patrikbraborec force-pushed the docs/merge-output-schema-into-actor-development branch from 53ad157 to 98c9cf4 Compare September 9, 2026 08:33
Co-authored-by: Cursor <cursoragent@cursor.com>
- Python standby: Actor.configuration.web_server_port (Actor.config does
  not exist in the Python SDK); test through apify run, which serves on
  4321, instead of starting the server directly
- JS/TS logger is `log` from the `apify` package, matching the templates
- Python entry point is my_actor/main.py; cover uv projects
- Use inputSchema/outputSchema in actor.json, as the templates do since
  actor-templates#822; input/output are the deprecated names
- Make apify validate-schema part of the output schema checklist, noting
  that CLI 1.10 skips a schema referenced as outputSchema, and treat a
  template's `fields: {}` as a placeholder, not a style
- Add aborting, proxy, pay-per-event, and generate-schema-types guidance
  and Python crawler/router names
- Reduce commands/create-actor.md to discovery and approval gates around
  the skill's workflow, dropping links to template files that do not exist
…done-conditions

Findings from an end-to-end eval (5 scenarios, headless Claude Code):
- Bare `apify create` prompts interactively; headless agents read --help
  repeatedly and guessed template ids. Give `apify create <name> -t <id>`,
  a use-case to template table, and `apify templates ls` for the rest.
- The aborting handler was implemented in 1/5 Actors while it sat only in
  Rules; done-conditions were followed every time. Add it to step 3.
- No run reported the Standby URL after deploy. Add it to step 9.
Existing installs reference the plugin by name, so removing it breaks
updates. The stub points agents to apify-actor-development and is left
out of AGENTS.md via a deprecated frontmatter flag.
The stub hardcoded /plugin install, which is wrong for users who
installed via npx skills add or a cloned repo.
…ema-into-actor-development

# Conflicts:
#	agents/AGENTS.md
#	commands/create-actor.md
#	skills/apify-actor-development/SKILL.md
#	skills/apify-generate-output-schema/SKILL.md
@patrikbraborec
patrikbraborec merged commit f5e84aa into main Sep 30, 2026
1 check passed
@patrikbraborec
patrikbraborec deleted the docs/merge-output-schema-into-actor-development branch September 30, 2026 09:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants