Quick Start
1
See the notice fire
Agent constructor and Agent.chat option is honoured — see the Agent page — and PR #4836 honoured all eight Handoff options. The notice above now fires only for the surfaces still in the queue below.2
Silence the notices
Set
PRAISONAI_PARITY_SILENT=1 for the process (useful in tests) to mute every parity notice.How It Works
Each surface consults theUNHONOURED_OPTIONS ledger when it is constructed, and warns once per (surface, option) pair if you pass a listed option with a non-default value.
The Remaining Surfaces
These options are accepted for Python-SDK parity but not yet acted on. Pass any with a non-default value and the SDK emits a notice.
Plus partial options that work for some inputs and announce themselves for the rest:
Counts current as of PR #4836 (2026-09-06), which honoured all eight
Handoff options (contextPolicy, maxContextTokens, maxContextMessages, preserveSystem, timeoutSeconds, maxConcurrent, detectCycles, maxDepth), dropping the total 48 → 40 and removing the Handoff surface entirely — see Handoffs. PR #4841 (2026-09-05) honoured all 21 Agent options (Agent.__init__ 15 → 0, Agent.chat 6 → 0, total 69 → 48). Those options now do what they promise — and some of them throw on a typo. See Agent for examples and the exact error strings. PR #4837 honoured seven AgentTeam options (AgentTeam.__init__ 15 → 8, total 76 → 69). PR #4838 landed the Task engine implementing 28 of the 32 Task.__init__ options, but the ledger above is unchanged: the engine has no call sites yet, so the options still emit notices until a future PR wires the team runner in. The four that stay open on merit — autonomy, web, reflection, planning — have no reference behaviour in Python to port. The list is a downward ratchet, so it will shrink over time. The live list is BEHAVIOUR_PARITY.md; the ledger is parity-notice.ts. PR #4880 hardened the parity checkers so a green report now requires the checker to have actually evaluated the row — see the changelog note below.Different defaults, same option
The sameAgent(output=…) code is silent in Python and verbose in TypeScript because the two SDKs resolve different defaults for an option that both honour.
The option is honoured on both sides, so this is not a “not yet honoured” surface — only the default differs when you leave it unset.
- Python
- TypeScript
The defaults are intentionally left as-is. In the words of the parity work that surfaced this: aligning defaults is a product decision, not a quiet edit — so the split is stable until a product-level decision changes it.
Best Practices
An option in this list didn't do anything — why?
An option in this list didn't do anything — why?
It’s accepted for API compatibility with the Python SDK, but the TypeScript behaviour behind it hasn’t been implemented yet. Watch the console for a
[praisonai] … not yet honoured notice at startup.How do I silence the notices?
How do I silence the notices?
Set the environment variable
PRAISONAI_PARITY_SILENT=1 (or PRAISONAI_PARITY_SILENT=true) for the process. This is what test suites use to keep output clean.How do I know if a specific option works?
How do I know if a specific option works?
Pass it. If you see no notice at startup, it’s honoured. Otherwise check
BEHAVIOUR_PARITY.md on main for the current list.How can I help close a row?
How can I help close a row?
Implement the behaviour, delete the option’s entry from the ledger, add a test that proves the option changes what the code does, and regenerate. See
_dev/parity/README.md in the SDK repo.If you add a waiver in signatures/waivers.yaml, scope it with a kinds: list (e.g. kinds: [default]). A waiver is keyed by parameter, so an unscoped one waiving a default difference also silenced a required-ness change on the same parameter — waivers now take an optional kinds, and required-ness is never covered implicitly.A green checker report is no longer proof on its own. The checkers previously had eleven blind spots — flattened parameters that were matched but not checked, unrecognised TypeScript default forms silently matching Python’s None, and ts_only required members that were rendered but not evaluated — and PR #4880 closed them, so a clean run now genuinely means the row was inspected. Do not treat pre-#4880 green results as evidence.Related
Agent
TypeScript Agent class —
Agent.__init__ and Agent.chat options.Agent Team
Multi-agent teams —
AgentTeam.__init__ options.Handoffs
Agent handoffs —
Handoff options.Tasks
Task definitions —
Task.__init__ options.
