Einführungspreis: 100 € zzgl. Steuern. Danach 200 € zzgl. Steuern.Yard für 100 € kaufen zzgl. Steuern

Aufgabenquellen

Lokales Board, GitHub Projects und Tracking-Plugins.

Aktualisiert · Nov. 2026Technische Referenz · Englisch
Technische Referenz auf Englisch verfügbar. Diese Referenz enthält die ursprünglichen englischen technischen Inhalte und Befehle.

Technical reference synchronized with Yard’s source. File names and development commands refer to the native app repository.

New project connections use Yard's integrated board. GitHub Projects remains available in the connection sheet. Existing configurations without tracking retain their GitHub behavior. The task source is independent of the GitHub repository used to create, review and merge pull requests.

The native client creates tasks through the existing draft editor, opens their descriptions and activity in the inspector, and edits titles, labels, descriptions and status. Tasks start in Backlog. Verification commands and a working code-host connection are needed for agent delivery, not for using the local board.

Configuration and persistence

{
  "tracking": { "driver": "yard" },
  "repo": { "path": "/path/to/project", "remote": "owner/repository" }
}

tracking.driver selects yard, github or an installed plugin identifier. GitHub also uses the existing project.owner and project.number settings. Unknown configuration keys remain intact.

Yard stores local tasks in .yard/tasks/<configuration-slug>/board.json. It stores opaque IDs, stable numeric handles, revisions, comments, status, labels, assignments and explicit PR links. Creates carry a publication identifier: repeating a confirmed create returns the same task, while changing its original content is rejected. Writes and exclusive claims use a process lock and atomic replacement. Unrecognized or corrupt board versions fail without overwriting the file. Private .yard/ data is excluded through Git's local exclude file.

The first task read or write records the source identity in .yard/task-connections/<slug>.json; browsing an empty board leaves the source editable. A used configuration cannot be silently repointed at another source: use another configuration for a different connection. Handoffs, branches, worktrees and preview names for non-GitHub tasks include the source and configuration namespace, preventing task #1 in Yard from sharing the workspace of GitHub issue #1.

Task source changes do not migrate tasks or historic evidence. Yard keeps the existing GitHub configuration and receipts compatible. The local board does not require a server, GitHub Projects permissions or a public webhook.

Delivery and approvals

The engine retains Build → QA → Review → Done. qa tasks can skip Build. Labels, blockers, claims, continuation, Studio handoffs and collection operate on the selected driver. New local configurations collect architecture/code signals by default; external signal sources can be enabled separately.

A project with a non-GitHub task source and no GitHub repository uses local delivery: no remote, gh or PR is needed. yard-board-merge-gate --task <n> --branch <branch> --expect-head <sha> applies the same policy and verification, then squash-merges into the local base branch. Gate records live in .yard/delivery/. Human approvals are written by Yard under agents/approvals/ in Application Support, outside the project, and pin the exact commit and policy scope.

With a GitHub repository, GitHub remains responsible for code, PRs, collaborators, diffs, checks and merging. A local task links to an actual PR explicitly, storing both its repository and number. Local task numbers are never interpreted as GitHub issue numbers, and PR bodies must not use Closes #<local-number>.

Approval requests and confirmations for local tasks live on the linked PR. The merge gate still checks the human identity, repository permissions, exact reviewed head and policy scope. An edited head invalidates the approval. Local comments and task status never authorize a merge. A successful Review requires GitHub to confirm the merge and the engine to prove ancestry on the fetched remote base.

CLI

The app and both agents executables use the same engine. Run from the repository, or supply --root with a separate path argument. Paths and body files may contain spaces.

yard-agents onboard demo --tracker yard
yard-agents card create --title "Export data" --body-file "/tmp/task body.md" --label feature --request-id export-v1
yard-agents card items
yard-agents card get 1
yard-agents card edit 1 --title "Export table data" --body-file "/tmp/task body.md"
yard-agents card comments 1
yard-agents card comment 1 --body-file "/tmp/task evidence.md"
yard-agents card move 1 Ready
yard-agents card link-pr 1 --pr 113
yard-agents card close 1

To create a GitHub connection, use onboard <slug> --tracker github --owner <owner> --number <board> --repo <repo> --verify <command>. The existing --number option also selects GitHub for compatibility. Configure real verification commands before running agents. Closing a task manually does not merge its code.

Installed worker helpers expose the same card subcommands as .claude/bin/yard-board-card. Agent prompts select the correct task transport while retaining GitHub's guarded PR helpers. Imported upstream skills are unchanged.

Executable plugins: driver API version 1

Install a prepared plugin package under $YARD_HOME/plugins/task-tracking/<id>/ (normally ~/Library/Application Support/Yard/plugins/task-tracking/<id>/). It appears in the task-source picker the next time the connection sheet is opened. Yard never discovers executable plugins from repository content.

The package contains manifest.json, its executable and any bundled runtime, plus its licenses. Users should not need to compile it or install Homebrew, Node or Python. A manifest looks like:

{
  "id": "example",
  "version": "1.0.0",
  "api_version": 1,
  "executable": "bin/example-driver",
  "capabilities": ["list", "get", "create", "update", "move", "comments", "comment", "claim", "close"]
}

The executable must stay within the package. At least list and get are required. Other capabilities are optional; unsupported operations fail before execution. Agent delivery additionally requires update, move, comments, comment and exclusive claim support. The app uses capabilities to disable unsupported editing and publication actions.

The host launches one process per request, writes one JSON-RPC 2.0 request to stdin and expects one JSON object on stdout. Diagnostics belong on stderr. The process has a 30-second deadline. Plugins run with the user's ordinary process privileges; a separate process is crash isolation, not an operating-system permission boundary.

{
  "jsonrpc": "2.0",
  "id": "request-uuid",
  "method": "tasks.get",
  "params": {
    "connection": "demo",
    "settings": { "team": "example-team" },
    "arguments": { "number": 7 }
  }
}

The response echoes id and jsonrpc, with either result or a JSON-RPC error containing a message. Only tracking.settings is passed to the plugin, not the project's AI or unrelated integration configuration. Settings must contain non-secret identifiers or credential references; plugins own service authentication and should use the macOS Keychain for credentials. The protocol does not currently provide a general OAuth setup UI.

Method Arguments Result
tasks.list None Complete items array and matching totalCount; the plugin handles remote pagination.
tasks.get number Full task record for that handle.
tasks.create title, body, labels, request_id Created task; the request identifier must be idempotent.
tasks.update number, changed title/body, add_labels/remove_labels, optional expected_revision; explicit PR links Updated full task.
tasks.move number, canonical status, optional expected_revision Confirmed result.
tasks.comments number Complete comments array.
tasks.comment number, body, optional informational author Created comment.
tasks.claim number, optional exclusive or release Boolean claimed; exclusive claims must be atomic.
tasks.close number Confirmed result.

A full record has opaque string id, positive integer number, string title, body, state (OPEN or CLOSED), labels and assignees. Preserve the service's opaque ID separately as external_id. Handles must be stable across restarts and must not be reused for different remote tasks. Normalize this worker's claim identity to yard-agent, retaining other assignees. A plugin can persist its own handle mapping rather than converting a service ID to an integer.

List items use { "id": "card-id", "status": "Ready", "content": <full-record> }; content can include type: "Task" and comments. Canonical statuses are Backlog, Ready, Building, QA, Review, Blocked and Done. A plugin maps its external workflow to these statuses. Include pull_requests and pull_request_repository in the task record when the engine links a GitHub PR through tasks.update. That link belongs to the configured code repository.

Incomplete lists, duplicate handles and mismatched task responses are rejected. Mutations are journaled under .yard/runtime/<slug>/task-plugin-mutations/ before execution. An interrupted or malformed response leaves an uncertain receipt; the host never repeats that write automatically. Reconcile it with the provider before clearing the pending receipt. Explicit JSON-RPC errors are recorded as rejected operations.

The executable test fixture in PluginTaskDriverTests.swift demonstrates the protocol. No Linear plugin is bundled yet; adding one uses this contract without changing the board or the engine's delivery policy.