Skip to content

[finding] os explain agent still teaches tools, removed in @objectstack/spec 17 (ADR-0064) — plus a missing required label and a model that must be an object #15172

Description

@os-litant

Found by the catalog sweep landed for #14811, which parses every SCHEMAS entry's example in packages/cli/src/commands/explain.ts against its real schema. Rewriting catalog entries was ruled out of scope on that card (triage comment 5520209463, step 3), so this is filed unassigned for triage. Suggested domain: domain:cli.

Measured

AgentSchema (@objectstack/spec/ai) rejects the agent entry's example with three issues:

[label] invalid_type :: Invalid input: expected string, received undefined
[model] invalid_type :: Invalid input: expected object, received string
[tools] invalid_type :: `agent.tools` was removed in @objectstack/spec 17 — use `skills`.
        An agent reaches exactly the tools its surface-compatible skills declare
        (ADR-0064), so move each reference into a skill: a platform tool by its
        registered name, or `action_<NAME>` for one of your own AI-exposed Actions.
        This is NOT a rename — there is no key the value moves to: the migration
        DELETES the key and emits a notice naming each tool that was listed, and you
        re-declare each one in a skill by hand.

Why this is the sharpest of the batch

tools is a removed key with an explicit migration notice attached — the catalog is teaching authors a key the spec deletes on sight, and the entry's optional table lists it as { name: 'tools', type: 'ToolReference[]' }. This is the same failure class as the flow entry's steps / trigger aliases measured at #14782, one version further along: not an alias that redirects, a key that is gone.

Three separate corrections are needed and the tools one is not mechanical — per the spec's own message there is no key the value moves to, so someone has to author the replacement skills declaration by hand.

Both the entry's required / optional tables and its example need the pass: label is absent from the example although the schema requires it, and model: 'gpt-4o' is a string where the schema wants an object.

Reproduce

pnpm --filter @objectstack/cli exec vitest run test/commands.test.ts

The sweep names this entry as a known-broken xfail; the day the entry is corrected, that xfail turns red and is meant to be promoted to a plain assertion.

Activity

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

Metadata

Metadata

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions