# Get automation Source: https://docs.eigenpal.com/api-reference/automations/get-automation /api-reference/openapi.json get /v1/automations/{id} Get one runnable workflow or agent automation by id or typed alias. # Get automation triggers Source: https://docs.eigenpal.com/api-reference/automations/get-automation-triggers /api-reference/openapi.json get /v1/automations/{id}/triggers Read trigger state for a workflow or agent automation. Trigger mutation is not public v1. # List automation versions Source: https://docs.eigenpal.com/api-reference/automations/list-automation-versions /api-reference/openapi.json get /v1/automations/{id}/versions List versions for a workflow or agent automation through one read-only route. # List automations Source: https://docs.eigenpal.com/api-reference/automations/list-automations /api-reference/openapi.json get /v1/automations Returns workflows and agents through one runnable automation collection. Use `type` to narrow to workflows or agents, and `search` to find automations by slug, name, or description. # Sync automation from latest Git release Source: https://docs.eigenpal.com/api-reference/automations/sync-automation-from-latest-git-release /api-reference/openapi.json post /v1/automations/{id}/sync Reconciles automation registry metadata and trigger projections from the latest Git source release. This operation is idempotent for unchanged source state: repeated calls against the same latest release leave the same automation registry state and may repeat the same warnings. Requires a Bearer API token for the organization and a user-backed API key. It does not publish source; it reads the already-published latest release manifest. Versioned targets are rejected with 400, missing organization/source/release/manifest state returns 404, invalid manifests return 400, and provider or persistence failures return 5xx. # Cancel experiment Source: https://docs.eigenpal.com/api-reference/evaluation/cancel-experiment /api-reference/openapi.json post /v1/automations/{id}/experiments/{experimentId}/cancel Request cancellation for an experiment batch. Already-completed runs remain recorded; queued or running work is cancelled when possible. # Create automation experiment with NDJSON progress Source: https://docs.eigenpal.com/api-reference/evaluation/create-automation-experiment-with-ndjson-progress /api-reference/openapi.json post /v1/automations/{id}/experiments/stream Starts a batch eval experiment for workflow or agent automations and streams per-run completion events as NDJSON. # Create dataset example Source: https://docs.eigenpal.com/api-reference/evaluation/create-dataset-example /api-reference/openapi.json post /v1/automations/{id}/examples Create one dataset example from JSON fields. Use dataset import for archive-based uploads and file-bearing examples. # Create experiment Source: https://docs.eigenpal.com/api-reference/evaluation/create-experiment /api-reference/openapi.json post /v1/automations/{id}/experiments Start an asynchronous experiment batch for one automation. Omit `examples` to run the full dataset, or pass specific example ids to run a subset. # Delete dataset example Source: https://docs.eigenpal.com/api-reference/evaluation/delete-dataset-example /api-reference/openapi.json delete /v1/automations/{id}/examples/{exampleId} Delete one dataset example from the automation dataset. This removes the example from future experiments. # Delete expected file Source: https://docs.eigenpal.com/api-reference/evaluation/delete-expected-file /api-reference/openapi.json delete /v1/automations/{id}/examples/{exampleId}/expected/{path} Delete one file from an automation dataset example expected folder. # Delete input file Source: https://docs.eigenpal.com/api-reference/evaluation/delete-input-file /api-reference/openapi.json delete /v1/automations/{id}/examples/{exampleId}/input/{path} Delete one file from an automation dataset example input folder. # Download expected dataset file Source: https://docs.eigenpal.com/api-reference/evaluation/download-expected-dataset-file /api-reference/openapi.json get /v1/automations/{id}/examples/{exampleId}/expected/{path} Download one expected file attached to an automation dataset example. # Download input file Source: https://docs.eigenpal.com/api-reference/evaluation/download-input-file /api-reference/openapi.json get /v1/automations/{id}/examples/{exampleId}/input/{path} Download one file from an automation dataset example input folder. # Export all experiment eval results Source: https://docs.eigenpal.com/api-reference/evaluation/export-all-experiment-eval-results /api-reference/openapi.json get /v1/automations/{id}/experiments/export Download every eval result row for an automation as CSV or JSON. # Export automation dataset Source: https://docs.eigenpal.com/api-reference/evaluation/export-automation-dataset /api-reference/openapi.json get /v1/automations/{id}/dataset/export Download the automation dataset as a ZIP archive. The archive uses the examples//input and examples//expected folder convention, so it can be re-imported into another automation or environment. Cloud deployments may redirect large archives to a short-lived storage URL. # Export experiment eval results Source: https://docs.eigenpal.com/api-reference/evaluation/export-experiment-eval-results /api-reference/openapi.json get /v1/automations/{id}/experiments/{experimentId}/export Download eval result rows for a single experiment batch as CSV or JSON. # Get dataset example Source: https://docs.eigenpal.com/api-reference/evaluation/get-dataset-example /api-reference/openapi.json get /v1/automations/{id}/examples/{exampleId} Fetch one dataset example, including input, expected output, expected files, metadata, and overrides. # Get evaluators Source: https://docs.eigenpal.com/api-reference/evaluation/get-evaluators /api-reference/openapi.json get /v1/automations/{id}/evaluators Fetch the evaluator configuration for an automation. Evaluators produce automated `score` results, which are separate from human review verdicts. # Get experiment Source: https://docs.eigenpal.com/api-reference/evaluation/get-experiment /api-reference/openapi.json get /v1/automations/{id}/experiments/{experimentId} Fetch one experiment batch with its run summaries and evaluator results grouped by run id. # Import automation dataset Source: https://docs.eigenpal.com/api-reference/evaluation/import-automation-dataset /api-reference/openapi.json post /v1/automations/{id}/dataset/import Import a dataset ZIP archive using the examples//input and examples//expected folder convention. Use `mode=append` for additive imports or `mode=replace` to replace the dataset. # List dataset examples Source: https://docs.eigenpal.com/api-reference/evaluation/list-dataset-examples /api-reference/openapi.json get /v1/automations/{id}/examples List dataset examples for one automation. Examples contain input, expected output, expected files, metadata, and optional overrides used by evaluation runs. # List expected files Source: https://docs.eigenpal.com/api-reference/evaluation/list-expected-files /api-reference/openapi.json get /v1/automations/{id}/examples/{exampleId}/expected List files stored under the expected folder for one automation dataset example. # List experiments Source: https://docs.eigenpal.com/api-reference/evaluation/list-experiments /api-reference/openapi.json get /v1/automations/{id}/experiments List experiment batches for one automation. Each experiment runs selected dataset examples and records automated evaluator scores. # List input files Source: https://docs.eigenpal.com/api-reference/evaluation/list-input-files /api-reference/openapi.json get /v1/automations/{id}/examples/{exampleId}/input List files stored under the input folder for one automation dataset example. # List run evaluator scores Source: https://docs.eigenpal.com/api-reference/evaluation/list-run-evaluator-scores /api-reference/openapi.json get /v1/runs/{id}/scores List automated evaluator results for one run. Use `score` for evaluator output and run reviews for human verdicts. # Rename expected file Source: https://docs.eigenpal.com/api-reference/evaluation/rename-expected-file /api-reference/openapi.json patch /v1/automations/{id}/examples/{exampleId}/expected/{path} Rename one expected file attached to an automation dataset example. The parent folder is preserved. # Rename input file Source: https://docs.eigenpal.com/api-reference/evaluation/rename-input-file /api-reference/openapi.json patch /v1/automations/{id}/examples/{exampleId}/input/{path} Rename one input file attached to an automation dataset example. The parent folder is preserved. # Replace evaluators Source: https://docs.eigenpal.com/api-reference/evaluation/replace-evaluators /api-reference/openapi.json put /v1/automations/{id}/evaluators Replace the evaluator YAML for an automation. The submitted YAML is validated before it becomes the source for future experiment scores. # Resolve experiment by id Source: https://docs.eigenpal.com/api-reference/evaluation/resolve-experiment-by-id /api-reference/openapi.json get /v1/experiments/{experimentId} Returns the owning automation for an experiment batch id. Used when callers only know the experiment id. # Run dataset example Source: https://docs.eigenpal.com/api-reference/evaluation/run-dataset-example /api-reference/openapi.json post /v1/automations/{id}/examples/{exampleId}/run Start an asynchronous run using the input from one dataset example. Poll `GET /api/v1/runs/{id}` for completion and use run scores or review endpoints to review the result. # Update dataset example Source: https://docs.eigenpal.com/api-reference/evaluation/update-dataset-example /api-reference/openapi.json patch /v1/automations/{id}/examples/{exampleId} Partially update a dataset example. Omitted fields are preserved; pass null for nullable fields to clear them. # Upload expected files Source: https://docs.eigenpal.com/api-reference/evaluation/upload-expected-files /api-reference/openapi.json post /v1/automations/{id}/examples/{exampleId}/expected Upload one or more files into the expected folder for an automation dataset example. Use `$file` references such as `expected/result.pdf` from expected JSON to compare file outputs. # Upload input files Source: https://docs.eigenpal.com/api-reference/evaluation/upload-input-files /api-reference/openapi.json post /v1/automations/{id}/examples/{exampleId}/input Upload one or more files into the input folder for an automation dataset example. Use `$file` references such as `input/invoice.pdf` from the example input JSON to consume them. # Abort file upload Source: https://docs.eigenpal.com/api-reference/files/abort-file-upload /api-reference/openapi.json delete /v1/files/uploads/{uploadId} Abort a pending storage-direct upload and remove its pending object. # Complete file upload Source: https://docs.eigenpal.com/api-reference/files/complete-file-upload /api-reference/openapi.json post /v1/files/uploads/{uploadId}/complete Verify a storage-direct pending object and promote it into a reusable file. Safe to retry. # Delete file Source: https://docs.eigenpal.com/api-reference/files/delete-file /api-reference/openapi.json delete /v1/files/{id} Delete a reusable uploaded file. Historical run and dataset snapshots are separate artifacts. # Download file content Source: https://docs.eigenpal.com/api-reference/files/download-file-content /api-reference/openapi.json get /v1/files/{id}/content Download bytes for a reusable uploaded file. Direct-enabled deployments redirect responses above their configured body limit to a short-lived signed storage URL; multipart-only/on-prem deployments stream through the API. # Get file metadata Source: https://docs.eigenpal.com/api-reference/files/get-file-metadata /api-reference/openapi.json get /v1/files/{id} Get metadata for a reusable uploaded file. # Prepare file upload Source: https://docs.eigenpal.com/api-reference/files/prepare-file-upload /api-reference/openapi.json post /v1/files/uploads Negotiate multipart when the file fits the deployment body limit (or direct storage is disabled), otherwise return a short-lived signed storage PUT. The response transport is authoritative; clients must not guess from file size alone. # Upload file Source: https://docs.eigenpal.com/api-reference/files/upload-file /api-reference/openapi.json post /v1/files Upload a reusable file that can later be referenced by run inputs or dataset examples. # Check API key identity Source: https://docs.eigenpal.com/api-reference/metadata/check-api-key-identity /api-reference/openapi.json get /v1/auth/check Return the tenant, user, API key, and scope represented by the current API key. # Add corrected file Source: https://docs.eigenpal.com/api-reference/reviews/add-corrected-file /api-reference/openapi.json post /v1/runs/{id}/reviews/expected Attach one corrected file to a run review. Send multipart/form-data with `file` and optional `name` to upload a local file, or JSON with `outputFileName` and optional `expectedName` to copy an existing run output file. # Clear run review Source: https://docs.eigenpal.com/api-reference/reviews/clear-run-review /api-reference/openapi.json delete /v1/runs/{id}/reviews Deletes review metadata, corrections, and corrected files for the run. # Delete corrected artifact file Source: https://docs.eigenpal.com/api-reference/reviews/delete-corrected-artifact-file /api-reference/openapi.json delete /v1/runs/{id}/reviews/expected/{filename} Deletes one corrected artifact file attached to the run review. # Download corrected artifact file Source: https://docs.eigenpal.com/api-reference/reviews/download-corrected-artifact-file /api-reference/openapi.json get /v1/runs/{id}/reviews/expected/{filename} Downloads one corrected artifact file attached to the run review. Use the `filename` returned by the corrected-output collection endpoint. # Get automation review health Source: https://docs.eigenpal.com/api-reference/reviews/get-automation-review-health /api-reference/openapi.json get /v1/automations/{id}/reviews/health Aggregates reviewed correctness, review coverage, bucketed counts, and rolling-window confidence for one automation. Prefer this endpoint for single-automation monitoring dashboards. # Get run review Source: https://docs.eigenpal.com/api-reference/reviews/get-run-review /api-reference/openapi.json get /v1/runs/{id}/reviews Returns review metadata and corrections for a run. Corrected files are listed at GET /runs/{id}/reviews/expected; embed review + expected artifacts with GET /runs/{id}?expand=execution. # List corrected files Source: https://docs.eigenpal.com/api-reference/reviews/list-corrected-files /api-reference/openapi.json get /v1/runs/{id}/reviews/expected Returns corrected artifact files attached to the run review. Review metadata and corrected JSON output live at GET /runs/{id}/reviews. # Promote run to example Source: https://docs.eigenpal.com/api-reference/reviews/promote-run-to-example /api-reference/openapi.json post /v1/runs/{id}/promote Turn a reviewed run into a dataset example. The new example uses the run input and any corrected output/files stored through the review endpoints. # Rename corrected artifact file Source: https://docs.eigenpal.com/api-reference/reviews/rename-corrected-artifact-file /api-reference/openapi.json patch /v1/runs/{id}/reviews/expected/{filename} Renames one corrected artifact file attached to the run review. # Update run review Source: https://docs.eigenpal.com/api-reference/reviews/update-run-review /api-reference/openapi.json put /v1/runs/{id}/reviews Create or replace review metadata for a run. # Cancel run Source: https://docs.eigenpal.com/api-reference/runs/cancel-run /api-reference/openapi.json post /v1/runs/{id}/cancel Cancel a queued run or request cancellation of an in-flight run. # Download run artifact Source: https://docs.eigenpal.com/api-reference/runs/download-run-artifact /api-reference/openapi.json get /v1/runs/{id}/artifacts/{path} Download one artifact by path. Cloud deployments may redirect to a short-lived storage URL for large files. # Get a run Source: https://docs.eigenpal.com/api-reference/runs/get-a-run /api-reference/openapi.json get /v1/runs/{id} Fetch one run by id. By default this returns core metadata plus terminal output/error fields. Pass `?expand=input,usage,execution,debug` to include detailed sub-objects; `expand=execution` is also where embedded review and expected artifacts appear. # Get run trace Source: https://docs.eigenpal.com/api-reference/runs/get-run-trace /api-reference/openapi.json get /v1/runs/{id}/trace Return low-level execution trace events for debugging one run. Workflow runs expose observability phases or step records; agent runs expose parsed trace.jsonl events. The shape is intentionally extensible, but common fields are documented. # Get run usage Source: https://docs.eigenpal.com/api-reference/runs/get-run-usage /api-reference/openapi.json get /v1/runs/{id}/usage Get token, credit, duration, and execution usage for a run. # List run artifacts Source: https://docs.eigenpal.com/api-reference/runs/list-run-artifacts /api-reference/openapi.json get /v1/runs/{id}/artifacts Returns a JSON list of downloadable artifact paths for a run. Pass `zip=1` to switch the response to a ZIP download containing output files. # List run events Source: https://docs.eigenpal.com/api-reference/runs/list-run-events /api-reference/openapi.json get /v1/runs/{id}/events List a stable chronological lifecycle timeline for a run. # List run steps Source: https://docs.eigenpal.com/api-reference/runs/list-run-steps /api-reference/openapi.json get /v1/runs/{id}/steps List workflow steps or an agent-compatible execution step summary for a run. # List runs Source: https://docs.eigenpal.com/api-reference/runs/list-runs /api-reference/openapi.json get /v1/runs List workflow and agent runs with cursor pagination. # Retry run Source: https://docs.eigenpal.com/api-reference/runs/retry-run /api-reference/openapi.json post /v1/runs/{id}/rerun Start a new run using the source run input. By default the retry uses the latest automation version; pass `version=original` to pin the same source version as the original run. # Start a run Source: https://docs.eigenpal.com/api-reference/runs/start-a-run /api-reference/openapi.json post /v1/runs Start a run. Send JSON or multipart/form-data. # Webhook receiver reference Source: https://docs.eigenpal.com/api-reference/webhooks Receive, verify, and process EigenPal webhook events. EigenPal sends webhook events as HTTPS `POST` requests with a JSON body. This page defines the receiver contract, event schemas, signature verification, and delivery behavior. For dashboard setup and testing, see [Receive run events with webhooks](/guides/outbound-webhooks). ## Request contract Your receiver must: 1. Accept HTTPS `POST` requests. 2. Read and retain the exact request body bytes. 3. Verify the timestamp and HMAC signature before parsing or processing the event. 4. Deduplicate events by their stable `id`. 5. Durably accept the event and return a `2xx` response quickly. 6. Process expensive work asynchronously. Requests use `Content-Type: application/json` and include these headers: The stable event ID. It matches the `id` field in the body and is included in the signed message. The Unix timestamp, in seconds, when the delivery attempt was signed. The HMAC-SHA256 signature, formatted as `v1,<hex digest>`. Identifies the EigenPal webhook sender and release. Any custom headers configured for the endpoint are included as well. ## Event envelope Every request has a versioned JSON envelope: ```json theme={null} { "id": "whev_01J...", "type": "run.status_changed", "apiVersion": "2026-07-01", "createdAt": "2026-07-13T12:00:00.000Z", "test": false, "data": { "run": { "id": "exec_01J...", "automationId": "aut_01J...", "type": "workflow", "status": "completed", "triggerType": "api", "createdAt": "2026-07-13T11:59:30.000Z", "startedAt": "2026-07-13T11:59:31.000Z", "completedAt": "2026-07-13T12:00:00.000Z", "output": { "invoiceNumber": "INV-1042" } }, "previousStatus": "running", "currentStatus": "completed" } } ``` ### Envelope fields Stable event ID with a `whev_` prefix. Use this value as the idempotency key. Identifies the event schema. Version of the webhook wire contract. The current version is `2026-07-01`. ISO 8601 timestamp for when the event was created. `true` for events created with **Send test**; otherwise `false`. When `test` is `true`, `data.run` contains synthetic sample data. Its run and automation IDs do not identify persisted resources. Verify and acknowledge the request normally, but do not fetch or process the sample as a real run. Event-specific payload. ### Run fields Run ID. Automation that owns the run. Runtime used by the automation. Current persisted run status. How the run was started, such as `api`, `manual`, `email`, or `cron`. ISO 8601 timestamp for when the run was created. ISO 8601 timestamp for when execution started, or `null`. ISO 8601 timestamp for when the run reached a terminal status, or `null`. Public run output, when available and small enough to include. `true` when `output` was removed to keep the complete event within the payload limit. Retrieve the canonical result with [`GET /api/v1/runs/{id}`](/api-reference/runs/get-a-run). ## Event types ### `run.created` Sent when a top-level workflow or agent run is durably created. `data.run` contains the initial run snapshot. Most workflow runs are already `pending` when this event is sent; agent runs can initially be `created` while preparation completes. This event does not include `previousStatus` or `currentStatus`. Test deliveries use the same schema with synthetic run data. ### `run.status_changed` Sent whenever a top-level run moves from one persisted status to another. Test deliveries simulate this transition with synthetic run data. Status the run moved from. Status the run moved to. This matches `data.run.status`. Runs created internally by an `action.invoke-workflow` step and evaluation runs do not emit webhook events. ### Run statuses * `created` — The run exists and is being prepared before it enters the queue. * `pending` — The run is queued and eligible for a worker. * `running` — A worker is actively executing the run. * `waiting` — The workflow is paused for a human, tool, or step continuation. Not all run types use this status. * `finalizing` — Primary execution has finished, but outputs or other post-run work are still being saved. * `completed` — The run finished successfully. Terminal. * `failed` — The run ended because of an error or timeout. Terminal. * `cancelled` — The run was cancelled before completion. Terminal. * `rejected` — The run was refused before it started, for example because of an inbound email policy. Terminal. `queued` is an execution phase, not a run status. The externally visible status for a run waiting in the queue is `pending`. ## Verify webhook signatures Do not process an event until its signature and timestamp have been verified. EigenPal signs this message with the endpoint's `whsec_...` secret: ```text theme={null} .. ``` The signature is an HMAC and is **verified**, not decrypted. The following Node.js example accepts a five-minute timestamp tolerance and compares the digests in constant time: ```ts theme={null} import { createHmac, timingSafeEqual } from 'node:crypto'; function verifyEigenpalWebhook(rawBody: Buffer, headers: Headers, secret: string): boolean { const eventId = headers.get('webhook-id'); const timestamp = headers.get('webhook-timestamp'); const signature = headers.get('webhook-signature'); if (!eventId || !timestamp || !signature?.startsWith('v1,')) return false; const ageSeconds = Math.abs(Date.now() / 1000 - Number(timestamp)); if (!Number.isFinite(ageSeconds) || ageSeconds > 300) return false; const expected = createHmac('sha256', secret) .update(`${eventId}.${timestamp}.`) .update(rawBody) .digest('hex'); const received = signature.slice(3); if (!/^[a-f0-9]+$/i.test(received)) return false; const expectedBytes = Buffer.from(expected, 'hex'); const receivedBytes = Buffer.from(received, 'hex'); if (expectedBytes.length !== receivedBytes.length) return false; return timingSafeEqual(expectedBytes, receivedBytes); } ``` Use the raw bytes supplied by your framework. Parsing JSON and serializing it again can change whitespace or key ordering and invalidate the signature. Parse the body only after verification succeeds. Reject missing, malformed, or stale signature headers. Store the signing secret outside source control. If the secret is lost or exposed, disable or delete the endpoint and create a replacement. ## Delivery and retries Delivery is asynchronous and **at least once**. Duplicate events are expected, and events are not guaranteed to arrive in order. * Deduplicate by the event `id`. * Use `previousStatus`, `currentStatus`, and `createdAt` instead of inferring lifecycle order from delivery order. * Return `2xx` as soon as the event is durably accepted. * Process expensive work after acknowledging the request. Any `2xx` response marks a delivery successful. EigenPal retries network failures, timeouts, `408`, `425`, `429`, and `5xx` responses with bounded backoff. Other `4xx` responses end automatic delivery. A valid `Retry-After` response header can delay the next retry within EigenPal's configured limit. Manual redelivery preserves the event ID and payload, so normal deduplication still applies. # Changelog Source: https://docs.eigenpal.com/changelog Production release history for the EigenPal platform. EigenPal ships on a unified platform version. Each production release updates Studio, the public API, infrastructure, and (when applicable) the CLI and SDKs together. ## 0.11.2 (2026-08-07) * Internal improvements. *** ## 0.11.1 (2026-08-07) ### Platform (Studio) * Document and image processing now runs on updated imaging components that carry upstream security fixes. ### Infrastructure & processing * Document and image processing now runs on updated imaging components that carry upstream security fixes. *** ## 0.11.0 (2026-08-06) ### Platform (Studio) * Workflow builder chat now works with reasoning models served through a self-hosted `openai-compatible` gateway, instead of failing with a "temperature is not supported" error. On models that only accept their own default temperature setting, replies can vary between attempts on the same question. * Canonical API hostnames now consistently expose only supported API and operational routes, returning a clear 404 for unsupported discovery paths. * Agent Builder attachments now negotiate multipart or storage-direct transfer, so large PDFs and archives can reach the active sandbox without crossing cloud payload limits. Large downloads use the same secure dual path. Self-hosted operators can set `deployment.multipartMaxBytes` in `eigenpal.config.yaml`; the supplied on-prem deployments keep files on multipart and streamed downloads by default. * Canonical API hostnames now serve API routes and discovery endpoints reliably without Studio sign-in handling intercepting requests. ### Public API * Upload and download reusable files up to 100 MiB through one negotiated API: files within the deployment body limit use multipart, while larger cloud transfers use verified storage-direct uploads and short-lived authenticated download links. Retry-safe temporary run and Builder files expire after 24 hours. Existing multipart routes and `studio.eigenpal.com/api/v1` remain compatible, and new integrations can use `api.eigenpal.com/v1`. ### CLI * The CLI now uses `api.eigenpal.com` as the default cloud API origin and automatically pre-uploads run files that exceed the multipart request limit. Self-hosted users can keep custom API origins and set `EIGENPAL_MULTIPART_MAX_BYTES` to their proxy limit, or `none` to keep all files on multipart. ### SDK * The TypeScript and Python SDKs now transparently upload large run inputs without crossing cloud request limits, follow secure storage-direct downloads, and default cloud calls to `api.eigenpal.com`. Set `multipartMaxBytes` / `multipart_max_bytes`, or `EIGENPAL_MULTIPART_MAX_BYTES`, to match a self-hosted proxy; use `null` / `None` to keep every run file on multipart. Explicit `files.upload` files remain reusable until deleted. * TypeScript file uploads now follow the server-negotiated multipart endpoint, improving compatibility across hosted and self-managed route layouts. [View full release notes →](/releases/0.11.0) *** ## 0.10.56 (2026-08-05) ### Platform (Studio) * Agent Builder training chat now shows Pierre file diffs for edit/write, a Pierre syntax-highlighted file view for Read file, secure request-secret password cards (encrypted into the draft; the agent only sees configured/skipped), and a quiet timeline note when you release an agent version from the dashboard. ### Infrastructure & processing * Production releases that do not change document processing finish faster by reusing verified OCR provider checks from the last successful release, while still re-checking providers when processing code or infrastructure changes. *** ## 0.10.55 (2026-08-05) ### Platform (Studio) * Agent Builder now resumes your latest draft, clearly distinguishes unsaved edits from saved changes that are not live, and provides direct Save and Release actions. Releases show the current and next version and let you choose a patch, minor, or major update. Dashboard save and release actions remain available to the builder as private context, so it can accurately answer what is live without guessing. Starting a separate draft is explicit, attachments remain available when beginning a conversation, stopped sandboxes can be restarted without losing the draft, and test runs reliably receive JSON-only inputs. ### Public API * Agent Builder releases now complete live automation synchronization reliably, so a successful release is immediately available without a separate recovery step. ### Infrastructure & processing * OCR and LLM model catalogs keep loading when the service adds new optional fields, so Studio and Eigenpal no longer fall back to stale model lists during catalog updates. * Cloud document processing providers that are already available stay online during routine production updates when their identity is unchanged. New or changed providers stay unavailable until they pass live verification, so customers keep working providers instead of a full outage window. *** ## 0.10.54 (2026-08-04) ### Platform (Studio) * Workflow Studio now shows each OpenParser OCR model with its actual provider logo, keeps narrow step configuration panels contained, and places settings, theme, and sidebar controls together in a cleaner navigation footer. *** ## 0.10.53 (2026-08-04) ### Platform (Studio) * OpenParser Studio now visualizes the `openparser@1` document graph directly, including typed elements, figures, tables, relationships, and element-level extraction citations. ### Public API * OpenParser parse responses now return the unified `openparser@1` document graph, with plain text, canonical Markdown, pages, typed elements, relations, annotations, assets, geometry, confidence, and provider provenance in one predictable contract. *** ## 0.10.52 (2026-08-04) ### Platform (Studio) * Agent Builder: improve connection recovery so interrupted sessions resume reliably, stale environments are replaced safely, and approval prompts remain retryable when delivery fails. *** ## 0.10.51 (2026-08-03) * Internal improvements. *** ## 0.10.50 (2026-08-03) ### Platform (Studio) * OpenParser Studio: pipeline creation no longer reports a duplicate-name error after a successful save, and edits now save reliably from the browser. *** ## 0.10.49 (2026-08-03) * Internal improvements. *** ## 0.10.48 (2026-07-30) ### Platform (Studio) * OpenParser Studio now displays canonical OpenParser JSON with readable indentation, including large document results. *** ## 0.10.47 (2026-07-30) ### Platform (Studio) * OpenParser Studio now keeps large document results responsive, renders OCR markdown with clearer structure, and provides consistent copy and download actions for Markdown and JSON output. Documentation links now reliably open the generated API reference. ### Infrastructure & processing * OpenParser jobs now recover more safely when document processing capacity becomes unavailable. Retryable failures pause new dispatches, retry without duplicate charges, and bound large-document processing so one document cannot overwhelm the service. *** ## 0.10.46 (2026-07-30) ### Platform (Studio) * Team settings: bring back the invitation link. Creating an invitation now shows its link straight away whenever no invitation email was delivered, and administrators can pull up the link again at any time from the invitations table. This unblocks onboarding on deployments without email delivery, where handing over the link is the only way to get someone into the workspace. * Run details: field grounding now labels flagged fields by what the extraction actually reports, showing "3 with low confidence" instead of "3 to review". The count is a confidence signal, not an assigned task. *** ## 0.10.45 (2026-07-29) ### Platform (Studio) * Parse Document setup now clearly separates OCR from Vision AI, automatically offers available OpenParser OCR models, shows each model's per-page price, displays only the controls that affect the selected method, and surfaces structured layout data with tables, figures, polygons, and bounding boxes for downstream workflow steps. ### CLI * The workflow authoring reference now covers explicit OCR and Vision AI parse modes, optional figure-caption models, and structured layout output. ### Infrastructure & processing * Document parsing now defaults to higher-fidelity OCR, preserves canonical structured layout alongside Markdown, and automatically supports available OCR models with provider-specific per-page pricing. Other OCR providers retain their existing rates. *** ## 0.10.44 (2026-07-28) * Internal improvements. *** ## 0.10.43 (2026-07-27) * Internal improvements. *** ## 0.10.42 (2026-07-27) * Internal improvements. *** ## 0.10.41 (2026-07-27) ### Platform (Studio) * Run traces now show each attempt of an AI request. A request that timed out and was retried used to appear as a single long bar, so a step that spent three timeouts on one page looked identical to one slow call. The raw trace now has one bar per try, labelled with the try number, and the run timeline marks a retried call with how many times it was sent. Retried requests also record how long they waited for a free slot, which distinguishes a slow model from a queue backed up behind its own in-flight requests. For documents parsed page by page, each split retry records the pages it covered and how deep the split went. * Runs and Experiments improvements: - An experiment run now shows the same input and output panels as the main run view, including input file downloads, per-step output files, and inline field-level output review. - Scored runs show their eval score in the runs list and in the run header, so an experiment's results can be compared without opening each run. - A run that came from an experiment or a dataset example now links straight to that run in the Evals view. - The Live and Experiments toggles on Runs are remembered between visits. - Field grounding: a wide document no longer overflows the panel. Wide tables and long unbroken text scroll inside the document card. *** ## 0.10.40 (2026-07-25) ### Infrastructure & processing * Processing reliability on busy deployments: health checks are now served independently of document processing, so the service stays responsive to them even while working through a heavy document. It is no longer restarted mid-run just because it is under load, so long-running document runs complete more reliably. * Document processing is more resilient on CPU- and memory-constrained deployments. Page rasterization for vision and OCR now runs in isolation, so a single large or malformed document can no longer stall the processing service or cause it to restart mid-run. Runs on big scanned documents that previously failed partway through with "the worker stopped before this attempt recorded a terminal result" now complete reliably. *** ## 0.10.39 (2026-07-25) ### Platform (Studio) * Label Pages runs: the page preview now shows the classified document in the full viewer instead of small thumbnails. PDFs render page-by-page with zoom and navigation and each page's labels shown beside it; Word and other Office documents open in their own preview next to a per-page label list. Filter by a label to focus on just the pages that carry it. *** ## 0.10.38 (2026-07-24) ### Platform (Studio) * OpenParser Studio: manage extraction pipelines from a dedicated workspace — create, edit, run, duplicate, and delete saved configurations. Jobs show the pipeline and version that produced each result, and you can save a new pipeline from job settings. * OpenParser Studio: clearer progress while documents upload, parse, and extract, with live elapsed timing at each stage. Job history and the playground share a unified header with breadcrumbs, improved document and Markdown output viewers, and a cleaner parse sidebar. Choose light or dark theme and manage your account from the sidebar; model selectors and in-product copy are simpler throughout the workspace. * Members provisioned through SSO are now read-only in workspace member settings. Their role and access come from your identity provider's groups, so admins can no longer change or remove them by hand, and each SSO member is clearly labeled. Accounts created with a username and password stay fully manageable by admins. ### Public API * **Breaking:** OpenParser API resource identifiers now use consistent prefixed ids. Parse, extract, and batch jobs return `opj_…` ids instead of UUIDs. Saved extraction pipelines use `oppl_…` instead of `oep_…`. New parse output writes figure image ids as `opfig_…` instead of `ocrfig_…`. Existing jobs and pipelines are remapped automatically on upgrade when the OCR queue is idle enough for migration preflight. Prefer the new formats in job URLs, `parse_job_id`, `pipeline_id`, and batch child `job_id` fields. During the transition, previously issued UUID job ids, `oep_…` pipeline ids, and UUID list cursors remain readable; responses continue to return the preferred `opj_…` / `oppl_…` forms. Historical parse artifacts and `result_json` may still embed legacy `ocrfig_…` figure paths; `GET /files/\{id}` accepts both `opfig_…` and `ocrfig_…`. ### Infrastructure & processing * Hardened AI-powered document processing against prompt-injection attempts hidden inside uploaded documents. Instructions embedded in a document can no longer steer extraction, classification, or vision results away from the requested schema, or coax the model into disclosing its own configuration. * AI vision step results no longer include internal document storage references in their metadata. The step's `_vision` provenance now records only which pages were inspected and how many were merged, keeping internal storage paths out of workflow output. *** ## 0.10.37 (2026-07-24) ### Platform (Studio) * New **Label Pages** step tags each page of a document with zero or more labels (multi-label) using AI, and groups the results into a label-to-pages map. Unlike section splitting — which produces one contiguous range per section — this collects pages of the same kind wherever they appear, so scattered pages (for example every signature or photo page throughout a report) can be gathered in one place. The page-inspection step can now take an explicit list of page indices, so you can route the pages for a given label straight into a visual inspection without hand-listing them. *** ## 0.10.36 (2026-07-23) ### Platform (Studio) * OpenParser Job History now reports the real end-to-end duration for completed parse and extraction jobs instead of showing a zero or unavailable measurement. * Running OpenParser jobs now show the document scanning animation from the playground while results are being prepared. * Parse and Extract now use consistent operation icons across OpenParser Studio and documentation. *** ## 0.10.35 (2026-07-23) ### Platform (Studio) * OpenParser sign-in and account creation now redirect directly to the branded authentication flow without an intermediate confirmation page. * OpenParser parse jobs now retain both `raw` and `openparser@1` results. Retrieve either representation with `GET /jobs/\{id}/result?format=...`, switch formats in the Studio Output tab, and start extraction from a raw-format parse job without running OCR again. ### Public API * OpenParser parse jobs now retain both `raw` and `openparser@1` results. Retrieve either representation with `GET /jobs/\{id}/result?format=...`, switch formats in the Studio Output tab, and start extraction from a raw-format parse job without running OCR again. * OpenParser now keeps recognized text aligned with its original bounding box by default. Set `ocr_options.merge_layout_blocks` to `true` per parse, extraction, batch item, or saved pipeline when merged recognition is preferred over one-to-one text geometry. *** ## 0.10.34 (2026-07-23) ### Platform (Studio) * OpenParser sign-in and account creation now keep OpenParser branding throughout the authentication experience. * OpenParser Studio: uploads and sample documents now open their Job History detail immediately, so browser back and forward navigation follows each run naturally while extraction and result review stay in one place. * Run detail now shows clean, readable file names for inputs and outputs instead of internal storage identifiers, and long file names no longer overlap the preview and download buttons. ### Public API * OpenParser parsing now preserves every detected layout region—including empty title, header, and figure boxes—so document overlays remain complete. The obsolete `figure_assets` option is removed because figure regions are now always retained. * OpenParser can now process documents beyond 25 pages and admit batches of up to 100 documents, while retaining per-page safety limits. * OpenParser jobs can now stream their retained source documents with `GET /jobs/\{id}/source`, making it easier to build durable review experiences around past runs. * `POST /suggest-schema` now returns the suggested schema inline as a convenience response instead of creating a job that clients must poll. ### Infrastructure & processing * Documents uploaded without a declared file type are now recognized from their contents, so PDFs, RTF, and Office files parse reliably instead of failing with an "unsupported file type" error. This most often helped uploads coming from automated integrations that omit the file type. *** ## 0.10.33 (2026-07-22) ### Platform (Studio) * OpenParser Studio: make Playground the home page, add shareable social previews, clarify job status and pipeline empty states, and tidy the OCR model selector copy. ### Public API * OpenParser suggested extraction model catalog (`GET /models/llm` in suggested mode) now surfaces up to 20 recommended models instead of 12, so more current options appear before you need to search. *** ## 0.10.32 (2026-07-22) * Internal improvements. *** ## 0.10.31 (2026-07-22) ### Platform (Studio) * OpenParser Studio production sign-in no longer auto-redirects to Eigenpal when you are signed out. Choose **Continue to sign in** on the local OpenParser page to authenticate with your Eigenpal account; sign-out stays on OpenParser. *** ## 0.10.30 (2026-07-22) ### Platform (Studio) * OpenParser production sign-in now shares Eigenpal sessions across its dedicated domain and returns users to their original OpenParser destination after authentication. * OpenParser Playground: remove the doubled border and rounded corners around the document workspace. ### Infrastructure & processing * OpenParser: restore schema suggestions, use GPT-5.6 Terra as the default extraction model with GPT-4.1 Mini as a certified fallback, tighten compatibility checks, and provide clearer failure guidance. *** ## 0.10.29 (2026-07-22) ### Platform (Studio) * OpenParser Studio sign-in and sign-up now load the shared identity UI correctly for signed-out visitors. *** ## 0.10.28 (2026-07-22) ### Platform (Studio) * API keys: keep usable credentials in the primary list and move revoked or expired credentials into a collapsed history section for faster scanning. * OpenParser Studio sign-in and sign-up now show OpenParser product copy and logo while retaining the shared Eigenpal identity. ### Public API * OpenParser model discovery (`GET /models/llm`) now refreshes the live compatible catalog on the API service instead of falling back to a short emergency list when the catalog credential is missing from that process. ### Infrastructure & processing * OpenParser document processing now bounds source downloads and retries transient storage failures, preventing stalled jobs from running indefinitely. *** ## 0.10.27 (2026-07-21) ### Platform (Studio) * New Inspect Pages (Vision) step lets a workflow look at the actual page images of a document and return structured results, for details that only exist in the pixels rather than the text. Use it to check whether a document is signed, rate embedded photos, or spot stamps and logos. It works on PDFs, images, and Office documents, and you can point it at a specific page range (for example the section found by a Split step) so it only reviews the pages that matter. The run trace shows the pages it inspected next to the results. * Parsing can now describe the figures on a page as text. Enable "describe figures" on a Parse step and the images on each page (property photos, charts, stamps) are detected and captioned inline, so later steps that work on text, like Split, can find image-only pages. This is especially useful for scanned documents, where the photo pages carry almost no text on their own. You can provide custom instructions for how figures should be described. * Split step results are now also available keyed by section name. A later step can point at one section directly, for example `\{\{ steps.split.output.sections.photos.page_range }}`, instead of filtering the full list. This makes wiring a Split step into a downstream step much simpler. * The Inspect Pages (Vision) step now takes a Page From / Page To range instead of a single page-range expression, and both are optional. Leave them blank to inspect the whole document, which is processed in chunks and the results merged automatically. This makes it much easier to point the step at a range (for example the start and end of a Split section) or to scan an entire document without writing a range expression. *** ## 0.10.26 (2026-07-21) ### Platform (Studio) * Wildcard API keys can use the OpenParser OCR API consistently with every other platform capability. Keys can also be restricted to the dedicated `ocr:full` scope when OCR-only access is preferred. * Run traces now include a Grounding panel for extract steps: every extracted value is highlighted in the input text, tinted by confidence, and clicking a field or a highlight jumps between them. Grounded fields also show inline context previews of the exact source passage, both in the panel and in the expanded step row. Split steps gain the same visual page-range panel the segmenter uses, with page thumbnails and per-section preview. The workflow builder reflects that grounding is on by default and lets you pick any configured provider as the grounding model, and capturing expected output from a run no longer snapshots volatile grounding metadata into evals. ### Public API * Wildcard API keys can use the OpenParser OCR API consistently with every other platform capability. Keys can also be restricted to the dedicated `ocr:full` scope when OCR-only access is preferred. * OpenParser: completed extraction jobs can now be retrieved reliably with their attempt and usage metadata. ### CLI * The step catalog now documents grounded extraction as the default: extract steps ship per-field confidence and source spans under the `_grounding` output key unless `grounded: false` is set. ### Infrastructure & processing * Data extraction now verifies itself by default. Every extract step traces each extracted field back to its exact location in the source text and attaches a confidence level (high, medium, or low) plus a needs-review flag under a reserved `_grounding` output key, so downstream steps and evaluators can route uncertain values to a human. The verification pass runs on your workspace model (any configured provider), chunks long documents automatically, and falls back to deterministic text matching instead of failing the run when no model is available. Set `grounded: false` on a step to opt out. *** ## 0.10.25 (2026-07-20) ### Platform (Studio) * Failed single sign-on attempts now return to the sign-in page with a clear, actionable message (for example, when an account's email domain isn't authorized or the account hasn't been granted access) instead of a blank error page. *** ## 0.10.24 (2026-07-15) ### Platform (Studio) * Agent runs graded by configured evaluators now record a weighted score and pass/fail result, visible in the runs feed and run detail responses. Previously only workflow runs carried an evaluator verdict. * Email addresses for a workflow are unique across your whole organization, not just the workflow you are editing. Picking one that is already taken used to fail with a server error. It now tells you which workflow already receives email at that address, or that the workflow you are editing already has it, so you know what to do next. Duplicate folder names and duplicate workspace invites also report clearly instead of failing. * `ai.extract` with `grounded: true` no longer succeeds silently without producing grounding. When the grounding pass cannot run (missing OpenAI credentials on the worker, or a grounding model that is not an OpenAI model) the step now fails with an error that names the exact misconfiguration. When the pass runs but produces no field grounding, the output carries an explicit degraded marker instead of nothing. The grounding model picker in the workflow builder now only offers OpenAI models, matching what the grounding pass supports. * Agent training: when a training session fails to open, the dashboard now shows what went wrong instead of a generic error. The message names the setup step that failed, and a session blocked by secrets that cannot be decrypted says so and points at the agent settings. A session whose setup fails partway through no longer opens on an incomplete workspace. * Self-hosted deployments can now sign users in through corporate single sign-on services that use a redirect-and-token flow instead of OIDC. The new protocol supports mutual TLS for the server-to-server exchange, maps directory groups to EigenPal roles (admin, member, viewer) on every SSO sign-in so the directory stays the source of truth, and links existing password accounts by email so nobody loses access when SSO is turned on. Startup validation rejects unsafe callback origins and provider identifiers, while malformed or oversized identity responses fail closed. ### Public API * Syncing an automation immediately after a release no longer fails with HTTP 500 while the new release tag propagates. The sync endpoint now reports a retryable status with a clear message when the Git source is momentarily unavailable. * Fixed single-experiment results export returning HTTP 400 whenever the `includeTrace` query flag was omitted. `workflow experiment results` and the auto-pull at the end of `workflow experiment watch` now download per-evaluator results in JSON and CSV again. * Creating an email trigger address that is already in use now returns 409 with a message naming the workflow in your organization that already uses it, instead of 500. ### CLI * Agent example runs now report a real evaluator verdict in the CLI: `eigenpal run agents.<name> --example <name> --wait` waits for the verdict, prints the weighted score and pass/fail result, and `--fail-on-mismatch` exits non-zero when the run fails its evaluators, matching the existing workflow behavior. When no evaluators are configured, the CLI says so instead of silently reporting nothing. * `agents secrets` is now one command group with `list`, `set`, `unset`, `import`, and `export` subcommands (`agents secret` remains as an alias). The new `agents secrets list` shows the secret names and descriptions declared in the package without ever printing values. Previously `set` and `unset` lived under a separate singular command and `secrets list` failed with an argument error. * `agents sync` retries automatically with a short backoff when the server reports the Git source as temporarily unavailable, so the sync right after `agents release` succeeds without manual retries. * `agents dataset validate` now checks the same layout the server accepts on `agents dataset push`: example folders under `examples/`, file inputs referenced from `input.json` with `\{ "$file": "input/..." }`, and `expected.json` optional. Previously the local validator demanded a different layout that push would then reject, so no dataset could satisfy both. Validation errors now point at the exact rule that failed, including a hint when example folders sit at the dataset root instead of under `examples/`. When the agent package carries an input schema, each example's full input object is validated against it (required fields, unknown keys, and value types, with `\{ "$file": ... }` references accepted for file fields), so inputs that would fail at run start are caught locally. Failure-expected examples (`expected.json` with `$error`) are rejected for agent datasets, since agent runs are evaluated only when they complete. [View full release notes →](/releases/0.10.24) *** ## 0.10.23 (2026-07-15) * Internal improvements. *** ## 0.10.22 (2026-07-14) ### Platform (Studio) * Organization members can now configure, test, and manage outbound webhooks from Studio. *** ## 0.10.21 (2026-07-14) ### Platform (Studio) * Webhooks: notify external systems when workflow or agent runs are created or change status, with signed delivery, custom headers, retry history, testing, and manual redelivery from Studio. * Webhook signing secrets are now easier to copy securely from endpoint setup and details, with clearer event selection defaults. * Webhook setup now keeps failed submissions actionable with clear inline error feedback. ### Public API * Run creation and rerun requests now publish signed lifecycle webhooks only after inputs are ready, so API-triggered automations never emit events for runs that fail during setup. ### Infrastructure & processing * Improved staging worker deployment reliability when compute capacity is fully allocated. *** ## 0.10.20 (2026-07-12) ### Platform (Studio) * Workflows: configure automatic retries from Studio at the workflow level or override them for individual HTTP GET/HEAD and Website Reader steps. ### CLI * The bundled workflow reference now documents durable retry policies, inheritance, supported step types, and retry safety limits. ### Infrastructure & processing * Workflow runs can recover replay-safe network steps from transient failures without restarting completed work, using bounded backoff and durable retry state. Retry behavior is now step-scoped. Legacy whole-run retry settings no longer restart a failed workflow; configure durable retries on eligible steps or through the workflow retry default instead. *** ## 0.10.19 (2026-07-09) ### Platform (Studio) * Workflow composition is unified on `action.invoke-workflow`: use `execution: inline` (default) to run a target workflow's steps inside the parent run, or `execution: child` for a separate child run. Reusable blocks (`control.block`, `kind: block`) are removed — migrate to inline invoke with `workflow: <name-or-id>`. ### Public API * Workflow run endpoints now preserve inline invoke snapshots across initial runs, reruns, and dataset executions so composed workflows remain reproducible after target workflows change. ### CLI * Workflow YAML reference docs now describe `action.invoke-workflow` as the single composition primitive, including inline and child execution modes. *** ## 0.10.18 (2026-07-08) ### Infrastructure & processing * On-prem deployments: improve OpenShift compatibility so migration and processing jobs can start reliably under random-user security policies. *** ## 0.10.17 (2026-07-08) ### Platform (Studio) * Document parser: vision parsing can now render PDF pages at higher resolution and image quality for documents where small text or compression artifacts hurt OCR accuracy. ### Infrastructure & processing * Document parser: vision parsing can now render PDF pages at higher resolution and image quality for documents where small text or compression artifacts hurt OCR accuracy. *** ## 0.10.16 (2026-07-07) ### Platform (Studio) * Workflow experiment results now preserve evaluator error details alongside each per-evaluator score, so example grading views and tools can distinguish failed judges from unknown results instead of treating them as passing. ### CLI * `eigenpal run <workflow> --example <name>` now actually grades the example instead of printing `PASS` whenever the run merely finished. It runs the workflow's current published version on the server's stored dataset example, so configured evaluators run automatically and the CLI surfaces the real weighted score and per-evaluator pass/fail. Workflows with no evaluators fall back to a structural diff of the output against the example's stored expected output. The summary reports two separate signals: execution health (`ok`/`errored`) and accuracy. Add `--fail-on-mismatch` to exit non-zero when a graded example fails. Because the run uses the server-side example, push your latest dataset and evaluators (`eigenpal workflow dataset push`, `eigenpal workflow evaluators push`) before running `--example`. *** ## 0.10.15 (2026-07-06) ### Platform (Studio) * Experiments: make result review easier in Studio with trace exports, clickable score bars, calmer live refreshes, developer-view defaults, and clearer separation between below-threshold results and run errors. ### Public API * Experiment export endpoints now support JSON exports with full run trace details for deeper debugging and audit review. ### SDK * SDK clients now expose the trace-inclusive experiment export option for deeper debugging and audit review. *** ## 0.10.14 (2026-07-06) ### Platform (Studio) * Evaluations: expected workflow failures now report cleaner scores when a run is supposed to stop early. Studio marks non-applicable quality judges as skipped, so successful rejection examples can receive a full score from the structured failure checks that actually apply. *** ## 0.10.13 (2026-07-06) * Internal improvements. *** ## 0.10.12 (2026-07-06) * Internal improvements. *** ## 0.10.11 (2026-07-03) * Internal improvements. *** ## 0.10.10 (2026-07-03) * Internal improvements. *** ## 0.10.9 (2026-07-02) ### Platform (Studio) * Build document-processing workflows that split, route, and verify a mixed batch: - **Document separation** detects the boundaries and types of the documents inside one large scan, so a single upload can be broken into its individual documents and each sent to its own extraction pipeline — even for batches hundreds of pages long. - **Multi-way routing** sends each detected document to the right branch by its type, and stays readable on the canvas even with many branches. - **Grounded extraction** attaches a confidence level and source location to each extracted field, flagging values that aren't found verbatim in the document so reviewers know where to look. - The run view now lets you open the detected documents and preview their pages, and inspect the OCR layout with bounding boxes drawn over the page (with a toggle to the extracted text) — right from the step timeline. ### CLI * The workflow step catalog now lists the new document-separation and multi-way routing steps, plus the grounded-extraction options, so authoring and validating workflows from the CLI stays in step with what the platform supports. ### Infrastructure & processing * Self-hosted (on-prem) deployments can now run official EigenPal release images, with access provisioned per customer. Images are published only after a release ships and are signed so you can verify their authenticity before deploying. *** ## 0.10.8 (2026-07-01) ### Platform (Studio) * Single-file workflow inputs now display correctly after a dataset import. Previously an input that takes one file could show an empty file slot; imported examples now match each file to the workflow's declared input shape. * Evaluator scoring now uses a single pass threshold for the whole workflow. The score-by-example chart's cutoff line and every evaluator's pass/fail are measured against that one threshold, so the chart, the per-evaluator results, and the run gate always agree. Experiment scores are shown in two states — passing (green) or below threshold (amber). * The LLM judge evaluator now requires evaluation criteria. Without them the model invents its own scoring rubric, so the editor marks the field required, renames it to "Evaluation criteria" with a worked example, and blocks saving until it is filled in. * Workflow folders can now be reorganized. A new "Move to folder" action in each folder's menu lets you move a folder (and everything inside it) into another folder or back to the top level, so you can restructure your workspace without recreating folders. Destinations that would nest a folder inside itself are blocked, with a tooltip explaining why. * Nested sub-workflows now display and resolve correctly across runs, the workflow builder, and the CLI. In the Runs list, a run that invokes a sub-workflow which itself invokes another sub-workflow now nests every level under its parent, instead of stopping at the first level. In the workflow builder, an "Invoke Workflow" step that targets a workflow built from other invoked workflows now shows the real output field types instead of "unknown", so you can reference those fields with autocomplete; referencing one of those fields no longer triggers a false "field not found" warning. The same resolution now applies when validating and publishing workflows (including via the CLI), so deeply nested invoke chains validate against their real output fields. All of this resolves through arbitrarily deep chains with a safety limit that prevents looping on workflows that invoke each other. * Runs: add a simplified review mode with developer-view toggle, review status badges, and inline output review for JSON fields and generated files. * New debugging and control primitives for runs. You can now cancel an in-progress run through the API, experiment results report when a batch has fully finished, steps skipped by a condition or an empty loop are reported as skipped rather than succeeded, and each step records the exact configuration it ran with so failures are easier to diagnose. * Run detail responses are leaner and more explicit: you choose exactly which sections to expand, and the public run schema now exposes the workflow version, cancellation-request time, and trace, retry, and email-trigger details. ### CLI * `eigenpal workflow validate` now tells you when a workflow contains Invoke Workflow steps that local validation cannot fully check. Because those steps reference other workflows that live on the server, the command prints a short note pointing you to `validate --online` (or push) to verify the invoke targets, input types, and cycles. The skill guidance now shows the `--online` step in the validate-then-push flow as well. * The evaluator configuration reference now reflects the single workflow-level pass threshold. A per-evaluator `passThreshold` is documented as legacy — pass/fail is decided by the one workflow-level threshold — and that workflow-level threshold no longer shows a fixed default, since it is derived when omitted. ### SDK * The Python SDK now requires Python 3.10 or newer. Python 3.9 has reached the end of its support window, and dropping it keeps the SDK on current, actively maintained dependencies. If you are still on Python 3.9, upgrade to 3.10+ to continue receiving SDK updates. [View full release notes →](/releases/0.10.8) *** ## 0.10.7 (2026-06-30) ### Platform (Studio) * Faster dashboard navigation. Lists keep their contents on screen while filters and folders refresh instead of flashing a loading state, document and image previews are cached so they no longer re-download on every navigation, and heavy viewers (PDF, charts, rich text) load on demand for a quicker first paint. * Workflows that invoke another workflow now pass file inputs through to the sub-workflow, so file-backed sub-workflow runs no longer fail before they start. ### CLI * `eigenpal --help` now groups `run`, `rerun`, and `runs` under a dedicated "Run" section instead of the catch-all "Other" bucket, so starting a run and reading its output is easy to find. *** ## 0.10.6 (2026-06-30) This release contains maintenance and reliability improvements with no customer-facing changes. *** ## 0.10.5 (2026-06-29) This release makes EigenPal's public changelog a reliable product record. Each release now has a dedicated docs page that explains what changed for Studio, the public API, the CLI, SDKs, and document processing in one place. That means teams can follow platform improvements without piecing together GitHub activity or package-specific notes. The changelog is organized around customer-facing product areas, so it is easier to see which changes affect app users, API integrations, developer tools, and processing behavior. ### Platform (Studio) * Invoke Workflow steps are now typed end to end. Pick a target workflow and map each input it declares to a value, then reference the workflow's output fields and any files it generates from downstream steps with autocomplete. Inputs and outputs are checked when you save and when the step runs, so mismatches surface early instead of failing mid-run. * Runs that invoke another workflow now appear nested under their parent run in both the runs feed and the run timeline, and link straight to the sub-workflow's own run and trace. * You can view a workflow's inferred output schema (the fields and files it returns, typed from its own steps) without running it. * File inputs are preserved consistently across runs, reruns, reviewed examples, and dataset experiments, so reused runs and examples no longer lose or mispoint their files. * Creating new organizations and other Git-backed source operations stay reliable even during Git provider outages. ### Public API * Run file inputs now use a consistent artifact model. Callers provide reusable files with `$fileId` or inline files with `$inline`, and EigenPal materializes them into run-owned artifacts before execution, reruns, promotion, and dataset workflows. * A new endpoint returns a workflow's inferred output schema without running it, as JSON Schema or as a TypeScript or Python type. ### CLI * `eigenpal workflow schema ` prints a workflow's inferred output schema as JSON Schema, or as a TypeScript or Python type with `--format`. [View full release notes →](/releases/0.10.5) *** ## 0.10.4 (2026-06-25) ### Platform (Studio) * Unify file list review surfaces *** ## 0.10.3 (2026-06-24) ### SDK #### Patch Changes * e48cb81: Remove `fileVerdict` from run review correction types; file correction intent is encoded via `correctedArtifactPath`. *** ## 0.10.2 (2026-06-24) ### CLI #### Patch Changes * ca9ae4f: Workflow inputs can declare an external file `source` (single-tenant on-prem). A `type: file` input with `source: <name>` (e.g. `gpfs`) is provided as a plain string id at run time; the worker resolves it to a file artifact via the configured source before the workflow executes. *** ## 0.10.1 (2026-06-23) ### Public API * Polish reviews pages and group API reference nav ### Infrastructure & processing * Client-shareable deployment architecture PDFs *** ## 0.10.0 (2026-06-23) ### Platform (Studio) * Add simple runs review mode ### Infrastructure & processing * Autogenerate chart architecture diagram from helm template * AWS/GCP/Azure Terraform examples with architecture diagrams * Helm chart + local kind for single-tenant on-prem *** ## 0.9.0 (2026-06-22) ### CLI #### Minor Changes * c35d5d4: Clean up the public runs and evaluation API surface: move workflow eval operations onto automations, expose run scores/artifacts through the unified runs API, and update CLI/SDK helpers to use the canonical routes. Breaking: `runs.evalResults` and `GET /api/v1/runs/\{id}/eval-results` are replaced by `runs.scores` and `GET /api/v1/runs/\{id}/scores`. #### Patch Changes * c35d5d4: Clarify `--max-wait` help text so timeout exit behavior reads naturally. ### SDK #### Minor Changes * c35d5d4: Clean up the public runs and evaluation API surface: move workflow eval operations onto automations, expose run scores/artifacts through the unified runs API, and update CLI/SDK helpers to use the canonical routes. Breaking: `runs.evalResults` and `GET /api/v1/runs/\{id}/eval-results` are replaced by `runs.scores` and `GET /api/v1/runs/\{id}/scores`. [View full release notes →](/releases/0.9.0) *** ## 0.8.0 (2026-06-18) ### CLI #### Minor Changes * d620a00: Expose the clean public automation API around automations, runs, files/artifacts, datasets, evaluators, experiments, evaluation results, and run promotion. This intentionally breaks the pre-v1 SDK/CLI surface that exposed workflow- and agent-specific top-level resources outside the explicit legacy compatibility routes. > \[!WARNING] > **Breaking change (pre-v1).** The workflow- and agent-specific top-level > resources have been removed in favor of a single automation-centric surface. > These packages are still 0.x, so this breaking redesign ships as a `minor` > bump. Update your integration before upgrading. #### Removed * Top-level workflow resources, e.g. `client.workflows.*`, including `client.workflows.executions.runAndWait(...)` and the rest of the `client.workflows.executions.*` tree. * Top-level agent resources, e.g. `client.agents.*` (runs, reviews, traces, files, expected artifacts). * Top-level source/git resources, e.g. `client.sources.*`. [View full release notes →](/releases/0.8.0) *** ## 0.7.2 (2026-06-13) ### SDK #### Minor Changes * c5a709c: Public workflow list/detail responses include `apiEnabled` and `triggers`; run definition docs note workflow-only scope. *** ## 0.7.1 (2026-06-13) ### SDK #### Patch Changes * 9db3f01: Expose `apiEnabled` and `triggers` on `AgentSummary` for runtime trigger projection. *** ## 0.7.0 (2026-06-12) ### CLI #### Minor Changes * 963fd6c: Unify run detail on `GET /api/v1/runs/\{id}`: return the canonical Run object directly (no `\{ run: ... }` envelope) and merge expanded fields in-place via documented `expand` tokens. Remove the session-only `expand=internal` dashboard escape hatch; SDKs and CLI now use explicit expand lists. #### Patch Changes * 963fd6c: Update runs commands for the grouped run API shape and four expand tokens. ### SDK #### Minor Changes * 963fd6c: Unify run detail on `GET /api/v1/runs/\{id}`: return the canonical Run object directly (no `\{ run: ... }` envelope) and merge expanded fields in-place via documented `expand` tokens. Remove the session-only `expand=internal` dashboard escape hatch; SDKs and CLI now use explicit expand lists. #### Patch Changes * 12c00d8: Docs: clearer wording in the file-input and TypeScript-runtime sections. No API or behavior changes. *** ## 0.6.17 (2026-06-12) ### SDK #### Patch Changes * 716c3cf: Update the hosted default API base URL and API-key guidance from `app.eigenpal.com` to `studio.eigenpal.com`. *** ## 0.6.16 (2026-06-12) ### CLI #### Patch Changes * 75dd64c: Internal refactor: move the skill tool registry into its own module so other tooling can import it. No change to any command, flag, argument, or output. *** ## 0.6.15 (2026-06-10) ### CLI #### Minor Changes * ca87265: Unify workflow and agent run starts behind the canonical `/api/v1/run/\{target}` endpoint, root `eigenpal run` / `eigenpal rerun` commands, and root SDK `client.run()` / `client.rerun()` methods. The old nested CLI commands and SDK resource methods for starting workflow or agent runs have been removed. #### Patch Changes * 5ea0bb5: `workflow dataset pull` gains `--example-id <id>` (repeatable) to export a single example or a selected subset of a dataset, instead of always pulling the whole dataset. The subset ZIP uses the same archive layout as a full pull, so it re-imports into any dataset via `dataset push --mode append`. Requesting an example id that does not exist for the workflow exits non-zero. ### SDK #### Minor Changes * ca87265: Unify workflow and agent run starts behind the canonical `/api/v1/run/\{target}` endpoint, root `eigenpal run` / `eigenpal rerun` commands, and root SDK `client.run()` / `client.rerun()` methods. The old nested CLI commands and SDK resource methods for starting workflow or agent runs have been removed. *** ## 0.6.10 (2026-06-08) ### CLI #### Patch Changes * 99ca1b4: Unify agent and workflow run commands and SDK helpers on the shared `/api/v1/runs` API, including the public `client.runs` facade and regenerated SDK reference docs. ### SDK #### Patch Changes * 99ca1b4: Unify agent and workflow run commands and SDK helpers on the shared `/api/v1/runs` API, including the public `client.runs` facade and regenerated SDK reference docs. *** ## 0.6.9 (2026-06-04) ### SDK #### Minor Changes * 5e7c051: Add `observability` (phase timeline + structured failure) to workflow execution and agent run status API responses. *** ## 0.6.6 (2026-06-03) ### CLI #### Patch Changes * 245f347: Clean up the agent CLI surface by removing obsolete compatibility commands, moving reruns to `agents rerun`, and replacing run pulls with canonical artifact fetching. * 5ab00ee: Tighten permissions on `~/.config/eigenpal/credentials.json` and its parent directory to owner-only (0600 / 0700). Previously the file was written 0600 but the parent directory inherited the user's umask (typically 0755), allowing other local users to list the directory and stat the file. The CLI now also re-tightens permissions on every write, so installs created with older versions are corrected on the next `auth login` / `auth use`. *** ## 0.6.4 (2026-06-03) ### CLI #### Patch Changes * c3486a5: Fix agent git cutover QA findings: dashboard runs now navigate to the created run, inbound email aliases preserve mixed-case organization qualifiers, sandbox source materializes under `/workspace/agent`, run artifact downloads use direct paths like `/files/eigenpal.lock`, wait-for-completion responses include source provenance, and CLI wait/watch commands exit nonzero for failed or cancelled runs. ### SDK #### Patch Changes * c3486a5: Fix agent git cutover QA findings: dashboard runs now navigate to the created run, inbound email aliases preserve mixed-case organization qualifiers, sandbox source materializes under `/workspace/agent`, run artifact downloads use direct paths like `/files/eigenpal.lock`, wait-for-completion responses include source provenance, and CLI wait/watch commands exit nonzero for failed or cancelled runs. *** ## 0.6.2 (2026-06-02) ### CLI #### Patch Changes * d2202b6: List all agent runs for unqualified targets, and reserve source-ref filtering for explicit `@ref` targets. *** ## 0.6.0 (2026-06-02) ### CLI #### Minor Changes * 2aeeaf2: Add native source `git save` and branch-aware `git release` flows for Git-backed builder workspaces. #### Patch Changes * 2aeeaf2: Complete the agent Git cutover with pluralized agent CLI commands, source-ref run support, lockfile metadata, and regenerated SDK/docs surfaces. * 2aeeaf2: Expose Git-backed agent source refs and public source automation APIs consistently across CLI docs and SDK facades. ### SDK #### Patch Changes * 2aeeaf2: Complete the agent Git cutover with pluralized agent CLI commands, source-ref run support, lockfile metadata, and regenerated SDK/docs surfaces. * 2aeeaf2: Expose Git-backed agent source refs and public source automation APIs consistently across CLI docs and SDK facades. *** ## 0.5.12 (2026-06-02) ### CLI #### Minor Changes * d3b0768: Add `control.fail` and `ai.classify` step types, plus the `expected/error.json` dataset assertion format. * `control.fail` terminates a workflow with a typed status code + message envelope. Optional `condition` template gates the fail. Compose with `ai.classify` to reject documents that match an undesired label. * `ai.classify` runs single-label closed-set classification through the existing extract LLM pipeline. Output is `\{ label, confidence, reason }`, where `label` is constrained to the configured names. * `examples/<name>/expected/error.json` (mutually exclusive with `output.json`) lets eval examples assert that a workflow should fail with a specific `\{ code, messageContains, step }`. The exact-diff evaluator scores 1 on match, 0 otherwise. * `eigenpal workflow validate` now catches `expected/error.json` shape issues and per-step config violations (e.g. `ai.classify` with fewer than two labels) at push time instead of deferring to runtime. Skill reference docs (`step-types.md`, `dataset-format.md`, `evaluators.md`, `workflow-yaml.md`) updated. #### Patch Changes * 99cad97: Skill reference (auto-generated from `WorkflowDefinitionSchema`) now documents the new `values` row for enum inputs, alongside the existing `items` row used by array inputs. Output-only doc refresh — no CLI behavior change. * d70f697: Document the `control.parallel`, `control.parallel_map`, `control.foreach`, `control.if`, and `control.block` step types in the bundled skill reference. The auto-generated catalog cannot render nested step shapes, so the YAML form, output access paths (e.g. `steps.<parallel>.output.<branch>.<inner>.<field>`), and scoping rules now live as hand-written prose. Also documents the multi-step iteration hazard: only the LAST inner step's output is keyed into each `items[i]` for `parallel_map` / `foreach` — end the body with a `transform.script` if you need to preserve intermediate fields. * ed2cde6: Fix `eigenpal workflow pull` writing a 0-byte file. The v1 single-workflow endpoint now returns the current YAML at the top level (`yamlContent`) via a new `WorkflowDetail` response shape, and the CLI throws a clear error instead of silently writing empty output when no version has been published. Also fixes adjacent regressions caused by the same picker: `workflow list` now shows the workflow name and version columns (previously always `-`), `workflow push --bump` reads the server's current version correctly, the "did you mean?" suggestion on a slug typo lists candidates again, and `workflow execution list` shows a duration column computed from the run start/end timestamps. *** ## 0.5.11 (2026-05-26) ### CLI #### Patch Changes * 2958f4d: Fix Git-backed source smoke-test polish: hidden `git show` and `git sync` now accept bare agent slugs, and workflow scaffolds use the current `triggerMethods` YAML shape. *** ## 0.5.10 (2026-05-26) ### CLI #### Patch Changes * aee7e0c: Add hidden Git source commands for editing trigger policy and encrypted secrets. *** ## 0.5.9 (2026-05-26) ### CLI #### Major Changes * fadb59b: CLI command tree reorganized around the data model. Top-level surface is now `workflow`, `agent` (reserved), and `skill`; everything that operates on a workflow lives under `workflow`, grouped by sub-entity. Renames (clean break — no aliases): * `eigenpal exec <slug>` → `eigenpal workflow execution run <slug>` * `eigenpal clear` → `eigenpal workflow clear` * `eigenpal install-skill` → `eigenpal skill` (same interactive multiselect UX) * `eigenpal execution \{get,list,watch,compare}` → `eigenpal workflow execution \{…}` * `eigenpal workflow set-definition` → `eigenpal workflow push` * `eigenpal workflow get-definition` → `eigenpal workflow pull` * `eigenpal workflow set-evaluators` / `get-evaluators` → `workflow evaluators \{push,pull}` * `eigenpal workflow set-dataset` / `get-dataset` / `list-examples` → `workflow dataset \{push,pull,list}` * `eigenpal workflow run-experiment` / `get-experiment-status` / `get-experiment-results` / `get-eval-results` / `list-executions` → `workflow experiment \{run,status,results,eval-results,list}` * `eigenpal workflow list-versions` / `restore-version` → `workflow version \{list,restore}` [View full release notes →](/releases/0.5.9) # Agents Source: https://docs.eigenpal.com/cli/agents Manage EigenPal agents: Git source, datasets, experiments, sessions, and releases. ## Commands ### Core | Command | Description | | --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | | `eigenpal agents list\|ls [options]` | List agents. | | `eigenpal agents validate [options] [dir]` | Validate a local agent package (layout, manifest, schemas, and Git source rules). | | `eigenpal agents clone [options]` | Clone the organization source repository. | | `eigenpal agents install [options] [packageRef]` | Materialize a source package and its workspace dependencies. | | `eigenpal agents init [options] ` | Create a new source package scaffold. | | `eigenpal agents pull [options]` | Pull organization source from origin/main with --ff-only. For datasets use agents dataset pull; for run artifacts use runs artifacts fetch. | | `eigenpal agents commit [options]` | Validate changed source packages and commit them. | | `eigenpal agents save [options]` | Validate, commit if dirty, and push the current source branch. | | `eigenpal agents push [options]` | Push the current organization source branch and tags. | | `eigenpal agents upgrade [options]` | Upgrade the source repository schema in place. | | `eigenpal agents doctor [options]` | Check organization source repository health. | | `eigenpal agents status [options]` | Show source repo and package status. | | `eigenpal agents deps [options]` | List package workspace dependencies. | | `eigenpal agents clean [options]` | Require a clean source working tree. | | `eigenpal agents show [options] ` | Show Git-backed automation details. | | `eigenpal agents versions [options] ` | List package release versions. | | `eigenpal agents release [options] [dir]` | Create and push an immutable package release tag. Never move or overwrite an existing tag; release a new patch instead. | | `eigenpal agents sync [options] [automation]` | Sync an automation from the latest Git source release. | ### File | Command | Description | | ----------------------------------------------------------------------------------- | ------------------------------------------------- | | `eigenpal agents file list\|ls [options] ` | List live files for an agent. | | `eigenpal agents file get [options] ` | Download one live agent file. | | `eigenpal agents file diff [options] ` | Compare one live agent file against a local file. | ### Secrets | Command | Description | | ------------------------------------------------------------- | --------------------------------------------------------------------- | | `eigenpal agents secrets\|secret list\|ls [options]` | List secret names declared in secrets.enc.yaml (never prints values). | | `eigenpal agents secrets\|secret set [options] ` | Encrypt and set a secret value in secrets.enc.yaml. | | `eigenpal agents secrets\|secret unset [options] ` | Remove a secret from secrets.enc.yaml. | | `eigenpal agents secrets\|secret import [options] ` | Import KEY=value entries from an env file into secrets.enc.yaml. | | `eigenpal agents secrets\|secret export [options] [target]` | Decrypt source secrets and print shell exports. | ### Dataset | Command | Description | | --------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | | `eigenpal agents dataset list\|ls [options] ` | List dataset examples for an agent. | | `eigenpal agents dataset push [options] ` | Upload dataset examples from a local dataset directory or zip archive. | | `eigenpal agents dataset pull [options] ` | Download an agent dataset as a .zip archive. | | `eigenpal agents dataset validate [options] [path]` | Validate a local dataset directory against the canonical examples/\ layout. Defaults to ./dataset/. | ### Experiment | Command | Description | | ----------------------------------------------------------------------------------- | ------------------------------------------------ | | `eigenpal agents experiment\|exp run [options] ` | Start an experiment over dataset examples. | | `eigenpal agents experiment\|exp status [options] ` | Get experiment status. | | `eigenpal agents experiment\|exp results [options] [batch-id]` | Print experiment results as JSON or CSV. | | `eigenpal agents experiment\|exp list\|ls [options] ` | List experiments. | | `eigenpal agents experiment\|exp compare\|diff [options] ` | Diff eval scores between two experiment batches. | | `eigenpal agents experiment\|exp cancel [options] ` | Cancel every active execution in an experiment. | ### Session | Command | Description | | --------------------------------------------------------------- | -------------------------------------- | | `eigenpal agents session list\|ls [options] ` | List builder sessions for an agent. | | `eigenpal agents session get [options] ` | Get a builder session and messages. | | `eigenpal agents session start [options] ` | Start a builder session. | | `eigenpal agents session message [options] ` | Append a message to a builder session. | | `eigenpal agents session stop [options] ` | Stop a builder session. | ### Env | Command | Description | | --------------------------------------------- | ----------------------------------------------- | | `eigenpal agents env pull [options] [target]` | Decrypt source secrets and print shell exports. | ## Details ### `eigenpal agents list|ls [options]` List agents. ### Options | Flag | Required | Default | Description | | ------------------ | -------- | ------- | -------------------------------------- | | `--base-url ` | no | | Server base URL | | `--limit ` | no | `50` | Page size | | `--offset ` | no | `0` | Page offset | | `--json` | no | | Output the raw server response as JSON | | `--search ` | no | | Search by slug, name, or description | ### `eigenpal agents validate [options] [dir]` Validate a local agent package (layout, manifest, schemas, and Git source rules). ### Arguments | Name | Required | Variadic | Description | | ----- | -------- | -------- | ----------- | | `dir` | no | no | | ### Options | Flag | Required | Default | Description | | -------- | -------- | ------- | -------------------------------------- | | `--json` | no | | Output the raw server response as JSON | ### `eigenpal agents clone [options]` Clone the organization source repository. ### Options | Flag | Required | Default | Description | | ------------------------ | -------- | ------- | ---------------------------------------------- | | `--base-url ` | no | | Server base URL | | `--out ` | no | | Output directory | | `--tenant-id ` | no | | Target tenant id for admin-token source clones | ### `eigenpal agents install [options] [packageRef]` Materialize a source package and its workspace dependencies. ### Arguments | Name | Required | Variadic | Description | | ------------ | -------- | -------- | ----------- | | `packageRef` | no | no | | ### Options | Flag | Required | Default | Description | | -------------------- | -------- | ------- | -------------------------------------------- | | `--base-url ` | no | | Server base URL | | `--out ` | no | | Output directory for an explicit package ref | | `--lockfile ` | no | | Lockfile path | | `--frozen-lockfile` | no | | Install exactly from the existing lockfile | | `--remote-url ` | no | | Use an explicit organization Git remote URL | ### `eigenpal agents init [options] ` Create a new source package scaffold. ### Arguments | Name | Required | Variadic | Description | | ------ | -------- | -------- | ----------- | | `name` | yes | no | | ### Options | Flag | Required | Default | Description | | ----------------------- | -------- | ------- | -------------------- | | `--template