pasture

module
v0.0.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 28, 2026 License: MIT

README

Pasture

Go implementation of the Aura Protocol codegen and workflow engine.

What This Does

Pasture provides the runtime infrastructure for the Aura Protocol: a DBOS-backed durable engine (pastured daemon), a unified local CLI (pasture) for task management, epoch lifecycle, signals, and queries, and release tooling (pasture-release). The daemon orchestrates agent workflows with constraint validation, phase transitions, queue recovery, and audit trail logging. All task and audit operations route through a single protocol.TaskTracker facade against one shared SQLite file at ~/.local/share/pasture/pasture.db. See AGENTS.md for the full architectural overview and docs/adr/0001-pasture-toolkit-integration-architecture.md (in the parent repo) for the integration ADR.

Quick Start

Build and test:

make build          # produces bin/pastured, bin/pasture, bin/pasture-release
make test           # go test -race ./...
make lint           # go vet ./...
make fmt            # gofmt -w .

Or use Nix:

nix develop         # dev shell with Go, gopls, sqlite
nix build .#pastured
nix build .#pasture

Running With The DBOS Backend

Pasture now uses DBOS Transact over the local SQLite file instead of a Temporal server. There is no workflow server to install or manage. For durable background work, run pastured as the DBOS engine host and point both pastured and pasture at the same pasture.db file.

pastured currently requires a readable YAML config file. The DBOS defaults are enough for local use, so a minimal durable config is:

audit_trail: sqlite

Example:

$ printf 'audit_trail: sqlite\n' > /tmp/pasture-demo-config.yaml
$ export PASTURE_DB_PATH=/tmp/pasture-dbos-demo.db
$ pastured --config /tmp/pasture-demo-config.yaml --db "$PASTURE_DB_PATH" --slice-concurrency 4
2026/06/12 17:26:14 INFO pastured starting version=v0.1.0 dbPath=/tmp/pasture-dbos-demo.db auditTrail=sqlite sliceConcurrency=4
2026/06/12 17:26:15 INFO Initializing DBOS context app_name=pasture dbos_version=v0.16.0
2026/06/12 17:26:15 INFO Using custom SQLite system database handle
2026/06/12 17:26:15 INFO daemon runtime ready dbPath=/tmp/pasture-dbos-demo.db wellKnownAgents=15 hookRecorders=1 hasTracker=true
2026/06/12 17:26:15 INFO DBOS launched app_version=1 executor_id=pasture
2026/06/12 17:26:15 INFO DBOS engine launched, waiting for shutdown dbPath=/tmp/pasture-dbos-demo.db sliceConcurrency=4 hookRecorders=1

In another terminal, use the CLI against the same database:

$ pasture --db "$PASTURE_DB_PATH" task create "Demo DBOS epoch" --type task --priority high --phase request --format json
{
  "id": "https://github.com/dayvidpham/pasture--019ebe5f-8047-7f26-b00a-89a1ce877392",
  "title": "Demo DBOS epoch",
  "status": "open",
  "priority": "high",
  "type": "task",
  "phase": "request",
  "createdAt": "2026-06-13T00:26:30Z",
  "updatedAt": "2026-06-13T00:26:30Z"
}

$ pasture --db "$PASTURE_DB_PATH" epoch start --epoch-id https://github.com/dayvidpham/pasture--019ebe5f-8047-7f26-b00a-89a1ce877392
2026/06/12 17:26:35 INFO Initializing DBOS context app_name=dbos-client dbos_version=v0.16.0
2026/06/12 17:26:35 INFO Using custom SQLite system database handle
Started epoch: workflow_id=https://github.com/dayvidpham/pasture--019ebe5f-8047-7f26-b00a-89a1ce877392

$ pasture --db "$PASTURE_DB_PATH" phase advance --epoch-id https://github.com/dayvidpham/pasture--019ebe5f-8047-7f26-b00a-89a1ce877392 --to elicit --triggered-by worker --condition "request classified"
2026/06/12 17:26:37 INFO Initializing DBOS context app_name=dbos-client dbos_version=v0.16.0
2026/06/12 17:26:37 INFO Using custom SQLite system database handle
Signal delivered successfully

$ pasture --db "$PASTURE_DB_PATH" query current --epoch-id https://github.com/dayvidpham/pasture--019ebe5f-8047-7f26-b00a-89a1ce877392
Phase: elicit
Role:  user

Operational note: task, audit, migration, and read-only status/query commands use the unified DBOS-backed SQLite file directly. Epoch lifecycle commands use a lightweight DBOS client: epoch start enqueues the control workflow on pasture-control-queue, and signal/cancel verbs write durable DBOS records for the target workflow ID. pastured remains the long-running host that dequeues and executes epoch control, slice/review queues, hooks, and recovery work.

Project Structure

cmd/
  ├── pasture/         # Unified CLI: task management, epoch lifecycle, signals, queries, migrate
  ├── pastured/        # DBOS engine-host daemon entry point
  └── pasture-release/ # Release and versioning tool
internal/
  ├── acp/             # Agent Control Protocol client + adapter
  ├── audit/           # Audit trail + schema migrator (SQLite-backed)
  ├── config/          # Viper-based configuration
  ├── errors/          # Actionable error types
  ├── formatters/      # Output formatters (JSON, text, table)
  ├── handlers/        # Cobra RunE → standalone handler functions
  ├── hooks/           # Claude Code hook event handlers
  ├── tasks/           # protocol.TaskTracker implementation + well-known agent registry
  ├── engine/          # DBOS durable engine, projection, queues, recovery
  └── types/           # Internal aggregate types
legacy/
  └── temporal/        # Deprecated nested module preserving the old Temporal substrate
pkg/
  └── protocol/        # Public aura-protocol types — including protocol.TaskTracker

CLI Surface (pasture)

The local pasture CLI hosts task verbs (task create / show / update / close / list, task ready, task blocked, task dep add|tree, task label add|remove, task comment add, task comments) and event/audit verbs:

Subcommand Purpose
pasture task events [--epoch-id <id>] [--phase <p>] [--role <r>] Query audit events
pasture task timeline TASK-ID Show all events attached to a task
pasture task contexts EVENT-ID List context_edges attached to an event
pasture task agents [list|show] List or inspect registered agents
pasture migrate [--dry-run] Run pending audit-database schema migrations (top-level — NOT under pasture task)

Key Conventions

  • No CGo: All dependencies pure Go (CGO_ENABLED=0). Use modernc.org/sqlite, not mattn/go-sqlite3.
  • Strongly-typed enums: Prefer typed constants over bare strings.
  • Actionable errors: Every error describes what, why, where, when, and how to fix.
  • Test pattern: *_test.go files import actual production code with dependency injection for mocks.

Code Generation

The protocol schema.xml, registered skills, and tool-bearing role agents are generated, not hand-maintained. Protocol facts (phases, roles, constraints, commands, figures, and skill bodies) are declared once as typed Go values in internal/codegen/ and rendered for Claude Code, OpenCode, and Codex. The hand-authored protocol and install-cli skills sit outside that generated registry and are copied verbatim into the applicable non-Claude targets.

make generate                        # regenerate every committed target
go test ./internal/codegen/...       # completeness, parity, and sync guards

The data flows from specs_data*.go through tools/codegen to schema.xml, the Claude Code trees (skills/, agents/), the OpenCode trees (.opencode/skill/, .opencode/agent/, opencode.json), and the Codex trees (.agents/skills/, .codex/agents/, .codex/hooks/, and Codex manifests). For registered Claude Code skills, the generator owns the complete content through the END marker; maintained body prose belongs in specs_data_body_<skill>.go, not below that marker. CI regenerates all targets on a clean checkout and fails on any resulting worktree change; an exact output-inventory test also rejects retired files that in-place generation cannot remove.

Lifecycle runtime

The landed Claude Code lifecycle path accepts bounded native payloads, preserves each delivery as occurrence evidence, verifies provider bindings through the typed lifecycle waist, records interpreted evidence and gate consultations, and exposes bounded read-back through pasture hook lifecycle list. Activation is a generated, static decision: fixture provenance is checked by tests and is not loaded from testdata/ by the shipped binary. Malformed captures retain their occurrence evidence but do not produce interpreted records.

pasture hook lifecycle raw is the raw ingestion escape hatch: a versioned payload entry for imports and migration; it is not the default path, it is not recommended for day-to-day use, and it does not define a second semantic model — raw payloads traverse the same lifecycle parse/bind/verifier/gate pipeline as native events and commit the same occurrence evidence kind.

Exact provider payloads are not interchangeable fixtures. Lifecycle activation is proof-gated per host contract: Claude has 8 enabled events, OpenCode has two user-reviewed OpenCode 1.18.10 callback records (session.created and tool.execute.before), and Codex has two Codex 0.146.0 command-hook records (SessionStart and PreToolUse). The remaining generated events are explicitly withheld until authentic capture and production-path proofs exist. See docs/privacy.md for the complete clearance boundary.

Releasing

Releases are cut with pasture-release and tagged automatically on merge.

# On a non-`release/*` branch (the `release/**` pattern is ruleset-protected):
pasture-release patch --no-tag      # bump plugin.json + CHANGELOG, commit (no tag)
# → open a PR → merge to main → release.yml tags vX.Y.Z, builds the static
#   binaries (linux/darwin × amd64/arm64), and publishes the GitHub Release.

The tag-on-merge workflow needs the release GitHub App secrets (RELEASE_APP_ID, RELEASE_APP_PRIVATE_KEY, with Contents: write). Full recipe (bump levels, --plugin marketplace sync, troubleshooting) in CONTRIBUTING.md; versioning policy (what is MAJOR/MINOR/PATCH per channel) in docs/VERSIONING.md.

Contributing

See CONTRIBUTING.md for how to evolve protocol concepts (adding constraints, roles, phases, etc.) and how to release. See docs/codegen.md for the codegen pipeline architecture.

Directories

Path Synopsis
Package artifact defines immutable, target-independent generated artifacts.
Package artifact defines immutable, target-independent generated artifacts.
cmd
pasture command
Command pasture is the local task-management and deterministic epoch-lifecycle CLI for the Pasture toolkit.
Command pasture is the local task-management and deterministic epoch-lifecycle CLI for the Pasture toolkit.
pasture-migrate-crash command
Command pasture-migrate-crash is a TEST-ONLY binary that drives the v2→v3 migration on a supplied SQLite file but aborts via os.Exit(137) (SIGKILL-equivalent) AFTER the v3 transaction has executed `INSERT INTO audit_schema_meta (version=3, ...)` but BEFORE `tx.Commit()`.
Command pasture-migrate-crash is a TEST-ONLY binary that drives the v2→v3 migration on a supplied SQLite file but aborts via os.Exit(137) (SIGKILL-equivalent) AFTER the v3 transaction has executed `INSERT INTO audit_schema_meta (version=3, ...)` but BEFORE `tx.Commit()`.
pasture-release command
Command pasture-release manages versioning and release coordination across the Pasture polyrepo (Nix, GitHub Releases, go install, skill channels).
Command pasture-release manages versioning and release coordination across the Pasture polyrepo (Nix, GitHub Releases, go install, skill channels).
pasture-test-agent command
Package main implements pasture-test-agent — a fake ACP-compatible agent binary used only in tests.
Package main implements pasture-test-agent — a fake ACP-compatible agent binary used only in tests.
pastured command
Command pastured is the Pasture daemon that hosts the DBOS durable engine.
Command pastured is the Pasture daemon that hosts the DBOS durable engine.
Package hooks holds the Claude Code plugin hooks shipped with pasture and their tests.
Package hooks holds the Claude Code plugin hooks shipped with pasture and their tests.
internal
acceptance/origin
Package origin defines the closed capture-origin provenance enum shared by the acceptance corpus (re-exported through package acceptance) and the lifecycle receipt/envelope origin carriers.
Package origin defines the closed capture-origin provenance enum shared by the acceptance corpus (re-exported through package acceptance) and the lifecycle receipt/envelope origin carriers.
acp
Package acp provides an ACP (Agent Client Protocol) client for connecting to ACP-compatible agents and receiving live session update streams.
Package acp provides an ACP (Agent Client Protocol) client for connecting to ACP-compatible agents and receiving live session update streams.
audit
Package audit provides the pluggable audit persistence interface and concrete implementations for the Pasture epoch workflow audit trail.
Package audit provides the pluggable audit persistence interface and concrete implementations for the Pasture epoch workflow audit trail.
codegen
Package codegen — agent definition generation.
Package codegen — agent definition generation.
codegen/capabilitylint
Package capabilitylint implements a narrow static-analysis rule for the typed capability escape hatch (github.com/dayvidpham/pasture/internal/codegen/ir): CapabilityID is a named string type (ir.CapabilityID string), not an opaque struct like ir.SemanticOperationID/ir.SkillID/ir.EffectID, so Go's own untyped-literal-assignability rule lets a raw string literal compile successfully as a DefineCapability/MustDefineCapability identity argument.
Package capabilitylint implements a narrow static-analysis rule for the typed capability escape hatch (github.com/dayvidpham/pasture/internal/codegen/ir): CapabilityID is a named string type (ir.CapabilityID string), not an opaque struct like ir.SemanticOperationID/ir.SkillID/ir.EffectID, so Go's own untyped-literal-assignability rule lets a raw string literal compile successfully as a DefineCapability/MustDefineCapability identity argument.
codegen/ir
Package ir defines Pasture's portable, harness-neutral document and orchestration intermediate representation.
Package ir defines Pasture's portable, harness-neutral document and orchestration intermediate representation.
codegen/scan
Package scan implements Pasture's read-only Goldmark inventory and classification of native harness syntax across canonical Markdown source roots (github.com/dayvidpham/pasture issue #47).
Package scan implements Pasture's read-only Goldmark inventory and classification of native harness syntax across canonical Markdown source roots (github.com/dayvidpham/pasture issue #47).
config
Package config provides configuration structs and resolution logic for pasture daemons and CLI tools.
Package config provides configuration structs and resolution logic for pasture daemons and CLI tools.
dbconn
Package dbconn centralizes how every pasture component opens a modernc SQLite handle on the shared pasture.db file.
Package dbconn centralizes how every pasture component opens a modernc SQLite handle on the shared pasture.db file.
effects
Package effects defines Pasture's typed process, Git, and filesystem workflow effect algebra: opaque, constructor-validated operands and closed effect sums that make operational semantics explicit instead of hiding them in shell-fragment strings.
Package effects defines Pasture's typed process, Git, and filesystem workflow effect algebra: opaque, constructor-validated operands and closed effect sums that make operational semantics explicit instead of hiding them in shell-fragment strings.
engine
Package engine is the durable-execution adapter for the pasture epoch lifecycle.
Package engine is the durable-execution adapter for the pasture epoch lifecycle.
errors
Package errors provides structured, actionable error reporting for the pasture system.
Package errors provides structured, actionable error reporting for the pasture system.
formatters
Package formatters — events.go
Package formatters — events.go
handlers
Package handlers — hook.go
Package handlers — hook.go
hooks
Package hooks provides a hook event dispatch system for the pasture protocol.
Package hooks provides a hook event dispatch system for the pasture protocol.
install/activation
Package activation defines the versioned native-activation contract that binds each generated component (harness/extension identity plus its published artifact bundle and runtime contract) to exactly one closed activation strategy.
Package activation defines the versioned native-activation contract that binds each generated component (harness/extension identity plus its published artifact bundle and runtime contract) to exactly one closed activation strategy.
install/apply
Package apply owns the typed request, result, error, and activator contracts plus concrete activation-strategy adapters.
Package apply owns the typed request, result, error, and activator contracts plus concrete activation-strategy adapters.
install/cell
Package cell defines the canonical harness/extension coordinate space shared by the Pasture installer and activation contract.
Package cell defines the canonical harness/extension coordinate space shared by the Pasture installer and activation contract.
install/export
Package export builds the immutable per-cell component archives and the component-set document that an aggregate release producer consumes.
Package export builds the immutable per-cell component archives and the component-set document that an aggregate release producer consumes.
install/fsatomic
Package fsatomic performs symlink-safe atomic file replacement for the installer's preference and confirmed-state files.
Package fsatomic performs symlink-safe atomic file replacement for the installer's preference and confirmed-state files.
install/host/claudecode
Package claudecode binds the immutable Claude Code target to the reviewed global native-manager contract and implements its ownership-safe controller.
Package claudecode binds the immutable Claude Code target to the reviewed global native-manager contract and implements its ownership-safe controller.
install/host/codex
Package codex binds the immutable Codex target to its reviewed global filesystem layout and factual pending-trust reporting.
Package codex binds the immutable Codex target to its reviewed global filesystem layout and factual pending-trust reporting.
install/host/opencode
Package opencode binds the generated OpenCode target to its documented global direct-discovery layout.
Package opencode binds the generated OpenCode target to its documented global direct-discovery layout.
install/inventory
Package inventory provides the global-installation view over the shared registry.
Package inventory provides the global-installation view over the shared registry.
install/preferences
Package preferences models the persisted installer choices under the existing Pasture config root (~/.config/pasture/config.yaml, install: section).
Package preferences models the persisted installer choices under the existing Pasture config root (~/.config/pasture/config.yaml, install: section).
install/registry
Package registry owns the first-shipped installation registry shared by global and project-local installation.
Package registry owns the first-shipped installation registry shared by global and project-local installation.
install/releasecatalog
Package releasecatalog selects and completely verifies immutable aggregate GitHub Releases.
Package releasecatalog selects and completely verifies immutable aggregate GitHub Releases.
install/selection
Package selection defines the transient effective-selection document that the installer TUI and Home Manager both hand to the apply engine.
Package selection defines the transient effective-selection document that the installer TUI and Home Manager both hand to the apply engine.
install/service
Package service is the application boundary shared by installer frontends.
Package service is the application boundary shared by installer frontends.
inventory
Code generated by codegen.
Code generated by codegen.
lifecycle/backend
Package backend maps a legalized consultation into canonical receipt evidence and the typed response expected by the native host.
Package backend maps a legalized consultation into canonical receipt evidence and the typed response expected by the native host.
lifecycle/context
Package context builds the Pasture-side context-disclosure projection: a bounded, canonical summary of committed lifecycle records, per-host chain summaries derived from committed links, and the metamodel coordinates present in the interpreted evidence.
Package context builds the Pasture-side context-disclosure projection: a bounded, canonical summary of committed lifecycle records, per-host chain summaries derived from committed links, and the metamodel coordinates present in the interpreted evidence.
lifecycle/frontend
Package frontend is the single generic lifecycle frontend skeleton.
Package frontend is the single generic lifecycle frontend skeleton.
lifecycle/frontend/claude
Package claude supplies the pinned Claude capture vocabulary as host data for the generic lifecycle frontend.
Package claude supplies the pinned Claude capture vocabulary as host data for the generic lifecycle frontend.
lifecycle/frontend/codex
Package codex supplies the pinned Codex 0.146.0 command-hook vocabulary as host data for the generic lifecycle frontend.
Package codex supplies the pinned Codex 0.146.0 command-hook vocabulary as host data for the generic lifecycle frontend.
lifecycle/frontend/opencode
Package opencode supplies the pinned OpenCode callback vocabulary as host data for the generic lifecycle frontend.
Package opencode supplies the pinned OpenCode callback vocabulary as host data for the generic lifecycle frontend.
lifecycle/gate
Package gate is the Pasture-side normative write gate: the closed set of durable lifecycle write classes, a constructor-owned Warrant, and Legalize as the sole warrant issuer.
Package gate is the Pasture-side normative write gate: the closed set of durable lifecycle write classes, a constructor-owned Warrant, and Legalize as the sole warrant issuer.
lifecycle/ingress/claude
Package claude captures Claude Code hook payloads without allowing host semantics to leak into target-neutral lifecycle packages.
Package claude captures Claude Code hook payloads without allowing host semantics to leak into target-neutral lifecycle packages.
lifecycle/ingress/codex
Package codex captures exact command-hook stdin bytes from the pinned Codex 0.146.0 CLI lifecycle contract.
Package codex captures exact command-hook stdin bytes from the pinned Codex 0.146.0 CLI lifecycle contract.
lifecycle/ingress/opencode
Package opencode captures callback objects from the pinned OpenCode plugin contract without treating the serialized object as a native wire stream.
Package opencode captures callback objects from the pinned OpenCode plugin contract without treating the serialized object as a native wire stream.
lifecycle/legalize
Package legalize classifies verified lifecycle events into pure semantic terminals.
Package legalize classifies verified lifecycle events into pure semantic terminals.
lifecycle/lineage
Package lineage derives read-side occurrence lineage edges from committed Level-2 lifecycle evidence.
Package lineage derives read-side occurrence lineage edges from committed Level-2 lifecycle evidence.
lifecycle/metamodel
Package metamodel is the generated, content-addressed lifecycle interpretation vocabulary (D1).
Package metamodel is the generated, content-addressed lifecycle interpretation vocabulary (D1).
lifecycle/middleend
Package middleend derives provider-independent lifecycle effects and host responses from verified lifecycle events.
Package middleend derives provider-independent lifecycle effects and host responses from verified lifecycle events.
lifecycle/model
Package model defines the target-neutral lifecycle journal contract.
Package model defines the target-neutral lifecycle journal contract.
lifecycle/nativeresponse
Package nativeresponse is the per-target emission backend for the lifecycle pipeline: it maps the provider-neutral, constructor-built backend.HostResponse into the exact native continuation bytes a host reads from a command-hook's standard output.
Package nativeresponse is the per-target emission backend for the lifecycle pipeline: it maps the provider-neutral, constructor-built backend.HostResponse into the exact native continuation bytes a host reads from a command-hook's standard output.
lifecycle/registration
Code generated by hostcontractgen.
Code generated by hostcontractgen.
lifecycle/waist
Package waist defines the target-independent lifecycle values between native harness frontends and Pasture's protocol stages.
Package waist defines the target-independent lifecycle values between native harness frontends and Pasture's protocol stages.
provadapter
Package provadapter is Pasture's thin low-level adapter over the released Provenance global-journal surface (github.com/dayvidpham/provenance at dayvidpham/provenance#4/#5/#6, module pinned to main@ecc7663).
Package provadapter is Pasture's thin low-level adapter over the released Provenance global-journal surface (github.com/dayvidpham/provenance at dayvidpham/provenance#4/#5/#6, module pinned to main@ecc7663).
release
Package release provides version management, changelog generation, git helpers, and plugin registry operations for pasture-release.
Package release provides version management, changelog generation, git helpers, and plugin registry operations for pasture-release.
runtime
Package runtime defines Pasture's opaque, version-bounded runtime contracts: the only authority allowed to turn a protocol semantic operation, effect, or typed capability into native runtime behavior for a specific harness at a specific host version.
Package runtime defines Pasture's opaque, version-bounded runtime contracts: the only authority allowed to turn a protocol semantic operation, effect, or typed capability into native runtime behavior for a specific harness at a specific host version.
target/claudecode
Package claudecode publishes the pinned Claude Code native-output target descriptor: a stable target/component identity, one immutable, content- addressed artifact.Bundle per installable component (skills, agents, hooks), and the RuntimeContractID the target was compiled under.
Package claudecode publishes the pinned Claude Code native-output target descriptor: a stable target/component identity, one immutable, content- addressed artifact.Bundle per installable component (skills, agents, hooks), and the RuntimeContractID the target was compiled under.
target/codex
Package codex publishes the immutable Codex target descriptor consumed by installation.
Package codex publishes the immutable Codex target descriptor consumed by installation.
target/opencode
Package opencode publishes the immutable, independently installable OpenCode skills, agents, and lifecycle-hook artifacts.
Package opencode publishes the immutable, independently installable OpenCode skills, agents, and lifecycle-hook artifacts.
tasks
Package tasks — open_ro.go
Package tasks — open_ro.go
testutil
Package testutil provides shared testing utilities for the pasture test suite.
Package testutil provides shared testing utilities for the pasture test suite.
timeouts
Package timeouts owns the ordered timeout hierarchy shared by SQLite, lifecycle ingress, and slice workflows.
Package timeouts owns the ordered timeout hierarchy shared by SQLite, lifecycle ingress, and slice workflows.
types
Package types defines internal enums and value types for the Pasture daemon and CLI.
Package types defines internal enums and value types for the Pasture daemon and CLI.
pkg
protocol
Package protocol defines the public convergence types for the Pasture multi-agent orchestration protocol.
Package protocol defines the public convergence types for the Pasture multi-agent orchestration protocol.
protocol/portable
Package portable defines Pasture's portable cross-boundary identity types.
Package portable defines Pasture's portable cross-boundary identity types.
tools
claudecode-assets command
Command claudecode-assets regenerates the embedded Claude Code plugin assets (internal/target/claudecode/assets/pasture-skills and .../assets/pasture-agents) from the live codegen pipeline.
Command claudecode-assets regenerates the embedded Claude Code plugin assets (internal/target/claudecode/assets/pasture-skills and .../assets/pasture-agents) from the live codegen pipeline.
codegen command
Command codegen is the generation entry point for the Pasture protocol.
Command codegen is the generation entry point for the Pasture protocol.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL