Skip to content

[SDK-007] Add decorator-based skill authoring API #9

Description

@AdeGneus

Context

Python developers eventually need a safe @when/@action authoring API that compiles to the same SkillPackage contract as YAML.

Scope

  • Create ori_sdk/decorators.py.
  • Implement Agent, @when, @action, and Agent.compile().
  • Compile to SkillPackage.
  • Validate through the same normaliser path as YAML.

Non-Goals

  • Does not execute skills locally.
  • Does not bypass YAML-equivalent validation.
  • Does not become required for bundled skills.

Technical Specification

@when(..., tier=...) requires explicit tier. Tier D implies bypass LLM in generated package. Tier C requires safe_default_action.

Acceptance Criteria

  • Decorator output validates as SkillPackage.
  • Tier C/D invariants enforced.
  • pytest, mypy, and ruff pass.

Tests Required

Test Verifies
test_agent_compile_to_skill_package Decorators compile to typed package.
test_when_requires_tier No implicit tier.
test_tier_c_requires_safe_default Approval safety invariant.

Additional Test Coverage / Edge Cases

  • Reject @when without explicit tier.
  • Reject Tier C decorated triggers without safe_default_action.
  • Ensure Tier D generated package bypasses LLM and does not generate prompts requiring LLM reasoning.
  • Compile multiple triggers/actions and validate action defaults reference declared actions.
  • Ensure callable/lambda condition serialization is explicit and never silently unsafe.

Invariants — Do Not Violate

  • Every trigger must declare action_tier.
  • Tier C requires safe default.
  • Tier D bypasses LLM.

Dependencies

Blocked by:

Unblocks:

  • Nothing

Contract References

  • P2-13 decorator authoring reference
  • ori-specs/skill-package/v1.md

Priority

post-poc

Suggested Labels

blocked, post-poc

Metadata

Metadata

Assignees

No one assigned

    Labels

    blockedWaiting on another issue or external dependency.post-pocImportant but not blocking PoC.

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions