Skip to main content
Glama

aiworkhub_task_create

Creates a canonical repo-local task card defining write scope, acceptance criteria, validation commands, and dependencies so a worker can execute a scoped coding task.

Instructions

MANAGER WRITE: create one new canonical repo-local task card.

Creation choices (also exposed as field hints): difficulty: bounded, standard, complex (optional; never inferred). work_kind: generic, bugfix, refactor, performance, security, data_ml. validation_roles: generic, reproduction, regression, parity, baseline, delta, negative_fixture, schema, distribution, suite_vs_base; one per validation command. suite_vs_base: a pytest command that passes when every failing test also fails on the candidate's base. Required roles: bugfix=reproduction+regression; refactor=parity; performance=baseline+delta; security=negative_fixture; data_ml=schema+distribution. validation: shell-free executable commands; no environment assignments, pipes, redirects or chaining. Set environment outside validation argv. custom_template_escape: audited_custom_unclassified, explicitly audited unclassified cards only, not an automatic bypass; writable escaped cards require non-empty required_outputs covered by allowed_writes.

Replies with a creation receipt (aiworkhub.task_create_receipt.v1): task_id, created/reconciled/receipt_state, scope_warnings, the server-derived validation_roles, risk_tier/origin/signals, difficulty/origin, validation_exemption, template_provenance, the project_context Source Graph query, and card_sha256/card_bytes -- never the card the caller just typed. echo_card=True returns the full CLI envelope with the persisted card in stdout instead. A refusal names every violation at once (violations) with field, length and limit. The live manager session supplies callback provider/origin identity; callers cannot route a task into another chat, disable the mandatory review callback, or overwrite an existing id. depends_on (optional) names other task_ids in this repo that must finish before this card is Plan-DAG ready; omit it for the pre-DAG behavior. Tasks are uncapped by default. Never infer, estimate, or auto-assign max_live_tokens from task complexity, model, historical usage, or cost. Supply it only when the owner explicitly requests an exact cap or a repository policy pre-registers one. Process efficiency must come from focused context, bounded reads, minimal edits, fewer retries, and useful validation rather than from truncating work. An authorized cap is enforced only when the selected provider exposes structured usage while running; terminal-only usage remains posthoc evidence, never a false live- enforcement claim. A writable task's required_outputs may be empty ONLY when template classification matches a contract that declares that default itself (e.g. implementation_with_tests/cross_boundary_bugfix, whose combined production+test scope keeps a deliberate empty default per NF-2026-00456) or an explicit, in-scope mandatory list resolves that way. Every other writable outcome -- including the audited custom-escape path, which has no template contract of its own to fall back on -- requires a non-empty required_outputs (NF-2026-00772); it contains only repo-relative file paths or glob patterns covered by allowed_writes. Human-readable outcome descriptions belong in acceptance; mixing prose into required_outputs is rejected before a provider run is launched. allow_unchanged_required_outputs explicitly names required files that are evidence inputs/outputs permitted to remain byte-identical to both launch baselines; they are verified and hashed but never promoted. allow_empty_required_outputs is the equivalent explicit exception for deliberately zero-byte outputs. Neither exception is inferred. read_only=True is required for a task that intentionally declares both allowed_writes=[] and required_outputs=[]. Read-only intent is never inferred from missing output authority. runner is the worker execution identity returned by aiworkhub_manager_workforce_rank.launch_contract.runner. The exact value codex is reserved for the verified manager and is rejected for worker cards. work_kind is an explicit behavioral contract, never inferred from the title or worker prose. Specialized values require one validation_roles entry per validation command: bugfix=reproduction+regression, refactor=parity, performance=baseline+delta, security=negative_fixture, and data_ml=schema+distribution. Missing roles are rejected before launch. suite_vs_base: a pytest command that passes when every failing test also fails on the candidate's base. risk_tier is optional explicit routing/economic evidence. It is never inferred from priority or prose; omitted historical cards remain unknown. It is a FLOOR: the observed write scope may escalate it, never lower it. The skill_* fields are the card's skill selection vocabulary, drawn from closed sets (aiworkhub_manager_skill_mine and skill_registry.SELECTION_VOCABULARIES name them). An unknown token is refused at create rather than silently matching nothing. skill_task_family and skill_path_scope are derivable from the template and the write set and may be omitted; skill_stage, skill_triggers and skill_applicability are not derivable, and a card that omits them selects no skill at all. Default creation is template-first: generic Python production-plus-test cards classify against the frozen registry, and unclassified raw cards fail closed unless custom_template_escape is the audited token. wave_goal_binding (optional) is exactly {roadmap_id, goal_id, predecessor_task_id} and makes this card that active wave goal's current task in place of the predecessor. It is never inferred from a title, topic, version suffix or prose; the receipt names its state.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "task_id": "<task_id>",
      "title": "<title>",
      "runner": "<runner>",
      "topic": "<topic>",
      "objective": "<objective>",
      "acceptance": "<acceptance>",
      "allowed_writes": "<allowed_writes>"
    },
    "name": "aiworkhub_task_create"
  }
}

Input Schema

NameRequiredDescriptionDefault
titleYesShort card title, 1-300 characters.
topicYesTopic that groups related cards: up to 128 characters, same character set as task_id.
runnerYesWorker execution identity from aiworkhub_manager_workforce_rank launch_contract.runner; up to 128 characters, same character set as task_id. The value codex is reserved for the manager and rejected for worker cards.
task_idYesUnique card id: up to 256 characters of letters, digits, '_', '.', ':' or '-', starting with a letter or digit. An existing id is never overwritten.
checkoutNoWorker tree checkout: sparse (default, declared closure only) or full (whole HEAD tree minus forbidden paths). Writes stay limited to allowed_writes either way. Refused with checkout_invalid:unknown_value:<value>. Omit for sparse.
evidenceNoOptional supporting evidence for the worker (measurements, logs, reproduction notes), up to 16000 characters after stripping; tab/newline are kept, other control characters are refused. Stored on the card and placed in the worker's task contract after the objective. The objective keeps its own limit. Omit for none.
priorityNoScheduling priority: low, normal (default), high or critical. Case and surrounding space are normalized.normal
deny_readNoUp to 32 repo-style POSIX globs (*, ?, [..], ** segments; a glob without '/' matches a basename at any depth) whose matching files in the worktree and read_roots are made unreadable to the worker: a Landlock read layer on Linux, an explicit deny ACE on Windows AppContainer, refused on any other backend. Refused with deny_read_invalid:<reason>:<glob>. Omit for none.
echo_cardNoSet true to return the full CLI envelope with the persisted card in stdout instead of the compact creation receipt. Default false.
forbiddenNoRepo-relative paths or globs the worker must not touch, up to 128. A card whose writes, outputs, inputs, objective or validation overlap one is refused. Omit for none.
objectiveYesWhat the worker must achieve, 1-4000 characters. Naming a forbidden path here is refused as a contradiction.
read_onlyNoTrue for a card that deliberately writes nothing: allowed_writes and required_outputs must then both be empty. Never inferred; default false.
risk_tierNoOptional risk-tier floor: low, medium, high or critical. The observed write scope may raise it but never lower it. Omit to derive it from the scope.
task_typeNoCard type: code (default; a writable code card must declare validation), data_classification or research. Case and surrounding space are normalized.code
work_kindNoAccepted work_kind values: generic, bugfix, refactor, performance, security, data_ml. Case and surrounding space are normalized by core; never infer from prose.generic
acceptanceYesAcceptance criteria the finished work is reviewed against: 1-128 entries of up to 1000 characters each. Required.
depends_onNoOther task_ids in this repo that must finish before this card is Plan-DAG ready. Omit for no dependencies.
difficultyNoAccepted difficulty values: bounded, standard, complex. Optional; omitted remains undeclared, never inferred. Case and surrounding space are normalized by core.
host_sweepNo{tests: up to 512 pytest node ids or files, processes: int} run sharded on the full candidate tree, processes capped at the core count minus 25% headroom; a test red on base too is not a candidate failure. Refused with host_sweep_<field>_invalid. Omit for none.
read_firstNoRepo-relative files the worker should read first, up to 128 entries of up to 1000 characters each. Omit for none.
read_rootsNoUp to 16 absolute host directories OUTSIDE the worktree the provider worker may READ (runtime data), granted read-only on Windows AppContainer and Linux Landlock. Refused with read_root_invalid:<reason>:<path> when not an existing plain directory, or when it is a volume/UNC root, reparse point, .git/.aiworkhub path, the repo root or its parent, another git repository, the home directory or its credential folders. Omit for none.
validationNoshell-free executable commands, one per entry; no environment assignments, pipes, redirects, or command chaining. Set environment outside validation argv.
materializeNoUp to 64 repo-relative globs materialized (present, read-only by scope) in the sparse worker, validation and reproduction trees in addition to the declared closure, e.g. committed configs/models/eval data. Same path rules as allowed_writes; refused with materialize_invalid:<reason>:<value> when absolute, containing .. or .git, or too many. Writes stay limited to allowed_writes; forbidden paths are never materialized. Omit for none.
skill_stageNoWorker workflow stage to select skills for: orientation, implementation, validation, review or rework (not the card status); an unknown token is refused. Not derivable: omitting skill_stage, skill_triggers and skill_applicability selects no skill.
host_commandsNoUp to 16 argv lists the coordinator runs in order on a FULL candidate tree after review_ready (same parser rules as validation commands, no env/cd prefixes). Files they create inside allowed_writes join the candidate; others are only reported. Refused with host_command_invalid:<index>:<reason>. Omit for none.
allowed_writesYesRepo-relative file paths or glob patterns the worker may write: up to 128 entries of up to 1000 characters each; absolute paths, '..' and directories are refused. Empty only together with read_only=true.
skill_triggersNoObservable conditions that make a skill relevant, from a closed vocabulary (e.g. code_change, public_api, security_sensitive, concurrency); at most 16, an unknown token is refused. Not derivable.
max_live_tokensNoExact live-token cap (1-100000000), only when the owner explicitly requests one. Omit for uncapped; never estimate or infer a cap.
immutable_inputsNoExisting repo-relative files the worker may read but must not change. Omit for none.
required_outputsNoRepo-relative file paths or glob patterns the finished work must change, each covered by allowed_writes; up to 128. Put prose outcomes in acceptance, not here. Empty is accepted only for read_only cards or where the matched template contract defaults it empty.
skill_path_scopeNoRepo-relative path or symbol that scopes skill selection; absolute paths and '..' are refused. Derivable from the write set, so it may be omitted.
validation_rolesNoAccepted validation_roles: generic, reproduction, regression, parity, baseline, delta, negative_fixture, schema, distribution, suite_vs_base. Supply one role per validation command. Required: bugfix=reproduction+regression; refactor=parity; performance=baseline+delta; security=negative_fixture; data_ml=schema+distribution. Case and surrounding space are normalized by core. suite_vs_base: a pytest command that passes when every failing test also fails on the candidate's base.
skill_task_familyNoSkill family: analysis, bugfix, data_ml, docs, implementation, performance, refactor, replay, security or test; an unknown token is refused. Derivable from the template and the write set, so it may be omitted.
wave_goal_bindingNoExactly {roadmap_id, goal_id, predecessor_task_id}: makes this card the active wave goal's current task in place of the predecessor. Never inferred; a malformed binding is refused. Omit for none.
skill_applicabilityNoSurface kinds a skill applies to, from a closed vocabulary (e.g. quality_gate, public_api_surface, security_surface, storage_schema_surface); at most 16, an unknown token is refused. Not derivable.
apply_contract_patchNosha256 digest of a contract patch a finalizer already published; it supplies allow_unchanged_required_outputs by reference and is never applied automatically. Naming both the digest and allow_unchanged_required_outputs is refused. Omit for none.
custom_template_escapeNoExplicit audited escape token: audited_custom_unclassified. Only for deliberately audited unclassified cards, not an automatic bypass. Writable escaped cards require non-empty required_outputs covered by allowed_writes.
allow_empty_required_outputsNoExact repo-relative paths (no globs) of required outputs that may deliberately end up zero bytes, each covered by required_outputs and allowed_writes. Never inferred.
allow_unchanged_required_outputsNoExact repo-relative paths (no globs) of required outputs that may stay byte-identical to both launch baselines, each listed exactly in required_outputs and allowed_writes. Never inferred; use apply_contract_patch instead to name them by digest, never both.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed7 schema fields changedv0.12.98
    • addedInput schema / properties / checkout
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Worker tree checkout: sparse (default, declared closure only) or full (whole HEAD tree minus forbidden paths). Writes stay limited to allowed_writes either way. Refused with checkout_invalid:unknown_value:<value>. Omit for sparse.",
      +  "examples": [
      +    "full"
      +  ],
      +  "title": "Checkout"
      +}
    • addedInput schema / properties / deny_read
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Up to 32 repo-style POSIX globs (*, ?, [..], ** segments; a glob without '/' matches a basename at any depth) whose matching files in the worktree and read_roots are made unreadable to the worker: a Landlock read layer on Linux, an explicit deny ACE on Windows AppContainer, refused on any other backend. Refused with deny_read_invalid:<reason>:<glob>. Omit for none.",
      +  "examples": [
      +    [
      +      "secrets/*.pem",
      +      ".env"
      +    ]
      +  ],
      +  "title": "Deny Read"
      +}
    • addedInput schema / properties / evidence
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Optional supporting evidence for the worker (measurements, logs, reproduction notes), up to 16000 characters after stripping; tab/newline are kept, other control characters are refused. Stored on the card and placed in the worker's task contract after the objective. The objective keeps its own limit. Omit for none.",
      +  "examples": [
      +    "pytest tests/test_export.py::test_retry fails: TimeoutError after 1 attempt"
      +  ],
      +  "title": "Evidence"
      +}
    • addedInput schema / properties / host_commands
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Up to 16 argv lists the coordinator runs in order on a FULL candidate tree after review_ready (same parser rules as validation commands, no env/cd prefixes). Files they create inside allowed_writes join the candidate; others are only reported. Refused with host_command_invalid:<index>:<reason>. Omit for none.",
      +  "examples": [
      +    [
      +      [
      +        "python",
      +        "-m",
      +        "tools.generate_schema"
      +      ]
      +    ]
      +  ],
      +  "title": "Host Commands"
      +}
    • addedInput schema / properties / host_sweep
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": true,
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "{tests: up to 512 pytest node ids or files, processes: int} run sharded on the full candidate tree, processes capped at the core count minus 25% headroom; a test red on base too is not a candidate failure. Refused with host_sweep_<field>_invalid. Omit for none.",
      +  "examples": [
      +    {
      +      "processes": 4,
      +      "tests": [
      +        "tests/test_mod.py"
      +      ]
      +    }
      +  ],
      +  "title": "Host Sweep"
      +}
    • addedInput schema / properties / materialize
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Up to 64 repo-relative globs materialized (present, read-only by scope) in the sparse worker, validation and reproduction trees in addition to the declared closure, e.g. committed configs/models/eval data. Same path rules as allowed_writes; refused with materialize_invalid:<reason>:<value> when absolute, containing .. or .git, or too many. Writes stay limited to allowed_writes; forbidden paths are never materialized. Omit for none.",
      +  "examples": [
      +    [
      +      "configs/**"
      +    ]
      +  ],
      +  "title": "Materialize"
      +}
    • changedInput schema / properties / read_roots / description
      Previous value: -"Up to 16 absolute host directories OUTSIDE the worktree the provider worker may READ (runtime data), granted read-only on Windows AppContainer only. Refused with read_root_invalid:<reason>:<path> when not an existing plain directory, or when it is a volume/UNC root, reparse point, .git/.aiworkhub path, the repo root or its parent, another git repository, the home directory or its credential folders. Omit for none."New value: +"Up to 16 absolute host directories OUTSIDE the worktree the provider worker may READ (runtime data), granted read-only on Windows AppContainer and Linux Landlock. Refused with read_root_invalid:<reason>:<path> when not an existing plain directory, or when it is a volume/UNC root, reparse point, .git/.aiworkhub path, the repo root or its parent, another git repository, the home directory or its credential folders. Omit for none."
  2. Changed1 schema field changedv0.12.96
    • changedInput schema / properties / read_roots / examples
      Previous value: -[
      -  [
      -    "E:\\Dev\\RuntimeData"
      -  ]
      -]New value: +[
      +  [
      +    "E:\\RuntimeData"
      +  ]
      +]
  3. Changed2 schema fields changedv0.12.80
    • addedInput schema / properties / read_roots
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Up to 16 absolute host directories OUTSIDE the worktree the provider worker may READ (runtime data), granted read-only on Windows AppContainer only. Refused with read_root_invalid:<reason>:<path> when not an existing plain directory, or when it is a volume/UNC root, reparse point, .git/.aiworkhub path, the repo root or its parent, another git repository, the home directory or its credential folders. Omit for none.",
      +  "examples": [
      +    [
      +      "E:\\Dev\\RuntimeData"
      +    ]
      +  ],
      +  "title": "Read Roots"
      +}
    • changedInput schema / properties / validation_roles / description
      Previous value: -"Accepted validation_roles: generic, reproduction, regression, parity, baseline, delta, negative_fixture, schema, distribution. Supply one role per validation command. Required: bugfix=reproduction+regression; refactor=parity; performance=baseline+delta; security=negative_fixture; data_ml=schema+distribution. Case and surrounding space are normalized by core."New value: +"Accepted validation_roles: generic, reproduction, regression, parity, baseline, delta, negative_fixture, schema, distribution, suite_vs_base. Supply one role per validation command. Required: bugfix=reproduction+regression; refactor=parity; performance=baseline+delta; security=negative_fixture; data_ml=schema+distribution. Case and surrounding space are normalized by core. suite_vs_base: a pytest command that passes when every failing test also fails on the candidate's base."
  4. Changed52 schema fields changedv0.12.67
    • addedInput schema / properties / acceptance / description
      Added value: +"Acceptance criteria the finished work is reviewed against: 1-128 entries of up to 1000 characters each. Required."
    • addedInput schema / properties / acceptance / examples
      Added value: +[
      +  [
      +    "Export retries a transient storage error up to three times"
      +  ]
      +]
    • addedInput schema / properties / allow_empty_required_outputs / description
      Added value: +"Exact repo-relative paths (no globs) of required outputs that may deliberately end up zero bytes, each covered by required_outputs and allowed_writes. Never inferred."
    • addedInput schema / properties / allow_empty_required_outputs / examples
      Added value: +[
      +  [
      +    "tests/fixtures/empty.txt"
      +  ]
      +]
    • addedInput schema / properties / allow_unchanged_required_outputs / description
      Added value: +"Exact repo-relative paths (no globs) of required outputs that may stay byte-identical to both launch baselines, each listed exactly in required_outputs and allowed_writes. Never inferred; use apply_contract_patch instead to name them by digest, never both."
    • addedInput schema / properties / allow_unchanged_required_outputs / examples
      Added value: +[
      +  [
      +    "docs/export_contract.md"
      +  ]
      +]
    • addedInput schema / properties / allowed_writes / description
      Added value: +"Repo-relative file paths or glob patterns the worker may write: up to 128 entries of up to 1000 characters each; absolute paths, '..' and directories are refused. Empty only together with read_only=true."
    • addedInput schema / properties / allowed_writes / examples
      Added value: +[
      +  [
      +    "src/app/export.py",
      +    "tests/test_export.py"
      +  ]
      +]
    • addedInput schema / properties / apply_contract_patch / description
      Added value: +"sha256 digest of a contract patch a finalizer already published; it supplies allow_unchanged_required_outputs by reference and is never applied automatically. Naming both the digest and allow_unchanged_required_outputs is refused. Omit for none."
    • addedInput schema / properties / depends_on / description
      Added value: +"Other task_ids in this repo that must finish before this card is Plan-DAG ready. Omit for no dependencies."
    • addedInput schema / properties / depends_on / examples
      Added value: +[
      +  [
      +    "EXPORT_RETRY_0"
      +  ]
      +]
    • addedInput schema / properties / echo_card / description
      Added value: +"Set true to return the full CLI envelope with the persisted card in stdout instead of the compact creation receipt. Default false."
    • addedInput schema / properties / echo_card / examples
      Added value: +[
      +  false
      +]
    • addedInput schema / properties / forbidden / description
      Added value: +"Repo-relative paths or globs the worker must not touch, up to 128. A card whose writes, outputs, inputs, objective or validation overlap one is refused. Omit for none."
    • addedInput schema / properties / forbidden / examples
      Added value: +[
      +  [
      +    "src/app/auth.py"
      +  ]
      +]
    • addedInput schema / properties / immutable_inputs / description
      Added value: +"Existing repo-relative files the worker may read but must not change. Omit for none."
    • addedInput schema / properties / immutable_inputs / examples
      Added value: +[
      +  [
      +    "docs/export_contract.md"
      +  ]
      +]
    • addedInput schema / properties / max_live_tokens / description
      Added value: +"Exact live-token cap (1-100000000), only when the owner explicitly requests one. Omit for uncapped; never estimate or infer a cap."
    • addedInput schema / properties / max_live_tokens / examples
      Added value: +[
      +  50000
      +]
    • addedInput schema / properties / objective / description
      Added value: +"What the worker must achieve, 1-4000 characters. Naming a forbidden path here is refused as a contradiction."
    • addedInput schema / properties / objective / examples
      Added value: +[
      +  "Retry transient storage errors in the export job up to three times."
      +]
    • addedInput schema / properties / priority / description
      Added value: +"Scheduling priority: low, normal (default), high or critical. Case and surrounding space are normalized."
    • addedInput schema / properties / priority / examples
      Added value: +[
      +  "normal",
      +  "high"
      +]
    • addedInput schema / properties / read_first / description
      Added value: +"Repo-relative files the worker should read first, up to 128 entries of up to 1000 characters each. Omit for none."
    • addedInput schema / properties / read_first / examples
      Added value: +[
      +  [
      +    "src/app/export.py"
      +  ]
      +]
    • addedInput schema / properties / read_only / description
      Added value: +"True for a card that deliberately writes nothing: allowed_writes and required_outputs must then both be empty. Never inferred; default false."
    • addedInput schema / properties / read_only / examples
      Added value: +[
      +  false
      +]
    • addedInput schema / properties / required_outputs / description
      Added value: +"Repo-relative file paths or glob patterns the finished work must change, each covered by allowed_writes; up to 128. Put prose outcomes in acceptance, not here. Empty is accepted only for read_only cards or where the matched template contract defaults it empty."
    • addedInput schema / properties / required_outputs / examples
      Added value: +[
      +  [
      +    "src/app/export.py"
      +  ]
      +]
    • addedInput schema / properties / risk_tier / description
      Added value: +"Optional risk-tier floor: low, medium, high or critical. The observed write scope may raise it but never lower it. Omit to derive it from the scope."
    • addedInput schema / properties / risk_tier / examples
      Added value: +[
      +  "high"
      +]
    • addedInput schema / properties / runner / description
      Added value: +"Worker execution identity from aiworkhub_manager_workforce_rank launch_contract.runner; up to 128 characters, same character set as task_id. The value codex is reserved for the manager and rejected for worker cards."
    • addedInput schema / properties / skill_applicability / description
      Added value: +"Surface kinds a skill applies to, from a closed vocabulary (e.g. quality_gate, public_api_surface, security_surface, storage_schema_surface); at most 16, an unknown token is refused. Not derivable."
    • addedInput schema / properties / skill_applicability / examples
      Added value: +[
      +  [
      +    "public_api_surface"
      +  ]
      +]
    • addedInput schema / properties / skill_path_scope / description
      Added value: +"Repo-relative path or symbol that scopes skill selection; absolute paths and '..' are refused. Derivable from the write set, so it may be omitted."
    • addedInput schema / properties / skill_path_scope / examples
      Added value: +[
      +  "src/app/export.py"
      +]
    • addedInput schema / properties / skill_stage / description
      Added value: +"Worker workflow stage to select skills for: orientation, implementation, validation, review or rework (not the card status); an unknown token is refused. Not derivable: omitting skill_stage, skill_triggers and skill_applicability selects no skill."
    • addedInput schema / properties / skill_stage / examples
      Added value: +[
      +  "implementation"
      +]
    • addedInput schema / properties / skill_task_family / description
      Added value: +"Skill family: analysis, bugfix, data_ml, docs, implementation, performance, refactor, replay, security or test; an unknown token is refused. Derivable from the template and the write set, so it may be omitted."
    • addedInput schema / properties / skill_task_family / examples
      Added value: +[
      +  "implementation"
      +]
    • addedInput schema / properties / skill_triggers / description
      Added value: +"Observable conditions that make a skill relevant, from a closed vocabulary (e.g. code_change, public_api, security_sensitive, concurrency); at most 16, an unknown token is refused. Not derivable."
    • addedInput schema / properties / skill_triggers / examples
      Added value: +[
      +  [
      +    "code_change",
      +    "public_api"
      +  ]
      +]
    • addedInput schema / properties / task_id / description
      Added value: +"Unique card id: up to 256 characters of letters, digits, '_', '.', ':' or '-', starting with a letter or digit. An existing id is never overwritten."
    • addedInput schema / properties / task_id / examples
      Added value: +[
      +  "EXPORT_RETRY_1"
      +]
    • addedInput schema / properties / task_type / description
      Added value: +"Card type: code (default; a writable code card must declare validation), data_classification or research. Case and surrounding space are normalized."
    • addedInput schema / properties / task_type / examples
      Added value: +[
      +  "code",
      +  "research"
      +]
    • addedInput schema / properties / title / description
      Added value: +"Short card title, 1-300 characters."
    • addedInput schema / properties / title / examples
      Added value: +[
      +  "Add retry to the export job"
      +]
    • addedInput schema / properties / topic / description
      Added value: +"Topic that groups related cards: up to 128 characters, same character set as task_id."
    • addedInput schema / properties / topic / examples
      Added value: +[
      +  "export-reliability"
      +]
    • addedInput schema / properties / wave_goal_binding / description
      Added value: +"Exactly {roadmap_id, goal_id, predecessor_task_id}: makes this card the active wave goal's current task in place of the predecessor. Never inferred; a malformed binding is refused. Omit for none."
    • addedInput schema / properties / wave_goal_binding / examples
      Added value: +[
      +  {
      +    "goal_id": "G1",
      +    "predecessor_task_id": "EXPORT_RETRY_0",
      +    "roadmap_id": "RM-2026-00001"
      +  }
      +]
  5. First observedv0.1.0

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses the creation receipt format, refusal behavior with violations, callback identity restrictions, inability to overwrite existing ids, uncapped defaults, live-token enforcement caveats, and template-first classification. This is unusually rich behavioral context for a write tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose, but it is extremely dense and contains repetition: the required validation role mappings and suite_vs_base definition appear twice. Given the tool's complexity some length is justified, but several sentences could be consolidated without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 39-parameter mutation tool with an output schema and full schema coverage, the description supplies the critical cross-cutting rules an agent needs. It is not fully complete on sibling routing, but the core creation, validation, output, and refusal semantics are addressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description adds cross-parameter meaning: validation_roles requirements by work_kind, required_outputs emptiness rules, skill field derivability, and the audited escape token. Some parameters are covered only by the schema, so it does not fully replace the schema, but it materially enriches semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first line gives a specific verb and resource: 'create one new canonical repo-local task card', and labels it a manager write. It is clear what the tool does, but it does not explicitly distinguish itself from the sibling aiworkhub_task_create_from_template, even though template-first behavior is discussed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives many conditions for specific fields, such as when to use custom_template_escape, when required_outputs may be empty, and when read_only is required. It does not explicitly name aiworkhub_task_create_from_template as the alternative for template-based creation, leaving sibling routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools