<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>AkôFlow Blog</title>
        <link>https://akoflow.com/blog</link>
        <description>AkôFlow Blog</description>
        <lastBuildDate>Sun, 08 Nov 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[AkôFlow 1.0.14 — global search, audit and infrastructure navigation]]></title>
            <link>https://akoflow.com/blog/akoflow-1-0-14</link>
            <guid>https://akoflow.com/blog/akoflow-1-0-14</guid>
            <pubDate>Sun, 08 Nov 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Search control-plane records, explore API and runtime audit, discover keyboard shortcuts and inspect infrastructure by ownership.]]></description>
            <content:encoded><![CDATA[<p>AkôFlow 1.0.14 adds fast global search, a keyboard shortcut reference, comprehensive audit exploration and a resource-oriented infrastructure map. These changes build on 1.0.13.</p>
<p><strong>Database compatibility:</strong> this release consolidates the current schema into one canonical bootstrap. Existing databases with older schema checksums are not migrated in place. Preserve a verified backup and the previous installation before switching; use a new empty database for the new writable installation. The application does not silently reset incompatible databases. Request history is stored in a separate <code>request-audit.db</code> sidecar and must be backed up separately when needed.</p>
<p>The screenshots show the actual release candidate. Audit and settings use the local installation; search and infrastructure use existing experiments opened by a separate daemon in read-only archive mode. Capturing these images did not start workflow execution, provisioning or connectivity checks. Capture provenance is stored alongside the images.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="explore-recorded-activity-in-audit">Explore recorded activity in Audit<a href="https://akoflow.com/blog/akoflow-1-0-14#explore-recorded-activity-in-audit" class="hash-link" aria-label="Direct link to Explore recorded activity in Audit" title="Direct link to Explore recorded activity in Audit" translate="no">​</a></h2>
<p>Use the event timeline, server-side counts, outcome and transport facets, configurable time ranges, grouped results and cursor pagination to investigate API access, MCP protocol activity and runtime lifecycle events. Access records include authentication outcome, request and correlation identifiers, method, status and duration. Shared tokens identify service clients, not invented human identities.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: Audit explorer"><img alt="Audit explorer" src="https://akoflow.com/assets/images/01-audit-explorer-052ef87fe760c4b4bd694ce0d4e5247e.png" width="1700" height="1150"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/01-audit-explorer-052ef87fe760c4b4bd694ce0d4e5247e.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/01-audit-explorer-052ef87fe760c4b4bd694ce0d4e5247e.png" loading="lazy" alt="Audit explorer"></dialog><p></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="search-and-combine-audit-filters">Search and combine audit filters<a href="https://akoflow.com/blog/akoflow-1-0-14#search-and-combine-audit-filters" class="hash-link" aria-label="Direct link to Search and combine audit filters" title="Direct link to Search and combine audit filters" translate="no">​</a></h2>
<p>Search available filter choices, inspect recorded counts and combine filters to narrow an investigation. Additional references include request/correlation identifiers, executions, activities and operations. Loading, empty, retry and outdated-daemon states are explicit.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: Searchable audit filter"><img alt="Searchable audit filter" src="https://akoflow.com/assets/images/02-audit-filter-091d8963482ed606d850e7a5dd1aaf46.png" width="1700" height="1150"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/02-audit-filter-091d8963482ed606d850e7a5dd1aaf46.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/02-audit-filter-091d8963482ed606d850e7a5dd1aaf46.png" loading="lazy" alt="Searchable audit filter"></dialog><p></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="inspect-request-and-identity-evidence">Inspect request and identity evidence<a href="https://akoflow.com/blog/akoflow-1-0-14#inspect-request-and-identity-evidence" class="hash-link" aria-label="Direct link to Inspect request and identity evidence" title="Direct link to Inspect request and identity evidence" translate="no">​</a></h2>
<p>Open an event in the shared full-height detail drawer without leaving the current results. Request, identity, target and correlation evidence stays together, with links to related records. Escape closes the drawer and restores focus. Bodies, authorization headers and secret values are not collected as audit payloads.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: Audit event details"><img alt="Audit event details" src="https://akoflow.com/assets/images/03-audit-event-details-1283df483dc909f7f13e67bb23b752b3.png" width="1700" height="1150"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/03-audit-event-details-1283df483dc909f7f13e67bb23b752b3.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/03-audit-event-details-1283df483dc909f7f13e67bb23b752b3.png" loading="lazy" alt="Audit event details"></dialog><p></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="follow-completed-http-requests">Follow completed HTTP requests<a href="https://akoflow.com/blog/akoflow-1-0-14#follow-completed-http-requests" class="hash-link" aria-label="Direct link to Follow completed HTTP requests" title="Direct link to Follow completed HTTP requests" translate="no">​</a></h2>
<p>The API requests view lists completed calls with method, path, status, duration, direct peer IP and caller classification. Fetch 50 records per page, navigate with cursors and refresh to return to the newest entries. Long-lived requests appear after completion. Query strings, bodies, cookies and authorization headers are omitted; caller-supplied client labels are not verified identity.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: API request history"><img alt="API request history" src="https://akoflow.com/assets/images/04-api-request-history-0cc5acf5cef09de82520df938c8801f2.png" width="1700" height="1150"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/04-api-request-history-0cc5acf5cef09de82520df938c8801f2.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/04-api-request-history-0cc5acf5cef09de82520df938c8801f2.png" loading="lazy" alt="API request history"></dialog><p></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="configure-request-retention">Configure request retention<a href="https://akoflow.com/blog/akoflow-1-0-14#configure-request-retention" class="hash-link" aria-label="Direct link to Configure request retention" title="Direct link to Configure request retention" translate="no">​</a></h2>
<p>Settings exposes request-log retention from 1 to 3650 days, with a default of 30 days. Bounded periodic cleanup removes expired request records; operational audit events are preserved separately. Reducing retention can permanently remove older request records.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: Request retention settings"><img alt="Request retention settings" src="https://akoflow.com/assets/images/05-request-retention-6319405c8f05bdb253b5b201644117b6.png" width="1700" height="1150"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/05-request-retention-6319405c8f05bdb253b5b201644117b6.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/05-request-retention-6319405c8f05bdb253b5b201644117b6.png" loading="lazy" alt="Request retention settings"></dialog><p></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="discover-shortcuts-and-their-controls">Discover shortcuts and their controls<a href="https://akoflow.com/blog/akoflow-1-0-14#discover-shortcuts-and-their-controls" class="hash-link" aria-label="Direct link to Discover shortcuts and their controls" title="Direct link to Discover shortcuts and their controls" translate="no">​</a></h2>
<p>Open Settings → Keyboard shortcuts, or use the shortcut icon in the top bar. The reference shows macOS and Windows/Linux combinations, where each shortcut applies and its matching button or control. Try global search directly from the reference. Contextual keys cover search results, audit menus, activity dependencies and detail panels.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: Keyboard shortcuts"><img alt="Keyboard shortcuts" src="https://akoflow.com/assets/images/06-keyboard-shortcuts-bcabc7a93148403f2598d584342e345b.png" width="1700" height="1150"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/06-keyboard-shortcuts-bcabc7a93148403f2598d584342e345b.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/06-keyboard-shortcuts-bcabc7a93148403f2598d584342e345b.png" loading="lazy" alt="Keyboard shortcuts"></dialog><p></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="find-records-with-global-search">Find records with global search<a href="https://akoflow.com/blog/akoflow-1-0-14#find-records-with-global-search" class="hash-link" aria-label="Direct link to Find records with global search" title="Direct link to Find records with global search" translate="no">​</a></h2>
<p>Press Command/Ctrl+K or use the top-bar search field to find workflows, executions, environments and artifacts by ID or partial name. Resources, plans, execution scopes and materializations are also searchable. Results show type, version, status and owner context; owner and result links are independently clickable.</p>
<p>The daemon reads bounded metadata projections instead of loading complete catalogs, logs or workflow definitions. Results use stable cursor pagination; the interface debounces typing, cancels obsolete requests and rejects stale responses. Keyboard navigation and mobile access are supported. A local Apple M4 Pro benchmark with 100,000 execution records measured approximately 73–120 ms per search; this is a local benchmark, not a universal latency guarantee.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: Global search results"><img alt="Global search results" src="https://akoflow.com/assets/images/07-global-search-d657b3a78bb2d8fa1b34c0646b6515b6.png" width="1700" height="1150"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/07-global-search-d657b3a78bb2d8fa1b34c0646b6515b6.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/07-global-search-d657b3a78bb2d8fa1b34c0646b6515b6.png" loading="lazy" alt="Global search results"></dialog><p></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="navigate-infrastructure-by-ownership">Navigate infrastructure by ownership<a href="https://akoflow.com/blog/akoflow-1-0-14#navigate-infrastructure-by-ownership" class="hash-link" aria-label="Direct link to Navigate infrastructure by ownership" title="Direct link to Navigate infrastructure by ownership" translate="no">​</a></h2>
<p>The environment map uses a vertical ownership tree with separate local, cloud and simulation branches when configured. Resources and network links have explicit entry points. Simulation adapters without bound resources do not create empty branches, and Fit view helps navigate the graph. Availability observations remain separate from configuration.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: Environment ownership map"><img alt="Environment ownership map" src="https://akoflow.com/assets/images/08-environment-map-bb632c1d5972eff834138da76b694a7c.png" width="1700" height="1150"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/08-environment-map-bb632c1d5972eff834138da76b694a7c.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/08-environment-map-bb632c1d5972eff834138da76b694a7c.png" loading="lazy" alt="Environment ownership map"></dialog><p></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="inspect-resources-in-the-shared-drawer">Inspect resources in the shared drawer<a href="https://akoflow.com/blog/akoflow-1-0-14#inspect-resources-in-the-shared-drawer" class="hash-link" aria-label="Direct link to Inspect resources in the shared drawer" title="Direct link to Inspect resources in the shared drawer" translate="no">​</a></h2>
<p>Inspect resources and their recorded metadata in the shared full-height drawer, preserving opening/closing animations, focus handling and Escape dismissal. Search large resource lists and expand large HPC branches incrementally. Resource actions open their owning pages; on writable connected instances, available console actions hand sessions to the standard console bar instead of creating competing terminal views.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: Resource inspector"><img alt="Resource inspector" src="https://akoflow.com/assets/images/09-resource-inspector-4b4b27073a0ae008ed8b53f325147279.png" width="1700" height="1150"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/09-resource-inspector-4b4b27073a0ae008ed8b53f325147279.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/09-resource-inspector-4b4b27073a0ae008ed8b53f325147279.png" loading="lazy" alt="Resource inspector"></dialog><p></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="read-configured-network-links">Read configured network links<a href="https://akoflow.com/blog/akoflow-1-0-14#read-configured-network-links" class="hash-link" aria-label="Direct link to Read configured network links" title="Direct link to Read configured network links" translate="no">​</a></h2>
<p>Inspect configured bandwidth, latency and link metadata from the environment map. Optional animated flow respects motion preferences. Diagram arrows illustrate configured relationships, not measured live traffic. The screenshot shows archived simulation configuration.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: Network inspector"><img alt="Network inspector" src="https://akoflow.com/assets/images/10-network-inspector-9e0c4678fedb3524ba63748b078e8836.png" width="1700" height="1150"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/10-network-inspector-9e0c4678fedb3524ba63748b078e8836.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/10-network-inspector-9e0c4678fedb3524ba63748b078e8836.png" loading="lazy" alt="Network inspector"></dialog><p></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="find-resources-without-expanding-every-branch">Find resources without expanding every branch<a href="https://akoflow.com/blog/akoflow-1-0-14#find-resources-without-expanding-every-branch" class="hash-link" aria-label="Direct link to Find resources without expanding every branch" title="Direct link to Find resources without expanding every branch" translate="no">​</a></h2>
<p>The resource entry point opens a searchable side list. Filter recorded resources and inspect an item without losing the environment map. Available console actions on writable connected resources use the standard console bar.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: Searchable resource list"><img alt="Searchable resource list" src="https://akoflow.com/assets/images/12-resource-list-46eeaf2b7ae6d5bb6f03ffeefe9bfaef.png" width="1700" height="1150"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/12-resource-list-46eeaf2b7ae6d5bb6f03ffeefe9bfaef.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/12-resource-list-46eeaf2b7ae6d5bb6f03ffeefe9bfaef.png" loading="lazy" alt="Searchable resource list"></dialog><p></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="keep-large-hpc-environments-readable">Keep large HPC environments readable<a href="https://akoflow.com/blog/akoflow-1-0-14#keep-large-hpc-environments-readable" class="hash-link" aria-label="Direct link to Keep large HPC environments readable" title="Direct link to Keep large HPC environments readable" translate="no">​</a></h2>
<p>Large HPC branches initially show a small set of nodes and an explicit remaining count. Expand incrementally while keeping the full recorded inventory searchable. This archived environment contains 132 resources.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: Large HPC overview"><img alt="Large HPC overview" src="https://akoflow.com/assets/images/13-hpc-overview-6099843a232ade260bae0bf0d10033a9.png" width="1700" height="1150"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/13-hpc-overview-6099843a232ade260bae0bf0d10033a9.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/13-hpc-overview-6099843a232ade260bae0bf0d10033a9.png" loading="lazy" alt="Large HPC overview"></dialog><p></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="keep-the-same-tools-in-dark-mode">Keep the same tools in dark mode<a href="https://akoflow.com/blog/akoflow-1-0-14#keep-the-same-tools-in-dark-mode" class="hash-link" aria-label="Direct link to Keep the same tools in dark mode" title="Direct link to Keep the same tools in dark mode" translate="no">​</a></h2>
<p>Audit timelines, facets, filter menus and shared drawers use the current appearance settings in both light and dark themes.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: Audit in dark mode"><img alt="Audit in dark mode" src="https://akoflow.com/assets/images/11-audit-dark-b8b8b139fc5b76b92b08818c4a4f3904.png" width="1700" height="1150"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/11-audit-dark-b8b8b139fc5b76b92b08818c4a4f3904.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/11-audit-dark-b8b8b139fc5b76b92b08818c4a4f3904.png" loading="lazy" alt="Audit in dark mode"></dialog><p></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="other-improvements">Other improvements<a href="https://akoflow.com/blog/akoflow-1-0-14#other-improvements" class="hash-link" aria-label="Direct link to Other improvements" title="Direct link to Other improvements" translate="no">​</a></h2>
<ul>
<li class="">Workflow command fields show shell highlighting and syntax-validation state. Daemon syntax validation checks scripts without executing them.</li>
<li class="">Environment editing preserves persisted identities, saved configuration and unbound resources.</li>
<li class="">Audit drawers retain the shared wrapper through closing animations, and older daemon responses display actionable update guidance.</li>
<li class="">The database's complete initial schema now includes scheduler-plugin tables; startup no longer applies the former incremental schema migrations.</li>
<li class="">Global search remains available for read-only imported archives and follows the selected instance's data.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="install-and-update">Install and update<a href="https://akoflow.com/blog/akoflow-1-0-14#install-and-update" class="hash-link" aria-label="Direct link to Install and update" title="Direct link to Install and update" translate="no">​</a></h2>
<p>Get the <a href="https://github.com/UFFeScience/akoflow/releases/tag/v1.0.14" target="_blank" rel="noopener noreferrer" class="">1.0.14 release packages</a> or follow the <a href="https://akoflow.com/docs/downloads" target="_blank" rel="noopener noreferrer" class="">installation guide</a>. Desktop packages support macOS universal, Windows x64 and Linux x64. Matching daemon and BuildKit archives support Linux amd64 and arm64. Docker Desktop is required on macOS/Windows; Linux requires Docker Engine and Compose v2.</p>
<p>Read the database compatibility note above before updating an existing installation. Runtime archives are loaded locally by Desktop; no container-registry deployment is required.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="validation">Validation<a href="https://akoflow.com/blog/akoflow-1-0-14#validation" class="hash-link" aria-label="Direct link to Validation" title="Direct link to Validation" translate="no">​</a></h2>
<ul>
<li class="">Daemon: complete Go suite, architecture checks and <code>go vet</code> passed.</li>
<li class="">Desktop: 118 unit tests, 20 packaging/MCP/appearance contract tests, dependency-security checks, formatting and production build passed.</li>
<li class="">Browser: 86 development checks passed, with one production-only check skipped; 46 selected production checks passed, including the shortcuts screen in both themes.</li>
<li class="">Global search: matching, owner navigation, pagination, invalid cursors, cancellation, stale responses and a 100,000-record benchmark were checked.</li>
<li class="">Screenshot capture: 13 actual-interface images with capture provenance and no workload execution.</li>
</ul>
<p>Frozen source tags: <a href="https://github.com/UFFeScience/akoflow/tree/v1.0.14" target="_blank" rel="noopener noreferrer" class="">daemon and documentation</a> and <a href="https://github.com/UFFeScience/akoflow-desktop/tree/v1.0.14" target="_blank" rel="noopener noreferrer" class="">Desktop</a>. <a href="https://akoflow.com/blog/akoflow-1-0-14/" target="_blank" rel="noopener noreferrer" class="">Full release tour</a>.</p>]]></content:encoded>
            <category>Desktop</category>
            <category>Experiments</category>
        </item>
        <item>
            <title><![CDATA[AkôFlow 1.0.13 — workflow monitoring, files, logs and temporal events]]></title>
            <link>https://akoflow.com/blog/akoflow-1-0-13</link>
            <guid>https://akoflow.com/blog/akoflow-1-0-13</guid>
            <pubDate>Thu, 05 Nov 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Explore workflow outputs by producer, read complete and activity logs, and inspect temporal execution events.]]></description>
            <content:encoded><![CDATA[<p>AkôFlow 1.0.13 reorganizes execution monitoring around the workflow, its activities and the files they produce. This page describes changes since 1.0.12.</p>
<p>The screenshots below show the release candidate interface reading an existing completed six-activity Python workflow. Capturing them did not start a new execution. They demonstrate recorded observations, not a live filesystem listing. Capture provenance is stored alongside the images.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="workflow-overview">Workflow overview<a href="https://akoflow.com/blog/akoflow-1-0-13#workflow-overview" class="hash-link" aria-label="Direct link to Workflow overview" title="Direct link to Workflow overview" translate="no">​</a></h2>
<p>Follow the workflow as a whole: preparation artifacts, execution environments, recorded results and the execution plan. The unused external-input card has been removed.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: Workflow overview"><img alt="Workflow overview" src="https://akoflow.com/assets/images/01-workflow-overview-86a0fdaa7005a777ddae89a6f0be8bb1.png" width="1296" height="704"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/01-workflow-overview-86a0fdaa7005a777ddae89a6f0be8bb1.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/01-workflow-overview-86a0fdaa7005a777ddae89a6f0be8bb1.png" loading="lazy" alt="Workflow overview"></dialog><p></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="files-next-to-their-producer">Files next to their producer<a href="https://akoflow.com/blog/akoflow-1-0-13#files-next-to-their-producer" class="hash-link" aria-label="Direct link to Files next to their producer" title="Direct link to Files next to their producer" translate="no">​</a></h2>
<p>Workspace now connects activities to generated file nodes. Each activity previews its five largest files; the “…” node opens the complete list. Search activities or file paths in the explorer and click a result to focus the DAG. All, Path to activity, Branch, Fit view and fullscreen help navigate larger graphs.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: Files next to their producer"><img alt="Files next to their producer" src="https://akoflow.com/assets/images/02-workspace-files-de99c85fa3e13cc3f610704630cff85b.png" width="1296" height="780"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/02-workspace-files-de99c85fa3e13cc3f610704630cff85b.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/02-workspace-files-de99c85fa3e13cc3f610704630cff85b.png" loading="lazy" alt="Files next to their producer"></dialog><p></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="plan-versus-execution">Plan versus execution<a href="https://akoflow.com/blog/akoflow-1-0-13#plan-versus-execution" class="hash-link" aria-label="Direct link to Plan versus execution" title="Direct link to Plan versus execution" translate="no">​</a></h2>
<p>Compare planned and observed duration and cost, including absolute and relative differences. Activity counts and configured deadline/budget constraints remain explicit. Unconfigured constraints are not presented as satisfied SLAs. The Gantt charts retain their existing layout.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: Plan versus execution"><img alt="Plan versus execution" src="https://akoflow.com/assets/images/03-plan-comparison-e11df5c6bc6d4f050ba0510f51a0b331.png" width="1296" height="358"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/03-plan-comparison-e11df5c6bc6d4f050ba0510f51a0b331.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/03-plan-comparison-e11df5c6bc6d4f050ba0510f51a0b331.png" loading="lazy" alt="Plan versus execution"></dialog><p></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="search-activities-while-reading-logs">Search activities while reading logs<a href="https://akoflow.com/blog/akoflow-1-0-13#search-activities-while-reading-logs" class="hash-link" aria-label="Direct link to Search activities while reading logs" title="Direct link to Search activities while reading logs" translate="no">​</a></h2>
<p>A searchable activity explorer focuses the log DAG. The main log remains the complete run output.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: Search activities while reading logs"><img alt="Search activities while reading logs" src="https://akoflow.com/assets/images/04-log-navigation-848b5f8aaa7c0134c06bdf1438b51c19.png" width="1296" height="483"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/04-log-navigation-848b5f8aaa7c0134c06bdf1438b51c19.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/04-log-navigation-848b5f8aaa7c0134c06bdf1438b51c19.png" loading="lazy" alt="Search activities while reading logs"></dialog><p></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="complete-run-logs">Complete run logs<a href="https://akoflow.com/blog/akoflow-1-0-13#complete-run-logs" class="hash-link" aria-label="Direct link to Complete run logs" title="Direct link to Complete run logs" translate="no">​</a></h2>
<p>Search messages and sources, navigate matches, wrap lines, follow new output, copy visible output, download logs or use fullscreen. Raw output without recorded timestamps is not given invented timestamps.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: Complete run logs"><img alt="Complete run logs" src="https://akoflow.com/assets/images/05-complete-logs-29588663989a35a9a13f79729c379152.png" width="1296" height="788"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/05-complete-logs-29588663989a35a9a13f79729c379152.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/05-complete-logs-29588663989a35a9a13f79729c379152.png" loading="lazy" alt="Complete run logs"></dialog><p></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="activity-logs-in-a-drawer">Activity logs in a drawer<a href="https://akoflow.com/blog/akoflow-1-0-13#activity-logs-in-a-drawer" class="hash-link" aria-label="Direct link to Activity logs in a drawer" title="Direct link to Activity logs in a drawer" translate="no">​</a></h2>
<p>Click an activity to open its log in a side drawer without replacing the complete run log. View activity opens its execution details.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: Activity logs in a drawer"><img alt="Activity logs in a drawer" src="https://akoflow.com/assets/images/06-activity-log-drawer-5d3c8ebb19630dc8e70ffd253aed86f9.png" width="640" height="1120"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/06-activity-log-drawer-5d3c8ebb19630dc8e70ffd253aed86f9.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/06-activity-log-drawer-5d3c8ebb19630dc8e70ffd253aed86f9.png" loading="lazy" alt="Activity logs in a drawer"></dialog><p></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="activity-details">Activity details<a href="https://akoflow.com/blog/akoflow-1-0-13#activity-details" class="hash-link" aria-label="Direct link to Activity details" title="Direct link to Activity details" translate="no">​</a></h2>
<p>The activity drawer includes execution placement, timing, preparation and generated files, with a link to the owned activity page.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: Activity details"><img alt="Activity details" src="https://akoflow.com/assets/images/07-activity-details-11f8d99643d4dab338c8d83670d310a5.png" width="640" height="1120"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/07-activity-details-11f8d99643d4dab338c8d83670d310a5.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/07-activity-details-11f8d99643d4dab338c8d83670d310a5.png" loading="lazy" alt="Activity details"></dialog><p></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="preparation-belongs-to-the-activity">Preparation belongs to the activity<a href="https://akoflow.com/blog/akoflow-1-0-13#preparation-belongs-to-the-activity" class="hash-link" aria-label="Direct link to Preparation belongs to the activity" title="Direct link to Preparation belongs to the activity" translate="no">​</a></h2>
<p>Preparation is collapsible and updates during execution, with waiting, preparing, ready and failure states. Copy log reports clipboard success or failure. The separate run-wide Prerequisites tab has been removed.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: Preparation belongs to the activity"><img alt="Preparation belongs to the activity" src="https://akoflow.com/assets/images/08-activity-preparation-830efbc5a2f5c656a5d20e7b4ee4bc8f.png" width="1296" height="358"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/08-activity-preparation-830efbc5a2f5c656a5d20e7b4ee4bc8f.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/08-activity-preparation-830efbc5a2f5c656a5d20e7b4ee4bc8f.png" loading="lazy" alt="Preparation belongs to the activity"></dialog><p></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="generated-files-in-activity-details">Generated files in activity details<a href="https://akoflow.com/blog/akoflow-1-0-13#generated-files-in-activity-details" class="hash-link" aria-label="Direct link to Generated files in activity details" title="Direct link to Generated files in activity details" translate="no">​</a></h2>
<p>Both the activity page and drawer reuse the Workspace file component, filtered by producer. Inspect size, checksum and recorded locations. Deleted manifest entries are excluded; recorded locations may no longer exist after workspace cleanup.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: Generated files in activity details"><img alt="Generated files in activity details" src="https://akoflow.com/assets/images/09-generated-files-cdf231f74ad5ffcd0e60b42bd302e565.png" width="1296" height="247"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/09-generated-files-cdf231f74ad5ffcd0e60b42bd302e565.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/09-generated-files-cdf231f74ad5ffcd0e60b42bd302e565.png" loading="lazy" alt="Generated files in activity details"></dialog><p></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="temporal-events">Temporal events<a href="https://akoflow.com/blog/akoflow-1-0-13#temporal-events" class="hash-link" aria-label="Direct link to Temporal events" title="Direct link to Temporal events" translate="no">​</a></h2>
<p>Workflow and activity lanes place events at recorded times. Event types use distinct marker shapes, and search/type filters narrow the view. Use the selector for overlapping or untimed events and download the complete available event collection as JSON.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: Temporal events"><img alt="Temporal events" src="https://akoflow.com/assets/images/10-event-timeline-f7b1738d1f6b8c585069565152da437e.png" width="1296" height="673"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/10-event-timeline-f7b1738d1f6b8c585069565152da437e.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/10-event-timeline-f7b1738d1f6b8c585069565152da437e.png" loading="lazy" alt="Temporal events"></dialog><p></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="event-details-and-phase-observations">Event details and phase observations<a href="https://akoflow.com/blog/akoflow-1-0-13#event-details-and-phase-observations" class="hash-link" aria-label="Direct link to Event details and phase observations" title="Direct link to Event details and phase observations" translate="no">​</a></h2>
<p>Click a marker to inspect its data in a side drawer. Reconstructed timing observations carry an explicit source, duration and recorded timestamps; they are derived observations, not additional persisted audit events.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: Event details and phase observations"><img alt="Event details and phase observations" src="https://akoflow.com/assets/images/11-phase-event-details-97757fb1c9b4d6ef9d5eafdbc470126c.png" width="640" height="1120"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/11-phase-event-details-97757fb1c9b4d6ef9d5eafdbc470126c.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/11-phase-event-details-97757fb1c9b4d6ef9d5eafdbc470126c.png" loading="lazy" alt="Event details and phase observations"></dialog><p></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="timing-totals-with-explanations">Timing totals with explanations<a href="https://akoflow.com/blog/akoflow-1-0-13#timing-totals-with-explanations" class="hash-link" aria-label="Direct link to Timing totals with explanations" title="Direct link to Timing totals with explanations" translate="no">​</a></h2>
<p>Execution-time decomposition keeps aggregate totals and explains each phase. The duplicate per-activity phase table has moved into Events. Accumulated work can exceed elapsed wall time because activities overlap.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: Timing totals with explanations"><img alt="Timing totals with explanations" src="https://akoflow.com/assets/images/12-time-decomposition-ad88674f23107d97ab75239135416095.png" width="1296" height="712"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/12-time-decomposition-ad88674f23107d97ab75239135416095.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/12-time-decomposition-ad88674f23107d97ab75239135416095.png" loading="lazy" alt="Timing totals with explanations"></dialog><p></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="appearance-and-readability">Appearance and readability<a href="https://akoflow.com/blog/akoflow-1-0-13#appearance-and-readability" class="hash-link" aria-label="Direct link to Appearance and readability" title="Direct link to Appearance and readability" translate="no">​</a></h2>
<p>Desktop is the default interface style, with Simple available in Settings. Neutral actions, opaque surfaces, compact navigation and corrected selected-item contrast improve light/dark readability. Desktop appearance preferences survive local-server port changes and application restarts.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: Appearance and readability"><img alt="Appearance and readability" src="https://akoflow.com/assets/images/13-dark-comparison-ef30974137f67900349955fa993da13f.png" width="1296" height="358"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/13-dark-comparison-ef30974137f67900349955fa993da13f.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/13-dark-comparison-ef30974137f67900349955fa993da13f.png" loading="lazy" alt="Appearance and readability"></dialog><p></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="other-changes-since-1012">Other changes since 1.0.12<a href="https://akoflow.com/blog/akoflow-1-0-13#other-changes-since-1012" class="hash-link" aria-label="Direct link to Other changes since 1.0.12" title="Direct link to Other changes since 1.0.12" translate="no">​</a></h2>
<ul>
<li class="">Workflow shell commands can be checked for POSIX shell syntax through the daemon validation endpoint before execution. Validation does not execute the command.</li>
<li class="">MCP activation no longer requires a detected native AI client; manual connection configuration remains available. MCP itself was introduced in 1.0.12.</li>
<li class="">Research tooling is archived outside runtime packages, and downloadable scheduling snippets are isolated from daemon packages.</li>
<li class="">Documentation now includes the MCP hands-on workflow tutorial and generated public release history.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="install-and-update">Install and update<a href="https://akoflow.com/blog/akoflow-1-0-13#install-and-update" class="hash-link" aria-label="Direct link to Install and update" title="Direct link to Install and update" translate="no">​</a></h2>
<p>Get the <a href="https://github.com/UFFeScience/akoflow/releases/tag/v1.0.13" target="_blank" rel="noopener noreferrer" class="">1.0.13 release packages</a> or follow the <a class="" href="https://akoflow.com/docs/downloads">installation guide</a>. Desktop packages are available for macOS universal, Windows x64 and Linux x64. Matching daemon and BuildKit runtime archives support Linux amd64 and arm64. Docker remains required.</p>
<p>See <a class="" href="https://akoflow.com/docs/guides/workflows/executions">execution monitoring</a> for the updated navigation and interpretation of timing observations.</p>]]></content:encoded>
            <category>Desktop</category>
            <category>Experiments</category>
        </item>
        <item>
            <title><![CDATA[AkôFlow 1.0.12 brings MCP to Claude and Codex]]></title>
            <link>https://akoflow.com/blog/create-workflows-with-claude-and-codex</link>
            <guid>https://akoflow.com/blog/create-workflows-with-claude-and-codex</guid>
            <pubDate>Wed, 04 Nov 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[AkôFlow 1.0.12 introduces MCP integration. Connect Claude or Codex to create, execute and inspect scientific workflows, with a hands-on example.]]></description>
            <content:encoded><![CDATA[<p><strong>Starting with version 1.0.12, AkôFlow includes MCP integration to connect AI apps such as Claude and Codex directly to its workflow engine.</strong> You can now describe an experiment in a conversation and ask your assistant to create workflow definitions, prepare execution plans, start runs and inspect their results through AkôFlow tools.</p>
<p>MCP—Model Context Protocol—provides that connection. The assistant works with the same persisted definitions, plans and runs that you see in Desktop, using the permissions you grant to its connection. The <a class="" href="https://akoflow.com/docs/changelog">1.0.12 release</a> brings managed app connections, native client setup, connection verification, credential rotation and revocation.</p>
<p>This tutorial takes that connection from setup to a result you can inspect: three activities turn the measurements <strong>2, 4 and 6</strong> into a report containing <strong><code>Mean: 4.00</code></strong>. You will connect your AI app, give it focused prompts, inspect the saved DAG, and execute the workflow on a local Docker runtime.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-you-need">What you need<a href="https://akoflow.com/blog/create-workflows-with-claude-and-codex#what-you-need" class="hash-link" aria-label="Direct link to What you need" title="Direct link to What you need" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://akoflow.com/docs/installation">AkôFlow Desktop and its matching runtime</a>, open and showing <strong>Connected</strong>.</li>
<li class="">Docker running on the machine that executes the activities.</li>
<li class="">A local Codex client, Claude Code, or a supported Claude Desktop installation.</li>
<li class="">An internet connection for the first BusyBox image download.</li>
</ul>
<p>The setup screenshots below come from real, isolated homeserver Desktop captures. The 1.0.12 setup verifies the complete administration catalog; this tutorial only needs <strong>Operate workflows</strong>. Your connection paths, tool count and instance names will differ. The workflow and execution screenshots show the separate homeserver demonstration made for this post.</p>
<p>The native setup and connector were tested with real MCP clients. These are AkôFlow screenshots, not screenshots of an authenticated Claude or Codex conversation. The prompts are instructions for you to run in your own AI app; wording and approval dialogs can vary between clients.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-enable-mcp-and-choose-an-app">1. Enable MCP and choose an app<a href="https://akoflow.com/blog/create-workflows-with-claude-and-codex#1-enable-mcp-and-choose-an-app" class="hash-link" aria-label="Direct link to 1. Enable MCP and choose an app" title="Direct link to 1. Enable MCP and choose an app" translate="no">​</a></h2>
<p>Open <strong>Settings → MCP &amp; AI apps</strong>, then select <strong>Enable MCP</strong>.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: MCP settings with the service disabled before activation"><img alt="MCP settings with the service disabled before activation" src="https://akoflow.com/assets/images/01-mcp-disabled-cf47706c788c574eafbb6af0ee6d0b1f.png" width="1280" height="860"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/01-mcp-disabled-cf47706c788c574eafbb6af0ee6d0b1f.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/01-mcp-disabled-cf47706c788c574eafbb6af0ee6d0b1f.png" loading="lazy" alt="MCP settings with the service disabled before activation"></dialog><p></p>
<p>Select <strong>Add app</strong>, choose your client and give the connection a recognizable name, such as <code>Codex — workflow learning</code>. Select <strong>Operate workflows</strong>, then <strong>Create connection</strong>.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: The app selector, connection name and permission choices in AkôFlow Desktop"><img alt="The app selector, connection name and permission choices in AkôFlow Desktop" src="https://akoflow.com/assets/images/02-mcp-permissions-12dcf43f4ba8767eebf45d51f6a37e36.png" width="1280" height="860"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/02-mcp-permissions-12dcf43f4ba8767eebf45d51f6a37e36.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/02-mcp-permissions-12dcf43f4ba8767eebf45d51f6a37e36.png" loading="lazy" alt="The app selector, connection name and permission choices in AkôFlow Desktop"></dialog><p></p>
<p>The reference screenshot has <strong>Full administration</strong> selected to verify its complete catalog. For this walkthrough, select <strong>Operate workflows</strong> instead. <strong>Read only</strong> can inspect records but cannot create the workflow. Create a separate connection for each AI app so you can revoke one independently.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-install-the-generated-client-configuration">2. Install the generated client configuration<a href="https://akoflow.com/blog/create-workflows-with-claude-and-codex#2-install-the-generated-client-configuration" class="hash-link" aria-label="Direct link to 2. Install the generated client configuration" title="Direct link to 2. Install the generated client configuration" translate="no">​</a></h2>
<p>AkôFlow generates a local <strong>stdio</strong> connection. The AI app starts the bundled connector on the same computer as Desktop. Keep Desktop open while using it.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: The generated Codex configuration and its native installation action"><img alt="The generated Codex configuration and its native installation action" src="https://akoflow.com/assets/images/03-mcp-configuration-ca2e695d87d90b7ecc6343b04914a05c.png" width="1280" height="860"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/03-mcp-configuration-ca2e695d87d90b7ecc6343b04914a05c.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/03-mcp-configuration-ca2e695d87d90b7ecc6343b04914a05c.png" loading="lazy" alt="The generated Codex configuration and its native installation action"></dialog><p></p>
<p>Use the entry generated by your installation. The executable, helper and private connection-file paths in these screenshots belong to the documentation machine. Do not copy those paths into your own configuration.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="codex">Codex<a href="https://akoflow.com/blog/create-workflows-with-claude-and-codex#codex" class="hash-link" aria-label="Direct link to Codex" title="Direct link to Codex" translate="no">​</a></h3>
<ol>
<li class="">Select <strong>Add to Codex</strong> in the setup dialog.</li>
<li class="">Fully quit and reopen the app, then start a <strong>new local chat</strong>. For Codex CLI, start a new session.</li>
<li class="">In the CLI, use <code>/mcp</code> to check active servers. <code>codex mcp list</code> lists configured servers.</li>
</ol>
<p>AkôFlow writes its entry into the local Codex configuration, preserving other servers. If you use a custom configuration location, use <strong>Copy configuration</strong> or <strong>Open config</strong> to merge the generated entry into the configuration your client actually loads. Codex supports local stdio servers through <code>config.toml</code>; see the <a href="https://developers.openai.com/codex/mcp" target="_blank" rel="noopener noreferrer" class="">official Codex MCP documentation</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="claude-code">Claude Code<a href="https://akoflow.com/blog/create-workflows-with-claude-and-codex#claude-code" class="hash-link" aria-label="Direct link to Claude Code" title="Direct link to Claude Code" translate="no">​</a></h3>
<ol>
<li class="">Choose <strong>Claude Code</strong> when creating the connection.</li>
<li class="">Select <strong>Add to Claude Code</strong> in its setup dialog.</li>
<li class="">Close the current Claude Code session and start a new one on this computer.</li>
<li class="">Use <code>/mcp</code> to inspect the connection.</li>
</ol>
<p>AkôFlow installs a user-level stdio entry in <code>~/.claude.json</code>, preserving existing settings. For custom setups, use the generated entry and the <a href="https://code.claude.com/docs/en/mcp" target="_blank" rel="noopener noreferrer" class="">official Claude Code MCP guide</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="claude-desktop">Claude Desktop<a href="https://akoflow.com/blog/create-workflows-with-claude-and-codex#claude-desktop" class="hash-link" aria-label="Direct link to Claude Desktop" title="Direct link to Claude Desktop" translate="no">​</a></h3>
<p>On macOS or Windows, choose <strong>Claude Desktop</strong> and select <strong>Add to Claude Desktop</strong>. For manual setup, use <strong>Copy configuration</strong>, open <strong>Settings → Developer → Edit Config</strong> in Claude Desktop, and merge the generated server into <code>mcpServers</code>. Preserve other entries. Fully quit and reopen Claude Desktop, then begin a new conversation.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: Claude Desktop configuration in the Linux reference installation, showing the manual copy flow"><img alt="Claude Desktop configuration in the Linux reference installation, showing the manual copy flow" src="https://akoflow.com/assets/images/08-desktop-claude-configuration-cb3a56712957c935a51e97a7cd5ed293.png" width="1440" height="1000"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/08-desktop-claude-configuration-cb3a56712957c935a51e97a7cd5ed293.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/08-desktop-claude-configuration-cb3a56712957c935a51e97a7cd5ed293.png" loading="lazy" alt="Claude Desktop configuration in the Linux reference installation, showing the manual copy flow"></dialog><p></p>
<p>This Linux reference capture shows the copy-only fallback. Use the installation method that your AkôFlow setup dialog offers. The <a href="https://modelcontextprotocol.io/docs/develop/connect-local-servers" target="_blank" rel="noopener noreferrer" class="">local MCP setup guide</a> explains Claude Desktop's configuration and restart flow.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-verify-both-ends-of-the-connection">3. Verify both ends of the connection<a href="https://akoflow.com/blog/create-workflows-with-claude-and-codex#3-verify-both-ends-of-the-connection" class="hash-link" aria-label="Direct link to 3. Verify both ends of the connection" title="Direct link to 3. Verify both ends of the connection" translate="no">​</a></h2>
<p>In AkôFlow, select <strong>Test MCP connection</strong>. A successful test authenticates a real MCP client, discovers the tools permitted for this connection, and reads the daemon identity.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: A successful native MCP connection test in AkôFlow 1.0.12"><img alt="A successful native MCP connection test in AkôFlow 1.0.12" src="https://akoflow.com/assets/images/04-mcp-verified-5af38e9dcd9671ef351028baf09eb8c9.png" width="1280" height="860"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/04-mcp-verified-5af38e9dcd9671ef351028baf09eb8c9.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/04-mcp-verified-5af38e9dcd9671ef351028baf09eb8c9.png" loading="lazy" alt="A successful native MCP connection test in AkôFlow 1.0.12"></dialog><p></p>
<p>Now send this prompt in your AI app:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">Use the AkôFlow MCP tools to identify my connected AkôFlow instance</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">and list my workflows and available environments. If a list is empty,</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">tell me. Do not create or modify anything.</span><br></div></code></pre></div></div>
<p><strong>Checkpoint:</strong> the assistant makes an AkôFlow tool call and returns records from your instance, or an explicit empty list. An answer saying “I can help with AkôFlow” does not verify the connection. If it has no tools, reconnect its MCP server or restart the AI app.</p>
<p>The native test verifies the service. This first request verifies that <strong>your AI app</strong> loaded the server.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-ask-for-a-concrete-workflow">4. Ask for a concrete workflow<a href="https://akoflow.com/blog/create-workflows-with-claude-and-codex#4-ask-for-a-concrete-workflow" class="hash-link" aria-label="Direct link to 4. Ask for a concrete workflow" title="Direct link to 4. Ask for a concrete workflow" translate="no">​</a></h2>
<p>Start with a small experiment whose answer you know. Send:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">Use AkôFlow MCP to create a workflow named mcp-first-analysis in</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">namespace learning. First check whether that name already exists;</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">if it does, show it and do not overwrite it.</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">Use docker.io/library/busybox:1.36 with OCI delivery and sh -c.</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">Create three activities, each limited to 0.1 CPU and 32Mi memory:</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">1. prepare: write the values 2, 4 and 6, one per line, to measurements.txt.</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">2. analyze: depend on prepare, read measurements.txt, and use awk to</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">   write the arithmetic mean with two decimal places to mean.txt.</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">3. write-report: depend on analyze and write Mean: 4.00 to report.txt,</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">   deriving the value from mean.txt rather than hardcoding the answer.</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">Print each activity's output in its log and declare its output file</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">in expectedOutputs. Show the definition, create it through the MCP</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">tool, then read it back and return its workflow and version IDs.</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">Do not create a plan or start execution yet.</span><br></div></code></pre></div></div>
<figure aria-label="MCP first analysis activity DAG"><button type="button" class="thumbnail__JRY" aria-label="Enlarge DAG: MCP first analysis"></button><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><div class="largeDiagram_oYyn"></div></dialog></figure>
<table><thead><tr><th>Activity</th><th>Depends on</th><th>Output</th></tr></thead><tbody><tr><td><code>prepare</code></td><td>—</td><td><code>measurements.txt</code>: 2, 4, 6</td></tr><tr><td><code>analyze</code></td><td><code>prepare</code></td><td><code>mean.txt</code>: <code>4.00</code></td></tr><tr><td><code>write-report</code></td><td><code>analyze</code></td><td><code>report.txt</code>: <code>Mean: 4.00</code></td></tr></tbody></table>
<p>Open <strong>Workflows → Definitions → mcp-first-analysis</strong> in Desktop. The saved workflow must have three activities and two dependency arrows.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: The three-activity workflow created through MCP in the homeserver demonstration"><img alt="The three-activity workflow created through MCP in the homeserver demonstration" src="https://akoflow.com/assets/images/workflow-ead65aa909ed03fc3b51e4c9c58e60d0.png" width="1440" height="1000"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/workflow-ead65aa909ed03fc3b51e4c9c58e60d0.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/workflow-ead65aa909ed03fc3b51e4c9c58e60d0.png" loading="lazy" alt="The three-activity workflow created through MCP in the homeserver demonstration"></dialog><p></p>
<p><strong>Checkpoint:</strong> compare the saved definition with the table. A chat response containing YAML is only a draft until the creation tool succeeds and readback confirms the record. Creating the definition does not execute it.</p>
<p>For an exact reference, <a href="https://akoflow.com/assets/files/mcp-first-analysis-b4c986e4739a3a70df68a06bb3d9b9d0.yaml" target="_blank" class="">download the complete workflow YAML</a>. It uses <code>command.executable.source</code> for the container image, <code>dependsOn</code> for ordering, and <code>expectedOutputs</code> for required files. AkôFlow stages a predecessor's workspace before its dependent activity starts. Each activity writes a different output filename.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="5-select-where-it-will-run">5. Select where it will run<a href="https://akoflow.com/blog/create-workflows-with-claude-and-codex#5-select-where-it-will-run" class="hash-link" aria-label="Direct link to 5. Select where it will run" title="Direct link to 5. Select where it will run" translate="no">​</a></h2>
<p>If you have no local environment yet, follow <a class="" href="https://akoflow.com/blog/from-a-dag-to-your-first-run">Connect your local machine and create a scope</a>. Test the connection before saving the environment and confirm it is online. An execution scope selects the environment versions offered to planning.</p>
<p>Ask the assistant to discover those records:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">Use AkôFlow MCP to inspect mcp-first-analysis and list execution scopes,</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">their environments, resources, runtime bindings and connection health.</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">Find a scope with a healthy local execution runtime that supports OCI</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">containers. Return the exact persisted IDs and explain the selection.</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">Do not provision cloud resources or execute anything. If no suitable</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">scope exists, tell me what I need to configure in Desktop.</span><br></div></code></pre></div></div>
<p>Then request the plan, replacing the bracketed text with the scope you reviewed:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">Create a manual plan for the saved version of mcp-first-analysis using</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">[my reviewed local scope]. Resolve IDs from the persisted records.</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">Assign all three activities to its local resource and execution runtime.</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">Use one second per activity as a planning estimate, preserve dependency</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">order, and save the plan through MCP. Read it back and return its ID,</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">assignments, runtime selection and execution mode. Do not execute yet.</span><br></div></code></pre></div></div>
<p>Review the saved plan in Desktop. <strong>One second is an estimate</strong>, not a measured duration or timeout. The first image download may take longer. The homeserver demonstration used one local Docker resource; it did not allocate cloud machines or use simulation.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="6-execute-once-and-wait-for-evidence">6. Execute once and wait for evidence<a href="https://akoflow.com/blog/create-workflows-with-claude-and-codex#6-execute-once-and-wait-for-evidence" class="hash-link" aria-label="Direct link to 6. Execute once and wait for evidence" title="Direct link to 6. Execute once and wait for evidence" translate="no">​</a></h2>
<p>When the plan matches your intent, send:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">Start one real execution of the reviewed plan for mcp-first-analysis.</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">Use a unique run ID and return it as soon as submission succeeds.</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">Poll that run until it reaches a terminal state. Do not resubmit it</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">because it is pending or running. If it fails, inspect its activity</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">errors and report the cause before creating any replacement run.</span><br></div></code></pre></div></div>
<p>Open <strong>Workflows → Definitions → mcp-first-analysis → Plans</strong>, open the selected plan, and open its execution. Wait for <strong>completed</strong> and <strong>3/3</strong> completed activities.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: The real homeserver execution completed all three activities"><img alt="The real homeserver execution completed all three activities" src="https://akoflow.com/assets/images/completed-run-a5aeeb8ae108685d63b9fe1c78578f22.png" width="1440" height="1000"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/completed-run-a5aeeb8ae108685d63b9fe1c78578f22.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/completed-run-a5aeeb8ae108685d63b9fe1c78578f22.png" loading="lazy" alt="The real homeserver execution completed all three activities"></dialog><p></p>
<p>MCP submissions can return an operation or pending receipt before the work finishes. Submission success is not execution success. Keep the returned identifier and inspect that same operation or run instead of starting duplicates.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="7-read-the-result-not-just-the-status">7. Read the result, not just the status<a href="https://akoflow.com/blog/create-workflows-with-claude-and-codex#7-read-the-result-not-just-the-status" class="hash-link" aria-label="Direct link to 7. Read the result, not just the status" title="Direct link to 7. Read the result, not just the status" translate="no">​</a></h2>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">Inspect the completed run using AkôFlow MCP. Report each activity's</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">status and exit code, inspect the final activity output and generated</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">files, and verify that report.txt contains Mean: 4.00. Include file</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">checksums when available and the workflow, plan and run IDs.</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">Distinguish files listed in metadata from file contents actually read.</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">If content cannot be retrieved, say so instead of inferring it.</span><br></div></code></pre></div></div>
<p>In Desktop, open the run's <strong>Activities</strong>, select <strong>write-report</strong>, and open its activity detail page. Inspect <strong>Activity output</strong> and <strong>Generated files</strong>.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: The final activity output and generated files in the real demonstration"><img alt="The final activity output and generated files in the real demonstration" src="https://akoflow.com/assets/images/activity-output-6a4f0365dd19e9991adecd2a8b968088.png" width="1440" height="1000"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/activity-output-6a4f0365dd19e9991adecd2a8b968088.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/activity-output-6a4f0365dd19e9991adecd2a8b968088.png" loading="lazy" alt="The final activity output and generated files in the real demonstration"></dialog><p></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="follow-the-data-through-the-workflow">Follow the data through the workflow<a href="https://akoflow.com/blog/create-workflows-with-claude-and-codex#follow-the-data-through-the-workflow" class="hash-link" aria-label="Direct link to Follow the data through the workflow" title="Direct link to Follow the data through the workflow" translate="no">​</a></h3>
<p>Open the run’s <strong>Workspaces &amp; data</strong> tab. The activity/file graph connects each producer to its recorded output: <code>prepare</code> produces <code>measurements.txt</code>, <code>analyze</code> produces <code>mean.txt</code>, and <code>write-report</code> produces <code>report.txt</code>.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: The real run’s data graph links each activity to the file it generated"><img alt="The real run’s data graph links each activity to the file it generated" src="https://akoflow.com/assets/images/run-data-b2d469f4fc8800cd6b82c5dcc2f681be.png" width="1440" height="1000"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/run-data-b2d469f4fc8800cd6b82c5dcc2f681be.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/run-data-b2d469f4fc8800cd6b82c5dcc2f681be.png" loading="lazy" alt="The real run’s data graph links each activity to the file it generated"></dialog><p></p>
<p>Open <strong>prepare</strong> and scroll to <strong>Activity output</strong> to check the actual input values. The log prints <code>2</code>, <code>4</code> and <code>6</code>; the generated-file record identifies <code>measurements.txt</code> and its checksum.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: The prepare activity prints the input measurements and records measurements.txt with its checksum"><img alt="The prepare activity prints the input measurements and records measurements.txt with its checksum" src="https://akoflow.com/assets/images/prepare-data-6da4e96effea6e5d65e3a4e5c9c8e863.png" width="1440" height="1000"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/prepare-data-6da4e96effea6e5d65e3a4e5c9c8e863.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/prepare-data-6da4e96effea6e5d65e3a4e5c9c8e863.png" loading="lazy" alt="The prepare activity prints the input measurements and records measurements.txt with its checksum"></dialog><p></p>
<p>Open <strong>analyze</strong> to inspect the intermediate result. Its output is <code>4.00</code>, and its generated file is <code>mean.txt</code>.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: The analyze activity prints 4.00 and records mean.txt with its checksum"><img alt="The analyze activity prints 4.00 and records mean.txt with its checksum" src="https://akoflow.com/assets/images/analyze-data-598059bf461657f1ffc3103ba5269f88.png" width="1440" height="1000"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/analyze-data-598059bf461657f1ffc3103ba5269f88.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/analyze-data-598059bf461657f1ffc3103ba5269f88.png" loading="lazy" alt="The analyze activity prints 4.00 and records mean.txt with its checksum"></dialog><p></p>
<p>Back in <strong>Workspaces &amp; data</strong>, scroll to the recorded file locations and <strong>Data transfers</strong>. The demonstration records two workspace transfers totaling <strong>17 bytes</strong>. These transfers stage predecessor workspaces, so the second transfer includes the intermediate workspace’s files; its byte count is not just the size of <code>mean.txt</code>. Recorded locations describe execution evidence and may become unavailable after ephemeral workspaces are released.</p>
<p><button type="button" class="thumbnail__JRY" aria-label="Enlarge image: Recorded file locations and the two data transfers between the workflow activities"><img alt="Recorded file locations and the two data transfers between the workflow activities" src="https://akoflow.com/assets/images/data-transfers-b89f4e72d1b510a001759fb0cd285546.png" width="1440" height="1000"></button></p><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><a href="https://akoflow.com/assets/images/data-transfers-b89f4e72d1b510a001759fb0cd285546.png" target="_blank" rel="noreferrer" class="original_FAo3">Open full resolution ↗</a><img src="https://akoflow.com/assets/images/data-transfers-b89f4e72d1b510a001759fb0cd285546.png" loading="lazy" alt="Recorded file locations and the two data transfers between the workflow activities"></dialog><p></p>
<p>The demonstration created <code>mcp-first-analysis</code>, saved <code>mcp-analysis-plan</code>, and executed <code>mcp-analysis-run</code>. The real run completed all three activities. Reading the final workspace file confirmed:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">Mean: 4.00</span><br></div></code></pre></div></div>
<p>The workflow creation, planning, submission and status retrieval went through a real stdio MCP client on the homeserver. The final file contents were additionally checked directly in the isolated runtime workspace. <a href="https://akoflow.com/assets/files/observed-results-9a5c846b73b792aa9f395c23d6e0e7c8.json" target="_blank" class="">Download the observed verification record</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="more-prompts-to-try">More prompts to try<a href="https://akoflow.com/blog/create-workflows-with-claude-and-codex#more-prompts-to-try" class="hash-link" aria-label="Direct link to More prompts to try" title="Direct link to More prompts to try" translate="no">​</a></h2>
<p>Change one aspect at a time so you can explain the result.</p>
<p><strong>A new dataset:</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">Create a new workflow named mcp-analysis-10-20-30 using the same</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">three-stage structure, but with values 10, 20 and 30. Preserve the</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">original workflow. Show the changed commands and expected answer</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">before saving the new definition. Do not execute yet.</span><br></div></code></pre></div></div>
<p><strong>Independent branches:</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">Draft a workflow that prepares measurements, computes the mean and</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">maximum in independent activities, then joins both into one report.</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">Show its DAG and file handoffs. Add dependencies only where a stage</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">needs its predecessor's files, and use distinct output filenames.</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">Explain whether my selected resource capacity permits parallel work.</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">Do not save or execute until I review the draft.</span><br></div></code></pre></div></div>
<p><strong>Investigate a failure:</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">Inspect run [run ID] through AkôFlow MCP. Find the first failing</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">activity, quote the relevant error briefly, and distinguish an image,</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">connection, planning or command failure. Propose the smallest fix.</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">Do not change infrastructure or retry the run yet.</span><br></div></code></pre></div></div>
<p><strong>Prepare a reproducibility summary:</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">Summarize run [run ID] using persisted AkôFlow records: workflow version,</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">container reference and resolved digest if recorded, scope, assignments,</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">activity outcomes, output paths and available checksums. Mark missing</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">evidence explicitly. Do not treat planned durations as measurements.</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="when-a-step-does-not-work">When a step does not work<a href="https://akoflow.com/blog/create-workflows-with-claude-and-codex#when-a-step-does-not-work" class="hash-link" aria-label="Direct link to When a step does not work" title="Direct link to When a step does not work" translate="no">​</a></h2>
<table><thead><tr><th>Symptom</th><th>Next check</th></tr></thead><tbody><tr><td>AkôFlow verifies MCP but the assistant has no tools</td><td>Restart the client, start a new local session, and inspect its active MCP servers.</td></tr><tr><td>The assistant can list records but cannot create them</td><td>Recreate its connection with <strong>Operate workflows</strong>.</td></tr><tr><td>Configuration points to another computer or an old application path</td><td>Generate it again from the Desktop installation on the client machine.</td></tr><tr><td>No healthy local runtime appears</td><td>Test the environment connection and inspect its resource/runtime binding.</td></tr><tr><td>A run is pending</td><td>Inspect its operation and run events; keep polling the same ID.</td></tr><tr><td>The first activity cannot start</td><td>Inspect its error and Docker/image availability before retrying.</td></tr><tr><td><code>analyze</code> cannot find <code>measurements.txt</code></td><td>Check the dependency, predecessor outcome and workspace-staging evidence.</td></tr><tr><td>The run completes but the answer differs</td><td>Read the saved commands and actual files; verify the input values and formatting.</td></tr></tbody></table>
<p>Use <strong>Disable MCP</strong> to pause connections, <strong>Rotate credential</strong> to replace a connection's credential, or <strong>Revoke access</strong> to remove one app's access. Reconnect the AI app after rotation. Keep secret values out of prompts and use the generated private references.</p>
<p>You now have a reusable pattern: describe a checkable experiment, save and inspect its definition, select a compatible execution scope, review a plan, execute once, and inspect the evidence. Continue with <a class="" href="https://akoflow.com/docs/guides/workflows/definitions">workflow authoring</a>, <a class="" href="https://akoflow.com/docs/guides/workflows/planning">planning</a>, and the <a class="" href="https://akoflow.com/docs/guides/operations/mcp-ai-apps">MCP setup and permissions guide</a>.</p>]]></content:encoded>
            <category>Getting started</category>
            <category>Desktop</category>
            <category>Experiments</category>
        </item>
        <item>
            <title><![CDATA[From a DAG to your first AkôFlow run]]></title>
            <link>https://akoflow.com/blog/from-a-dag-to-your-first-run</link>
            <guid>https://akoflow.com/blog/from-a-dag-to-your-first-run</guid>
            <pubDate>Wed, 21 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[With AkôFlow Desktop installed, follow annotated screenshots to create your first local workflow, execute it, and inspect its output.]]></description>
            <content:encoded><![CDATA[<p>With AkôFlow Desktop already installed, your first experiment can start on your own workstation. Describe one activity in YAML, select your local machine, and watch a real execution produce a file. Then turn that first activity into a small analysis pipeline.</p>
<p>This walkthrough uses <strong>AkôFlow Desktop throughout</strong>. Desktop starts its matching local services and manages the connection to the engine. You do not need to clone the source repository, start a development Compose stack, or copy an API token.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-you-will-build">What you will build<a href="https://akoflow.com/blog/from-a-dag-to-your-first-run#what-you-will-build" class="hash-link" aria-label="Direct link to What you will build" title="Direct link to What you will build" translate="no">​</a></h2>
<p>Begin with <code>write-report</code>: one activity that writes <code>result.txt</code> and prints its contents in the activity log. This checks the complete path from a definition to a local execution and its recorded output.</p>
<p>After that succeeds, import a second YAML with three activities: prepare three measurements, compute their mean, and write a report. The expected answer is <strong>4.00</strong>.</p>
<p>Both examples use a small BusyBox container on your local Docker engine. They perform <strong>real execution</strong>. They do not simulate work or allocate cloud machines.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-begin-after-desktop-is-installed">1. Begin after Desktop is installed<a href="https://akoflow.com/blog/from-a-dag-to-your-first-run#1-begin-after-desktop-is-installed" class="hash-link" aria-label="Direct link to 1. Begin after Desktop is installed" title="Direct link to 1. Begin after Desktop is installed" translate="no">​</a></h2>
<p>This walkthrough starts <strong>after installing AkôFlow Desktop</strong>. If you still need the application, follow <a class="" href="https://akoflow.com/docs/installation">Install AkôFlow Desktop</a>, then return here.</p>
<ol>
<li class="">Start Docker and open the installed AkôFlow Desktop application.</li>
<li class="">Let the engine checkup finish and wait for <strong>Overview</strong>.</li>
<li class="">Confirm <strong>Connected</strong> at the bottom-left corner.</li>
<li class="">Start with <strong>Infrastructure → Environments</strong> in the sidebar.</li>
</ol>
<p>The screenshots below were captured from the actual interface. They show the controls using an existing reference instance: its workflow is named <code>hello</code>, its activity is <code>a</code>, and its local environment is <code>Local environment</code>. <strong>For your experiment, enter the tutorial names <code>first-local-check</code>, <code>write-report</code>, <code>Local check</code>, and <code>First local scope</code>.</strong> Your fresh catalogs may be empty. The reference run's counts and files are identified in each caption rather than presented as your experiment's results.</p>
<p>Each red number has a matching instruction below the image. <strong>Click a screenshot to enlarge it with its arrows</strong>; on a phone, scroll the enlarged view sideways to read the controls.</p>
<figure class="figure_T25B"><figcaption><strong>Begin on Overview after installation</strong><p>The capture shows an existing instance. Your fresh installation can have empty catalogs.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Begin on Overview after installation"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/desktop-connected.jpg" alt="Begin on Overview after installation" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_18bqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="210" y1="590" x2="90" y2="646" stroke="white" stroke-width="7"></line><line x1="210" y1="590" x2="90" y2="646" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_18bqfdeh_)"></line><circle cx="210" cy="590" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="210" y="590" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="200" y1="235" x2="115" y2="292" stroke="white" stroke-width="7"></line><line x1="200" y1="235" x2="115" y2="292" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_18bqfdeh_)"></line><circle cx="200" cy="235" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="200" y="235" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Confirm that the bottom-left indicator says Connected.</li><li>Open Infrastructure → Environments to create your local target.</li></ol><dialog class="dialog_MgqT" aria-label="Begin on Overview after installation"><div class="dialogToolbar_gzGc"><strong>Begin on Overview after installation</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/desktop-connected.jpg" alt="Begin on Overview after installation" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3gbqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="210" y1="590" x2="90" y2="646" stroke="white" stroke-width="7"></line><line x1="210" y1="590" x2="90" y2="646" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3gbqfdeh_)"></line><circle cx="210" cy="590" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="210" y="590" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="200" y1="235" x2="115" y2="292" stroke="white" stroke-width="7"></line><line x1="200" y1="235" x2="115" y2="292" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3gbqfdeh_)"></line><circle cx="200" cy="235" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="200" y="235" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g></svg></div></div><ol class="legend_Hll1"><li>Confirm that the bottom-left indicator says Connected.</li><li>Open Infrastructure → Environments to create your local target.</li></ol></dialog></figure>
<p><strong>Checkpoint:</strong> Desktop is connected. If startup fails, open its failure details before retrying.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-connect-your-local-machine">2. Connect your local machine<a href="https://akoflow.com/blog/from-a-dag-to-your-first-run#2-connect-your-local-machine" class="hash-link" aria-label="Direct link to 2. Connect your local machine" title="Direct link to 2. Connect your local machine" translate="no">​</a></h2>
<p>Open <strong>Infrastructure → Environments</strong>. To create the environment from scratch, follow the two screens below. If you already created <code>Local check</code>, open it and continue with its connection check instead.</p>
<figure class="figure_T25B"><figcaption><strong>Open the local environment setup</strong><p>Use the execution-infrastructure catalog for this real local workflow.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Open the local environment setup"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/connect-environment.jpg" alt="Open the local environment setup" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_18fqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="860" y1="110" x2="991" y2="170" stroke="white" stroke-width="7"></line><line x1="860" y1="110" x2="991" y2="170" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_18fqfdeh_)"></line><circle cx="860" cy="110" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="860" y="110" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="580" y1="280" x2="397" y2="234" stroke="white" stroke-width="7"></line><line x1="580" y1="280" x2="397" y2="234" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_18fqfdeh_)"></line><circle cx="580" cy="280" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="580" y="280" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Select Connect environment. Some releases call this New environment.</li><li>Keep Execution infrastructure selected.</li></ol><dialog class="dialog_MgqT" aria-label="Open the local environment setup"><div class="dialogToolbar_gzGc"><strong>Open the local environment setup</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/connect-environment.jpg" alt="Open the local environment setup" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3gfqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="860" y1="110" x2="991" y2="170" stroke="white" stroke-width="7"></line><line x1="860" y1="110" x2="991" y2="170" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3gfqfdeh_)"></line><circle cx="860" cy="110" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="860" y="110" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="580" y1="280" x2="397" y2="234" stroke="white" stroke-width="7"></line><line x1="580" y1="280" x2="397" y2="234" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3gfqfdeh_)"></line><circle cx="580" cy="280" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="580" y="280" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g></svg></div></div><ol class="legend_Hll1"><li>Select Connect environment. Some releases call this New environment.</li><li>Keep Execution infrastructure selected.</li></ol></dialog></figure>
<ol>
<li class="">Select <strong>Connect environment</strong> (called <strong>New environment</strong> in some releases), then <strong>Local machine</strong>.</li>
<li class="">Name it <code>Local check</code>.</li>
<li class="">Select <strong>Test connection</strong>.</li>
<li class="">When the test succeeds, select <strong>Save environment</strong>.</li>
</ol>
<figure class="figure_T25B"><figcaption><strong>Create Local check</strong><p>This form has only been filled for the capture: Save environment becomes available after a successful connection test.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Create Local check"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/new-local-environment.jpg" alt="Create Local check" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_18hqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="530" y1="215" x2="420" y2="289" stroke="white" stroke-width="7"></line><line x1="530" y1="215" x2="420" y2="289" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_18hqfdeh_)"></line><circle cx="530" cy="215" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="530" y="215" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="610" y1="421" x2="527" y2="485" stroke="white" stroke-width="7"></line><line x1="610" y1="421" x2="527" y2="485" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_18hqfdeh_)"></line><circle cx="610" cy="421" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="610" y="421" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g><g><line x1="812" y1="605" x2="952" y2="635" stroke="white" stroke-width="7"></line><line x1="812" y1="605" x2="952" y2="635" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_18hqfdeh_)"></line><circle cx="812" cy="605" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="812" y="605" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">3</text></g><g><line x1="1130" y1="575" x2="1121" y2="635" stroke="white" stroke-width="7"></line><line x1="1130" y1="575" x2="1121" y2="635" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_18hqfdeh_)"></line><circle cx="1130" cy="575" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1130" y="575" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">4</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Choose Local machine.</li><li>Enter Local check as the environment name.</li><li>Select Test connection and wait for success.</li><li>After the test succeeds, select Save environment.</li></ol><dialog class="dialog_MgqT" aria-label="Create Local check"><div class="dialogToolbar_gzGc"><strong>Create Local check</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/new-local-environment.jpg" alt="Create Local check" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3ghqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="530" y1="215" x2="420" y2="289" stroke="white" stroke-width="7"></line><line x1="530" y1="215" x2="420" y2="289" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3ghqfdeh_)"></line><circle cx="530" cy="215" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="530" y="215" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="610" y1="421" x2="527" y2="485" stroke="white" stroke-width="7"></line><line x1="610" y1="421" x2="527" y2="485" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3ghqfdeh_)"></line><circle cx="610" cy="421" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="610" y="421" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g><g><line x1="812" y1="605" x2="952" y2="635" stroke="white" stroke-width="7"></line><line x1="812" y1="605" x2="952" y2="635" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3ghqfdeh_)"></line><circle cx="812" cy="605" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="812" y="605" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">3</text></g><g><line x1="1130" y1="575" x2="1121" y2="635" stroke="white" stroke-width="7"></line><line x1="1130" y1="575" x2="1121" y2="635" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3ghqfdeh_)"></line><circle cx="1130" cy="575" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1130" y="575" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">4</text></g></svg></div></div><ol class="legend_Hll1"><li>Choose Local machine.</li><li>Enter Local check as the environment name.</li><li>Select Test connection and wait for success.</li><li>After the test succeeds, select Save environment.</li></ol></dialog></figure>
<p>On the environment page, select <strong>Check now</strong>. Wait until <strong>Local machine</strong> shows <strong>online</strong>. This makes the local resource available for planning.</p>
<p>An <em>environment</em> describes where the work can run. Here, the target is the machine reached through your local AkôFlow engine. Desktop requests connection checks from the daemon.</p>
<figure class="figure_T25B"><figcaption><strong>Check that the local machine is online</strong><p>Open the environment you created. This reference environment is already online; your tutorial environment is named Local check.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Check that the local machine is online"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/check-local-online.jpg" alt="Check that the local machine is online" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_18kqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="735" y1="440" x2="617" y2="391" stroke="white" stroke-width="7"></line><line x1="735" y1="440" x2="617" y2="391" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_18kqfdeh_)"></line><circle cx="735" cy="440" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="735" y="440" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="1030" y1="318" x2="532" y2="391" stroke="white" stroke-width="7"></line><line x1="1030" y1="318" x2="532" y2="391" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_18kqfdeh_)"></line><circle cx="1030" cy="318" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1030" y="318" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Select Check now to request a fresh connection check.</li><li>Continue when the local connection reads online.</li></ol><dialog class="dialog_MgqT" aria-label="Check that the local machine is online"><div class="dialogToolbar_gzGc"><strong>Check that the local machine is online</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/check-local-online.jpg" alt="Check that the local machine is online" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3gkqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="735" y1="440" x2="617" y2="391" stroke="white" stroke-width="7"></line><line x1="735" y1="440" x2="617" y2="391" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3gkqfdeh_)"></line><circle cx="735" cy="440" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="735" y="440" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="1030" y1="318" x2="532" y2="391" stroke="white" stroke-width="7"></line><line x1="1030" y1="318" x2="532" y2="391" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3gkqfdeh_)"></line><circle cx="1030" cy="318" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1030" y="318" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g></svg></div></div><ol class="legend_Hll1"><li>Select Check now to request a fresh connection check.</li><li>Continue when the local connection reads online.</li></ol></dialog></figure>
<p><strong>Checkpoint:</strong> the local resource is online. Remember its environment name for step 5.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-save-your-first-workflow-yaml">3. Save your first workflow YAML<a href="https://akoflow.com/blog/from-a-dag-to-your-first-run#3-save-your-first-workflow-yaml" class="hash-link" aria-label="Direct link to 3. Save your first workflow YAML" title="Direct link to 3. Save your first workflow YAML" translate="no">​</a></h2>
<p>Create a plain-text file named <code>first-local-check.yaml</code>, or <a href="https://akoflow.com/assets/files/first-local-check-f0557ffbe44ea5c7f0b7927f8450c915.yaml" target="_blank" class="">download the complete YAML</a>. Copy the whole document, preserving indentation, and save it with the <code>.yaml</code> extension.</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> first</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">local</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">check</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">spec</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">namespace</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> learning</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">activities</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> write</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">report</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">cpuLimit</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"0.1"</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">memoryLimit</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> 32Mi</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">command</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">executable</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">source</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">type</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> oci</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">reference</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> docker.io/library/busybox</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token number" style="color:hsl(35, 99%, 36%)">1.36</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">delivery</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">strategy</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> auto</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">targetFormat</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> oci</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">entrypoint</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> sh</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">arguments</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">c</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">|</span><span class="token scalar string" style="color:hsl(119, 34%, 47%)"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token scalar string" style="color:hsl(119, 34%, 47%)">            printf 'Akoflow local check\n' &gt; result.txt</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token scalar string" style="color:hsl(119, 34%, 47%)">            cat result.txt</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">expectedOutputs</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token plain">result.txt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><br></div></code></pre></div></div>
<p>Read the document from the outside in:</p>
<ul>
<li class=""><code>name</code> identifies the workflow. <code>namespace</code> groups it under <code>learning</code>.</li>
<li class=""><code>activities</code> contains one unit of work: <code>write-report</code>.</li>
<li class=""><code>command.executable</code> names the BusyBox image. <code>targetFormat: oci</code> selects the container format used by local Docker.</li>
<li class=""><code>entrypoint: sh</code> and the <code>-c</code> argument run the following shell script.</li>
<li class=""><code>printf</code> creates the file in the activity workspace. <code>cat</code> prints it into the activity log.</li>
<li class=""><code>expectedOutputs</code> asserts that <code>result.txt</code> exists after execution.</li>
<li class="">CPU and memory limits describe the activity's small resource demand.</li>
</ul>
<p>The image comes from Docker Hub, so its first use may take longer while it downloads. For a research reproducibility bundle, also retain the resolved image digest alongside the version tag.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-import-the-yaml-in-desktop">4. Import the YAML in Desktop<a href="https://akoflow.com/blog/from-a-dag-to-your-first-run#4-import-the-yaml-in-desktop" class="hash-link" aria-label="Direct link to 4. Import the YAML in Desktop" title="Direct link to 4. Import the YAML in Desktop" translate="no">​</a></h2>
<figure class="figure_T25B"><figcaption><strong>Import the workflow you saved</strong><p>The catalog can already contain other workflows. Import your first-local-check.yaml file.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Import the workflow you saved"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/import-workflow.jpg" alt="Import the workflow you saved" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_18tqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="1030" y1="160" x2="1162" y2="110" stroke="white" stroke-width="7"></line><line x1="1030" y1="160" x2="1162" y2="110" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_18tqfdeh_)"></line><circle cx="1030" cy="160" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1030" y="160" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="190" y1="205" x2="111" y2="178" stroke="white" stroke-width="7"></line><line x1="190" y1="205" x2="111" y2="178" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_18tqfdeh_)"></line><circle cx="190" cy="205" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="190" y="205" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Select Import YAML, then choose first-local-check.yaml.</li><li>Find this catalog under Workflows → Definitions.</li></ol><dialog class="dialog_MgqT" aria-label="Import the workflow you saved"><div class="dialogToolbar_gzGc"><strong>Import the workflow you saved</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/import-workflow.jpg" alt="Import the workflow you saved" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3gtqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="1030" y1="160" x2="1162" y2="110" stroke="white" stroke-width="7"></line><line x1="1030" y1="160" x2="1162" y2="110" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3gtqfdeh_)"></line><circle cx="1030" cy="160" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1030" y="160" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="190" y1="205" x2="111" y2="178" stroke="white" stroke-width="7"></line><line x1="190" y1="205" x2="111" y2="178" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3gtqfdeh_)"></line><circle cx="190" cy="205" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="190" y="205" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g></svg></div></div><ol class="legend_Hll1"><li>Select Import YAML, then choose first-local-check.yaml.</li><li>Find this catalog under Workflows → Definitions.</li></ol></dialog></figure>
<ol>
<li class="">Open <strong>Workflows → Definitions</strong>.</li>
<li class="">Select <strong>Import YAML</strong> and choose <code>first-local-check.yaml</code>.</li>
<li class="">Open the new <code>first-local-check</code> definition.</li>
<li class="">Confirm that the DAG contains one activity named <strong>write-report</strong>.</li>
</ol>
<p>A <em>DAG</em> is a directed acyclic graph: nodes are activities and arrows are dependencies. This first graph has one node and no arrows, enough to learn the execution lifecycle before adding data handoffs.</p>
<p>If the name already exists, open the existing definition or change <code>name</code> before importing another copy. The importer normalizes names into identifiers, so each new definition needs a distinct name.</p>
<p><strong>Checkpoint:</strong> the definition exists and its graph matches the YAML. Importing saves a definition; it does not start a run.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="5-create-a-local-execution-scope">5. Create a local execution scope<a href="https://akoflow.com/blog/from-a-dag-to-your-first-run#5-create-a-local-execution-scope" class="hash-link" aria-label="Direct link to 5. Create a local execution scope" title="Direct link to 5. Create a local execution scope" translate="no">​</a></h2>
<figure class="figure_T25B"><figcaption><strong>Create a new execution scope</strong><p>A fresh instance can show an empty catalog; the creation action is in the page header.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Create a new execution scope"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/scope-catalog.jpg" alt="Create a new execution scope" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_193qfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="1050" y1="245" x2="1165" y2="131" stroke="white" stroke-width="7"></line><line x1="1050" y1="245" x2="1165" y2="131" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_193qfdeh_)"></line><circle cx="1050" cy="245" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1050" y="245" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="189" y1="446" x2="121" y2="405" stroke="white" stroke-width="7"></line><line x1="189" y1="446" x2="121" y2="405" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_193qfdeh_)"></line><circle cx="189" cy="446" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="189" y="446" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Select Create scope (New execution scope in some releases).</li><li>Open Infrastructure → Execution scopes.</li></ol><dialog class="dialog_MgqT" aria-label="Create a new execution scope"><div class="dialogToolbar_gzGc"><strong>Create a new execution scope</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/scope-catalog.jpg" alt="Create a new execution scope" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3h3qfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="1050" y1="245" x2="1165" y2="131" stroke="white" stroke-width="7"></line><line x1="1050" y1="245" x2="1165" y2="131" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3h3qfdeh_)"></line><circle cx="1050" cy="245" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1050" y="245" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="189" y1="446" x2="121" y2="405" stroke="white" stroke-width="7"></line><line x1="189" y1="446" x2="121" y2="405" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3h3qfdeh_)"></line><circle cx="189" cy="446" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="189" y="446" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g></svg></div></div><ol class="legend_Hll1"><li>Select Create scope (New execution scope in some releases).</li><li>Open Infrastructure → Execution scopes.</li></ol></dialog></figure>
<ol>
<li class="">Open <strong>Infrastructure → Execution scopes</strong>.</li>
<li class="">Select <strong>Create scope</strong> (called <strong>New execution scope</strong> in some releases).</li>
<li class="">Name it <code>First local scope</code> and select your local environment.</li>
<li class="">Leave <strong>Create the initial network topology</strong> enabled.</li>
<li class="">Select <strong>Create execution scope</strong>.</li>
</ol>
<figure class="figure_T25B"><figcaption><strong>Name the scope and keep its topology</strong><p>Enter First local scope. The initial topology is sufficient for a one-machine experiment.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Name the scope and keep its topology"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/scope-name.jpg" alt="Name the scope and keep its topology" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_195qfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="580" y1="260" x2="561" y2="319" stroke="white" stroke-width="7"></line><line x1="580" y1="260" x2="561" y2="319" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_195qfdeh_)"></line><circle cx="580" cy="260" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="580" y="260" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="531" y1="415" x2="325" y2="478" stroke="white" stroke-width="7"></line><line x1="531" y1="415" x2="325" y2="478" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_195qfdeh_)"></line><circle cx="531" cy="415" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="531" y="415" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Enter First local scope in Name.</li><li>Leave Create the initial network topology enabled.</li></ol><dialog class="dialog_MgqT" aria-label="Name the scope and keep its topology"><div class="dialogToolbar_gzGc"><strong>Name the scope and keep its topology</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/scope-name.jpg" alt="Name the scope and keep its topology" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3h5qfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="580" y1="260" x2="561" y2="319" stroke="white" stroke-width="7"></line><line x1="580" y1="260" x2="561" y2="319" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3h5qfdeh_)"></line><circle cx="580" cy="260" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="580" y="260" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="531" y1="415" x2="325" y2="478" stroke="white" stroke-width="7"></line><line x1="531" y1="415" x2="325" y2="478" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3h5qfdeh_)"></line><circle cx="531" cy="415" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="531" y="415" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g></svg></div></div><ol class="legend_Hll1"><li>Enter First local scope in Name.</li><li>Leave Create the initial network topology enabled.</li></ol></dialog></figure>
<figure class="figure_T25B"><figcaption><strong>Select only the local environment for this experiment</strong><p>The reference instance calls its existing environment Local environment. In your tutorial, choose Local check.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Select only the local environment for this experiment"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/new-local-scope.jpg" alt="Select only the local environment for this experiment" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_196qfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="580" y1="175" x2="325" y2="208" stroke="white" stroke-width="7"></line><line x1="580" y1="175" x2="325" y2="208" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_196qfdeh_)"></line><circle cx="580" cy="175" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="580" y="175" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="1060" y1="327" x2="780" y2="392" stroke="white" stroke-width="7"></line><line x1="1060" y1="327" x2="780" y2="392" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_196qfdeh_)"></line><circle cx="1060" cy="327" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1060" y="327" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Keep the initial topology enabled.</li><li>Select the checkbox for your local environment; use Local check from step 2.</li></ol><dialog class="dialog_MgqT" aria-label="Select only the local environment for this experiment"><div class="dialogToolbar_gzGc"><strong>Select only the local environment for this experiment</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/new-local-scope.jpg" alt="Select only the local environment for this experiment" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3h6qfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="580" y1="175" x2="325" y2="208" stroke="white" stroke-width="7"></line><line x1="580" y1="175" x2="325" y2="208" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3h6qfdeh_)"></line><circle cx="580" cy="175" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="580" y="175" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="1060" y1="327" x2="780" y2="392" stroke="white" stroke-width="7"></line><line x1="1060" y1="327" x2="780" y2="392" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3h6qfdeh_)"></line><circle cx="1060" cy="327" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1060" y="327" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g></svg></div></div><ol class="legend_Hll1"><li>Keep the initial topology enabled.</li><li>Select the checkbox for your local environment; use Local check from step 2.</li></ol></dialog></figure>
<p>After selecting <code>Local check</code>, scroll to the bottom of the form to save it:</p>
<figure class="figure_T25B"><figcaption><strong>Save the execution scope</strong><p>Scroll below the list of participating environments to reach this action.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Save the execution scope"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/save-scope.jpg" alt="Save the execution scope" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_198qfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="1040" y1="570" x2="1137" y2="635" stroke="white" stroke-width="7"></line><line x1="1040" y1="570" x2="1137" y2="635" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_198qfdeh_)"></line><circle cx="1040" cy="570" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1040" y="570" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Select Create execution scope after naming the scope and selecting Local check.</li></ol><dialog class="dialog_MgqT" aria-label="Save the execution scope"><div class="dialogToolbar_gzGc"><strong>Save the execution scope</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/save-scope.jpg" alt="Save the execution scope" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3h8qfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="1040" y1="570" x2="1137" y2="635" stroke="white" stroke-width="7"></line><line x1="1040" y1="570" x2="1137" y2="635" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3h8qfdeh_)"></line><circle cx="1040" cy="570" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1040" y="570" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g></svg></div></div><ol class="legend_Hll1"><li>Select Create execution scope after naming the scope and selecting Local check.</li></ol></dialog></figure>
<p>A <em>scope</em> selects the environment resources offered to planning. Its topology describes the connections between them. A one-machine experiment needs no network links.</p>
<p>Desktop creates these records and their identifiers. The YAML here describes the workflow; you do not need to author environment, scope, or plan API envelopes.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="6-make-a-plan-and-start-the-run">6. Make a plan and start the run<a href="https://akoflow.com/blog/from-a-dag-to-your-first-run#6-make-a-plan-and-start-the-run" class="hash-link" aria-label="Direct link to 6. Make a plan and start the run" title="Direct link to 6. Make a plan and start the run" translate="no">​</a></h2>
<p>Return to <code>first-local-check</code> and select <strong>Generate plan</strong>:</p>
<figure class="figure_T25B"><figcaption><strong>Start planning from the workflow</strong><p>This reference definition is named hello. Open first-local-check in your own catalog.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Start planning from the workflow"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/workflow-plan-action.jpg" alt="Start planning from the workflow" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_19dqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="1010" y1="275" x2="1160" y2="215" stroke="white" stroke-width="7"></line><line x1="1010" y1="275" x2="1160" y2="215" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19dqfdeh_)"></line><circle cx="1010" cy="275" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1010" y="275" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Select Generate plan on the workflow detail page.</li></ol><dialog class="dialog_MgqT" aria-label="Start planning from the workflow"><div class="dialogToolbar_gzGc"><strong>Start planning from the workflow</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/workflow-plan-action.jpg" alt="Start planning from the workflow" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3hdqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="1010" y1="275" x2="1160" y2="215" stroke="white" stroke-width="7"></line><line x1="1010" y1="275" x2="1160" y2="215" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3hdqfdeh_)"></line><circle cx="1010" cy="275" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1010" y="275" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g></svg></div></div><ol class="legend_Hll1"><li>Select Generate plan on the workflow detail page.</li></ol></dialog></figure>
<figure class="figure_T25B"><figcaption><strong>Choose manual planning</strong><p>The reference definition has two activities. Your first-local-check definition has only write-report.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Choose manual planning"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/manual-plan-mode.jpg" alt="Choose manual planning" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_19eqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="1025" y1="160" x2="995" y2="234" stroke="white" stroke-width="7"></line><line x1="1025" y1="160" x2="995" y2="234" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19eqfdeh_)"></line><circle cx="1025" cy="160" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1025" y="160" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="930" y1="506" x2="1040" y2="558" stroke="white" stroke-width="7"></line><line x1="930" y1="506" x2="1040" y2="558" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19eqfdeh_)"></line><circle cx="930" cy="506" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="930" y="506" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g><g><line x1="565" y1="570" x2="486" y2="609" stroke="white" stroke-width="7"></line><line x1="565" y1="570" x2="486" y2="609" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19eqfdeh_)"></line><circle cx="565" cy="570" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="565" y="570" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">3</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Select Create manually.</li><li>Use Real execution.</li><li>Under Execution scope, choose First local scope; scroll the list if needed.</li></ol><dialog class="dialog_MgqT" aria-label="Choose manual planning"><div class="dialogToolbar_gzGc"><strong>Choose manual planning</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/manual-plan-mode.jpg" alt="Choose manual planning" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3heqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="1025" y1="160" x2="995" y2="234" stroke="white" stroke-width="7"></line><line x1="1025" y1="160" x2="995" y2="234" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3heqfdeh_)"></line><circle cx="1025" cy="160" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1025" y="160" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="930" y1="506" x2="1040" y2="558" stroke="white" stroke-width="7"></line><line x1="930" y1="506" x2="1040" y2="558" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3heqfdeh_)"></line><circle cx="930" cy="506" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="930" y="506" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g><g><line x1="565" y1="570" x2="486" y2="609" stroke="white" stroke-width="7"></line><line x1="565" y1="570" x2="486" y2="609" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3heqfdeh_)"></line><circle cx="565" cy="570" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="565" y="570" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">3</text></g></svg></div></div><ol class="legend_Hll1"><li>Select Create manually.</li><li>Use Real execution.</li><li>Under Execution scope, choose First local scope; scroll the list if needed.</li></ol></dialog></figure>
<ol>
<li class="">Choose <strong>Create manually</strong>.</li>
<li class="">Select <code>First local scope</code>.</li>
<li class="">Select <strong>write-report</strong> in the activity graph.</li>
<li class="">Choose your <strong>local machine runtime</strong> and <strong>local machine resource</strong>.</li>
<li class="">Set <strong>Expected execution time</strong> to <code>1</code> second.</li>
<li class="">Select <strong>Generate plan</strong>.</li>
</ol>
<figure class="figure_T25B"><figcaption><strong>Assign a runtime, duration, and target</strong><p>This reference activity is named a. In your workflow, select write-report; configure the same controls.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Assign a runtime, duration, and target"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/manual-activity-placement.jpg" alt="Assign a runtime, duration, and target" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_19gqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="355" y1="230" x2="575" y2="293" stroke="white" stroke-width="7"></line><line x1="355" y1="230" x2="575" y2="293" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19gqfdeh_)"></line><circle cx="355" cy="230" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="355" y="230" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="1085" y1="154" x2="970" y2="203" stroke="white" stroke-width="7"></line><line x1="1085" y1="154" x2="970" y2="203" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19gqfdeh_)"></line><circle cx="1085" cy="154" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1085" y="154" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g><g><line x1="850" y1="276" x2="979" y2="307" stroke="white" stroke-width="7"></line><line x1="850" y1="276" x2="979" y2="307" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19gqfdeh_)"></line><circle cx="850" cy="276" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="850" y="276" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">3</text></g><g><line x1="1115" y1="370" x2="984" y2="415" stroke="white" stroke-width="7"></line><line x1="1115" y1="370" x2="984" y2="415" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19gqfdeh_)"></line><circle cx="1115" cy="370" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1115" y="370" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">4</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Select the activity node in the DAG.</li><li>Choose the local machine runtime.</li><li>Set Expected execution time to 1 and keep the s unit.</li><li>Choose your local machine target. Then scroll to the plan review and Generate plan.</li></ol><dialog class="dialog_MgqT" aria-label="Assign a runtime, duration, and target"><div class="dialogToolbar_gzGc"><strong>Assign a runtime, duration, and target</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/manual-activity-placement.jpg" alt="Assign a runtime, duration, and target" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3hgqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="355" y1="230" x2="575" y2="293" stroke="white" stroke-width="7"></line><line x1="355" y1="230" x2="575" y2="293" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3hgqfdeh_)"></line><circle cx="355" cy="230" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="355" y="230" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="1085" y1="154" x2="970" y2="203" stroke="white" stroke-width="7"></line><line x1="1085" y1="154" x2="970" y2="203" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3hgqfdeh_)"></line><circle cx="1085" cy="154" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1085" y="154" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g><g><line x1="850" y1="276" x2="979" y2="307" stroke="white" stroke-width="7"></line><line x1="850" y1="276" x2="979" y2="307" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3hgqfdeh_)"></line><circle cx="850" cy="276" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="850" y="276" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">3</text></g><g><line x1="1115" y1="370" x2="984" y2="415" stroke="white" stroke-width="7"></line><line x1="1115" y1="370" x2="984" y2="415" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3hgqfdeh_)"></line><circle cx="1115" cy="370" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1115" y="370" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">4</text></g></svg></div></div><ol class="legend_Hll1"><li>Select the activity node in the DAG.</li><li>Choose the local machine runtime.</li><li>Set Expected execution time to 1 and keep the s unit.</li><li>Choose your local machine target. Then scroll to the plan review and Generate plan.</li></ol></dialog></figure>
<p>The duration is an estimate, not a timeout or a measurement. Image download and startup can make the first run take longer.</p>
<p>On the saved plan page, select <strong>Execute plan</strong>:</p>
<figure class="figure_T25B"><figcaption><strong>Open the execution request from the saved plan</strong><p>The example capture shows an existing saved plan. Use the manual plan generated for first-local-check.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Open the execution request from the saved plan"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/execute-plan.jpg" alt="Open the execution request from the saved plan" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_19jqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="1022" y1="250" x2="1165" y2="196" stroke="white" stroke-width="7"></line><line x1="1022" y1="250" x2="1165" y2="196" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19jqfdeh_)"></line><circle cx="1022" cy="250" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1022" y="250" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Select Execute plan.</li></ol><dialog class="dialog_MgqT" aria-label="Open the execution request from the saved plan"><div class="dialogToolbar_gzGc"><strong>Open the execution request from the saved plan</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/execute-plan.jpg" alt="Open the execution request from the saved plan" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3hjqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="1022" y1="250" x2="1165" y2="196" stroke="white" stroke-width="7"></line><line x1="1022" y1="250" x2="1165" y2="196" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3hjqfdeh_)"></line><circle cx="1022" cy="250" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1022" y="250" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g></svg></div></div><ol class="legend_Hll1"><li>Select Execute plan.</li></ol></dialog></figure>
<p>Review the selected plan, <strong>Real execution</strong>, and the local runtime. Keep the suggested unique run ID or enter your own:</p>
<figure class="figure_T25B"><figcaption><strong>Review the execution before starting</strong><p>This reference plan is bound to its execution request. Your scope and plan names should refer to your new tutorial records.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Review the execution before starting"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/start-real-execution.jpg" alt="Review the execution before starting" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_19lqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="478" y1="252" x2="505" y2="319" stroke="white" stroke-width="7"></line><line x1="478" y1="252" x2="505" y2="319" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19lqfdeh_)"></line><circle cx="478" cy="252" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="478" y="252" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="1060" y1="252" x2="972" y2="320" stroke="white" stroke-width="7"></line><line x1="1060" y1="252" x2="972" y2="320" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19lqfdeh_)"></line><circle cx="1060" cy="252" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1060" y="252" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g><g><line x1="798" y1="440" x2="641" y2="516" stroke="white" stroke-width="7"></line><line x1="798" y1="440" x2="641" y2="516" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19lqfdeh_)"></line><circle cx="798" cy="440" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="798" y="440" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">3</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Keep the suggested run ID or enter a fresh unique ID.</li><li>Confirm that the selected plan is the one you just generated.</li><li>Confirm Real execution and an available local runtime.</li></ol><dialog class="dialog_MgqT" aria-label="Review the execution before starting"><div class="dialogToolbar_gzGc"><strong>Review the execution before starting</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/start-real-execution.jpg" alt="Review the execution before starting" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3hlqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="478" y1="252" x2="505" y2="319" stroke="white" stroke-width="7"></line><line x1="478" y1="252" x2="505" y2="319" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3hlqfdeh_)"></line><circle cx="478" cy="252" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="478" y="252" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="1060" y1="252" x2="972" y2="320" stroke="white" stroke-width="7"></line><line x1="1060" y1="252" x2="972" y2="320" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3hlqfdeh_)"></line><circle cx="1060" cy="252" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1060" y="252" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g><g><line x1="798" y1="440" x2="641" y2="516" stroke="white" stroke-width="7"></line><line x1="798" y1="440" x2="641" y2="516" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3hlqfdeh_)"></line><circle cx="798" cy="440" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="798" y="440" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">3</text></g></svg></div></div><ol class="legend_Hll1"><li>Keep the suggested run ID or enter a fresh unique ID.</li><li>Confirm that the selected plan is the one you just generated.</li><li>Confirm Real execution and an available local runtime.</li></ol></dialog></figure>
<p>Scroll to the bottom, then select <strong>Start execution</strong> once:</p>
<figure class="figure_T25B"><figcaption><strong>Start the local run</strong><p>Scroll to the bottom of the execution request after reviewing the selected plan.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Start the local run"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/start-execution-button.jpg" alt="Start the local run" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_19nqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="996" y1="602" x2="1160" y2="635" stroke="white" stroke-width="7"></line><line x1="996" y1="602" x2="1160" y2="635" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19nqfdeh_)"></line><circle cx="996" cy="602" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="996" y="602" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Select Start execution once. Submission is asynchronous; wait on the resulting run page.</li></ol><dialog class="dialog_MgqT" aria-label="Start the local run"><div class="dialogToolbar_gzGc"><strong>Start the local run</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/start-execution-button.jpg" alt="Start the local run" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3hnqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="996" y1="602" x2="1160" y2="635" stroke="white" stroke-width="7"></line><line x1="996" y1="602" x2="1160" y2="635" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3hnqfdeh_)"></line><circle cx="996" cy="602" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="996" y="602" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g></svg></div></div><ol class="legend_Hll1"><li>Select Start execution once. Submission is asynchronous; wait on the resulting run page.</li></ol></dialog></figure>
<p>Wait until the run says <strong>completed</strong> and <strong>1/1</strong> activities settled:</p>
<figure class="figure_T25B"><figcaption><strong>Check completion and open Activities</strong><p>This real reference run has two activities. Your first-local-check run must show 1/1 settled.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Check completion and open Activities"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/completed-run.jpg" alt="Check completion and open Activities" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_19pqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="409" y1="220" x2="342" y2="291" stroke="white" stroke-width="7"></line><line x1="409" y1="220" x2="342" y2="291" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19pqfdeh_)"></line><circle cx="409" cy="220" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="409" y="220" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="649" y1="219" x2="577" y2="291" stroke="white" stroke-width="7"></line><line x1="649" y1="219" x2="577" y2="291" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19pqfdeh_)"></line><circle cx="649" cy="219" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="649" y="219" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g><g><line x1="473" y1="425" x2="405" y2="382" stroke="white" stroke-width="7"></line><line x1="473" y1="425" x2="405" y2="382" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19pqfdeh_)"></line><circle cx="473" cy="425" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="473" y="425" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">3</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Wait for completed.</li><li>Check 1/1 settled for your one-activity workflow.</li><li>Open Activities to locate write-report.</li></ol><dialog class="dialog_MgqT" aria-label="Check completion and open Activities"><div class="dialogToolbar_gzGc"><strong>Check completion and open Activities</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/completed-run.jpg" alt="Check completion and open Activities" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3hpqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="409" y1="220" x2="342" y2="291" stroke="white" stroke-width="7"></line><line x1="409" y1="220" x2="342" y2="291" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3hpqfdeh_)"></line><circle cx="409" cy="220" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="409" y="220" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="649" y1="219" x2="577" y2="291" stroke="white" stroke-width="7"></line><line x1="649" y1="219" x2="577" y2="291" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3hpqfdeh_)"></line><circle cx="649" cy="219" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="649" y="219" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g><g><line x1="473" y1="425" x2="405" y2="382" stroke="white" stroke-width="7"></line><line x1="473" y1="425" x2="405" y2="382" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3hpqfdeh_)"></line><circle cx="473" cy="425" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="473" y="425" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">3</text></g></svg></div></div><ol class="legend_Hll1"><li>Wait for completed.</li><li>Check 1/1 settled for your one-activity workflow.</li><li>Open Activities to locate write-report.</li></ol></dialog></figure>
<p>A <em>plan</em> describes where work should run. A <em>run</em> records what happened. Submission is asynchronous: pending or running can appear before completed.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="7-inspect-your-first-result">7. Inspect your first result<a href="https://akoflow.com/blog/from-a-dag-to-your-first-run#7-inspect-your-first-result" class="hash-link" aria-label="Direct link to 7. Inspect your first result" title="Direct link to 7. Inspect your first result" translate="no">​</a></h2>
<p>On the completed run, select <strong>Activities</strong>, then <code>write-report</code>. Open its <strong>Details</strong> link or <strong>Open activity page</strong> from its information panel (some releases label this <strong>Open activity details</strong>).</p>
<figure class="figure_T25B"><figcaption><strong>Locate the activity to inspect its output</strong><p>This reference run lists a and b. Your activity list contains write-report.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Locate the activity to inspect its output"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/open-activity-details.jpg" alt="Locate the activity to inspect its output" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_19tqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="893" y1="486" x2="1096" y2="580" stroke="white" stroke-width="7"></line><line x1="893" y1="486" x2="1096" y2="580" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19tqfdeh_)"></line><circle cx="893" cy="486" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="893" y="486" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Select write-report in your activity list. Use Details or Open activity page in its information panel.</li></ol><dialog class="dialog_MgqT" aria-label="Locate the activity to inspect its output"><div class="dialogToolbar_gzGc"><strong>Locate the activity to inspect its output</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/open-activity-details.jpg" alt="Locate the activity to inspect its output" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3htqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="893" y1="486" x2="1096" y2="580" stroke="white" stroke-width="7"></line><line x1="893" y1="486" x2="1096" y2="580" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3htqfdeh_)"></line><circle cx="893" cy="486" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="893" y="486" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g></svg></div></div><ol class="legend_Hll1"><li>Select write-report in your activity list. Use Details or Open activity page in its information panel.</li></ol></dialog></figure>
<table><thead><tr><th>Where to look</th><th>Expected result</th></tr></thead><tbody><tr><td>Execution details</td><td><strong>Exit code 0</strong></td></tr><tr><td>Activity output/log</td><td><code>Akoflow local check</code></td></tr><tr><td><strong>Generated files</strong></td><td><code>result.txt</code>, with a SHA-256 checksum</td></tr></tbody></table>
<p>Scroll down the activity page to <strong>Activity output</strong> and <strong>Generated files</strong>:</p>
<figure class="figure_T25B"><figcaption><strong>Find the output and its checksum</strong><p>The reference run produced a.txt. Your YAML produces result.txt and prints Akoflow local check.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Find the output and its checksum"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/generated-files.jpg" alt="Find the output and its checksum" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_1a0qfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="1110" y1="300" x2="748" y2="402" stroke="white" stroke-width="7"></line><line x1="1110" y1="300" x2="748" y2="402" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_1a0qfdeh_)"></line><circle cx="1110" cy="300" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1110" y="300" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="544" y1="524" x2="485" y2="620" stroke="white" stroke-width="7"></line><line x1="544" y1="524" x2="485" y2="620" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_1a0qfdeh_)"></line><circle cx="544" cy="524" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="544" y="524" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g><g><line x1="945" y1="568" x2="872" y2="620" stroke="white" stroke-width="7"></line><line x1="945" y1="568" x2="872" y2="620" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_1a0qfdeh_)"></line><circle cx="945" cy="568" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="945" y="568" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">3</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Inspect Activity output for the captured runtime log.</li><li>In Generated files, look for result.txt in your run.</li><li>Confirm that the file has a SHA-256 checksum.</li></ol><dialog class="dialog_MgqT" aria-label="Find the output and its checksum"><div class="dialogToolbar_gzGc"><strong>Find the output and its checksum</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/generated-files.jpg" alt="Find the output and its checksum" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3i0qfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="1110" y1="300" x2="748" y2="402" stroke="white" stroke-width="7"></line><line x1="1110" y1="300" x2="748" y2="402" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3i0qfdeh_)"></line><circle cx="1110" cy="300" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1110" y="300" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="544" y1="524" x2="485" y2="620" stroke="white" stroke-width="7"></line><line x1="544" y1="524" x2="485" y2="620" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3i0qfdeh_)"></line><circle cx="544" cy="524" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="544" y="524" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g><g><line x1="945" y1="568" x2="872" y2="620" stroke="white" stroke-width="7"></line><line x1="945" y1="568" x2="872" y2="620" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3i0qfdeh_)"></line><circle cx="945" cy="568" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="945" y="568" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">3</text></g></svg></div></div><ol class="legend_Hll1"><li>Inspect Activity output for the captured runtime log.</li><li>In Generated files, look for result.txt in your run.</li><li>Confirm that the file has a SHA-256 checksum.</li></ol></dialog></figure>
<p>The generated file belongs to the activity workspace managed by the engine. Listing a file records that it was observed; it does not automatically download it into your computer's Downloads folder.</p>
<p>You have now submitted and inspected a real local experiment. Save the YAML with your experiment material so the definition can be reused.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="8-extend-it-into-a-small-analysis">8. Extend it into a small analysis<a href="https://akoflow.com/blog/from-a-dag-to-your-first-run#8-extend-it-into-a-small-analysis" class="hash-link" aria-label="Direct link to 8. Extend it into a small analysis" title="Direct link to 8. Extend it into a small analysis" translate="no">​</a></h2>
<p>Save the next document as <code>first-local-analysis.yaml</code>, or <a href="https://akoflow.com/assets/files/first-local-analysis-a4b326091d6dbaa8b6d23265e0f48ea0.yaml" target="_blank" class="">download the complete analysis YAML</a>. This is a <strong>new, complete workflow</strong>, with a different name from the first definition.</p>
<figure aria-label="First local analysis activity DAG"><button type="button" class="thumbnail__JRY" aria-label="Enlarge DAG: First local analysis"></button><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><div class="largeDiagram_oYyn"></div></dialog><figcaption>First local analysis<!-- -->. Nodes in the same column can run in parallel once their dependencies complete.</figcaption></figure>
<table><thead><tr><th>Activity</th><th>Reads</th><th>Produces</th></tr></thead><tbody><tr><td><code>prepare</code></td><td>Values declared in its command: 2, 4, 6</td><td><code>measurements.txt</code></td></tr><tr><td><code>analyze</code></td><td><code>measurements.txt</code></td><td><code>mean.txt</code>, containing <code>4.00</code></td></tr><tr><td><code>write-report</code></td><td><code>mean.txt</code></td><td><code>report.txt</code>, containing <code>Mean: 4.00</code></td></tr></tbody></table>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> first</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">local</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">analysis</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">spec</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">namespace</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> learning</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">activities</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> prepare</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">cpuLimit</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"0.1"</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">memoryLimit</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> 32Mi</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">command</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">executable</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">source</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">type</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> oci</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">reference</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> docker.io/library/busybox</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token number" style="color:hsl(35, 99%, 36%)">1.36</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">delivery</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">strategy</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> auto</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">targetFormat</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> oci</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">entrypoint</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> sh</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">arguments</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">c</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">|</span><span class="token scalar string" style="color:hsl(119, 34%, 47%)"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token scalar string" style="color:hsl(119, 34%, 47%)">            printf '2\n4\n6\n' &gt; measurements.txt</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token scalar string" style="color:hsl(119, 34%, 47%)">            cat measurements.txt</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">expectedOutputs</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token plain">measurements.txt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> analyze</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">dependsOn</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token plain">prepare</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">cpuLimit</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"0.1"</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">memoryLimit</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> 32Mi</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">command</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">executable</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">source</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">type</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> oci</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">reference</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> docker.io/library/busybox</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token number" style="color:hsl(35, 99%, 36%)">1.36</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">delivery</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">strategy</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> auto</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">targetFormat</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> oci</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">entrypoint</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> sh</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">arguments</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">c</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">|</span><span class="token scalar string" style="color:hsl(119, 34%, 47%)"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token scalar string" style="color:hsl(119, 34%, 47%)">            awk '{sum += $1; n++} END {printf "%.2f\n", sum/n}' measurements.txt &gt; mean.txt</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token scalar string" style="color:hsl(119, 34%, 47%)">            cat mean.txt</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">expectedOutputs</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token plain">mean.txt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> write</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">report</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">dependsOn</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token plain">analyze</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">cpuLimit</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"0.1"</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">memoryLimit</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> 32Mi</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">command</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">executable</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">source</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">type</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> oci</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">reference</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> docker.io/library/busybox</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token number" style="color:hsl(35, 99%, 36%)">1.36</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">delivery</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">strategy</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> auto</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">targetFormat</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> oci</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">entrypoint</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> sh</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">arguments</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">c</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">|</span><span class="token scalar string" style="color:hsl(119, 34%, 47%)"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token scalar string" style="color:hsl(119, 34%, 47%)">            printf 'Mean: %s\n' "$(cat mean.txt)" &gt; report.txt</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token scalar string" style="color:hsl(119, 34%, 47%)">            cat report.txt</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">expectedOutputs</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token plain">report.txt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><br></div></code></pre></div></div>
<p>The new field is <code>dependsOn</code>. <code>analyze</code> waits for <code>prepare</code>, and <code>write-report</code> waits for <code>analyze</code>. AkôFlow stages the predecessor's workspace before a dependent activity starts. Each stage writes a different output path, avoiding conflicting contents at the same path. <code>expectedOutputs</code> verifies that the required file exists.</p>
<p>Repeat the Desktop sequence:</p>
<ol>
<li class="">Import <code>first-local-analysis.yaml</code> in <strong>Workflows → Definitions</strong>.</li>
<li class="">Confirm the three-node DAG above.</li>
<li class="">Create a manual plan using the existing <code>First local scope</code>.</li>
<li class="">Assign <strong>all three activities</strong> to the local runtime and resource, with an expected duration of <code>1</code> second each.</li>
<li class="">Generate the plan, choose <strong>Execute plan → Real execution</strong>, and start it.</li>
<li class="">Wait for <strong>completed</strong> and <strong>3/3</strong> activities settled.</li>
<li class="">Open the final <strong>write-report</strong> activity. Its log should print <code>Mean: 4.00</code>. Its generated files should include <code>report.txt</code> with a checksum.</li>
</ol>
<p>This graph is sequential because each stage consumes the previous stage's output. A future independent branch should declare only the dependencies it needs. Dependencies determine readiness; resource capacity determines whether ready activities can run together.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="if-something-stops-you">If something stops you<a href="https://akoflow.com/blog/from-a-dag-to-your-first-run#if-something-stops-you" class="hash-link" aria-label="Direct link to If something stops you" title="Direct link to If something stops you" translate="no">​</a></h2>
<table><thead><tr><th>Symptom</th><th>Next action</th></tr></thead><tbody><tr><td>Desktop does not reach <strong>Connected</strong></td><td>Check Docker and inspect first-start failure details.</td></tr><tr><td>Local environment is offline or missing from planning</td><td>Test its connection, save it, and select <strong>Check now</strong>.</td></tr><tr><td>YAML import fails</td><td>Check indentation, retain the complete <code>name</code>/<code>spec</code> wrapper, and use a distinct workflow name.</td></tr><tr><td>No compatible runtime appears</td><td>Recheck the environment's runtime binding and select a real local scope.</td></tr><tr><td>The first activity cannot obtain its image</td><td>Inspect the activity error and verify access to Docker Hub and the local Docker engine.</td></tr><tr><td>Analysis cannot find its input</td><td>Check <code>dependsOn</code>, the predecessor's completion, and workspace-staging evidence.</td></tr><tr><td>A run fails or stays pending</td><td>Open activity details and run events, then see <a class="" href="https://akoflow.com/docs/guides/operations/troubleshooting">Troubleshooting</a>.</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-idea-behind-akôflow">The idea behind AkôFlow<a href="https://akoflow.com/blog/from-a-dag-to-your-first-run#the-idea-behind-ak%C3%B4flow" class="hash-link" aria-label="Direct link to The idea behind AkôFlow" title="Direct link to The idea behind AkôFlow" translate="no">​</a></h2>
<p>The original AkôFlow paper introduces middleware for parallel scientific workflows in containerized environments, with provenance capture and an astronomy evaluation. It gives the research context for the project:</p>
<p>Ferreira, W.; Kunstmann, L.; Paes, A.; Bedo, M.; de Oliveira, D. <strong>AkôFlow: um Middleware para execução de Workflows científicos em múltiplos ambientes conteinerizados.</strong> SBBD, 2024, pp. 27–39. <a href="https://doi.org/10.5753/sbbd.2024.241126" target="_blank" rel="noopener noreferrer" class="">Read the paper</a>.</p>
<p>This post follows the current Desktop interface and portable workflow format, which have evolved since the publication. The paper explains the research motivation; the documentation and downloadable YAML files describe the steps used here.</p>
<p>Here, the YAML is the workflow definition, the environment is your local machine, the scope selects eligible resources, the plan assigns activities, and the run holds observed results. Generated files and checksums provide a first piece of execution evidence.</p>
<p>For your next experiment, change the measurements in a new copy of the analysis YAML and check that the mean changes accordingly. Continue with <a class="" href="https://akoflow.com/docs/guides/workflows/planning">planning alternatives</a>, <a class="" href="https://akoflow.com/docs/guides/workflows/definitions">workflow authoring</a>, or the <a class="" href="https://akoflow.com/docs/showcase/scientific-workflows/montage-050">Montage 050 scientific workflow</a>.</p>
<p>API automation is a separate next step once you know these objects; see <a class="" href="https://akoflow.com/docs/tutorials/api-access">API access</a>. The Desktop path manages its internal credentials for you.</p>]]></content:encoded>
            <category>Getting started</category>
            <category>Desktop</category>
            <category>Experiments</category>
        </item>
        <item>
            <title><![CDATA[Montage 050: a sky made of workflows]]></title>
            <link>https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic</link>
            <guid>https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic</guid>
            <pubDate>Wed, 21 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Twelve observations, 58 activities, one astronomical mosaic. Explore the science, reproduce the local workflow, and read the evidence behind a completed experiment.]]></description>
            <content:encoded><![CDATA[<p>The stars in the opening image are the output of a scientific computation. Before the color mosaic existed, individual observations had to be reprojected, their overlaps compared, their backgrounds reconciled, and their pixels combined. AkôFlow coordinates those steps as a workflow and keeps the execution evidence alongside the result.</p>
<p>This field note follows <strong>Montage 050</strong>, a 58-activity astronomy workflow. We will look at what the activities do, how to reproduce the local example, and what an existing completed experiment tells us about planning and execution.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="start-with-the-imageand-its-provenance">Start with the image—and its provenance<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#start-with-the-imageand-its-provenance" class="hash-link" aria-label="Direct link to Start with the image—and its provenance" title="Direct link to Start with the image—and its provenance" translate="no">​</a></h2>
<p>The cover is the actual <strong>1800 × 1800</strong> color preview from run <code>montage-docker-image-real-20261010-v2</code>. It is a recorded product of a completed hybrid GCP/HPC experiment. Click it to enlarge the image, or <a href="https://akoflow.com/assets/files/mosaic-color-259b2232707c088f05c00b842b8c8a3c.png" target="_blank" class="">open the original PNG</a>.</p>
<p>That experiment and the local reproduction described below use different execution environments. The cover and historical timings establish what the completed hybrid run produced; they are not a claim that the two-slot local example finished in the same time.</p>
<p>The preserved PNG is 4,920,451 bytes. Its SHA-256 is:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">63fa4d8447274bdb8a44f6be8cf5a23c0a2f0baa479bd2ae1ec3b541df4e19f2</span><br></div></code></pre></div></div>
<p>The image copied into this site matches that checksum. You can download the <a href="https://akoflow.com/assets/files/observed-results-1b7ead5356d5a51e0a7e88d6792b3aab.json" target="_blank" class="">observed result summary</a> to connect the picture to the run, activity counts, timings, and audit checks.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-montage-does-for-astronomy">What Montage does for astronomy<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#what-montage-does-for-astronomy" class="hash-link" aria-label="Direct link to What Montage does for astronomy" title="Direct link to What Montage does for astronomy" translate="no">​</a></h2>
<p>A sky survey records many images rather than a single photograph of an entire region. Those images may use different pixel grids and have different background levels. Simply placing them next to each other would leave misalignment and visible seams.</p>
<p><a href="https://www.ipac.caltech.edu/project/montage" target="_blank" rel="noopener noreferrer" class="">Montage, developed at IPAC</a>, combines astronomical images while preserving positional and calibration fidelity. Its building blocks operate on FITS files, the scientific image products in this workflow. The color PNG is a visualization of the resulting mosaics; retain the FITS products for scientific analysis.</p>
<p>Three operations explain much of the computation:</p>
<ul>
<li class=""><strong>Reprojection:</strong> map observations onto a common output grid. The <a href="https://irsa.ipac.caltech.edu/Montage/docs/mProject.html" target="_blank" rel="noopener noreferrer" class="">mProject documentation</a> describes the input image, header template, reprojected image, and accompanying area image.</li>
<li class=""><strong>Background matching:</strong> measure overlap differences and solve for consistent corrections. <a href="https://irsa.ipac.caltech.edu/Montage/docs/mBgModel.html" target="_blank" rel="noopener noreferrer" class="">mBgModel</a> uses the fitted differences to estimate a global set of adjustments.</li>
<li class=""><strong>Coaddition:</strong> combine corrected observations into mosaics. The <a href="https://irsa.ipac.caltech.edu/Montage/docs/how.html" target="_blank" rel="noopener noreferrer" class="">Montage module guide</a> describes the tools for metadata generation, reprojection, background correction, and mosaicking.</li>
</ul>
<p>Here, twelve input FITS observations feed three image-band branches. Each branch produces a FITS mosaic and a monochrome preview; a final activity combines the three mosaics into the color preview.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="which-montage-example-and-which-public-data">Which Montage example and which public data?<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#which-montage-example-and-which-public-data" class="hash-link" aria-label="Direct link to Which Montage example and which public data?" title="Direct link to Which Montage example and which public data?" translate="no">​</a></h2>
<p>This example is <strong>Montage 050</strong>, preserved in the original image as <code>050d</code>. The identifier names the workload configuration; it does <strong>not</strong> mean that the graph contains 50 activities. Section 4.1 and Table 1 of the <a href="https://doi.org/10.5753/sbbd.2024.241126" target="_blank" rel="noopener noreferrer" class="">AkôFlow paper, SBBD 2024</a>, describe the smaller “0.5” configuration with the same inventory used here: 12 projections, 18 overlap fits, and 58 activity executions in total. The paper also evaluates a larger “1.0” configuration with 472 executions. This walkthrough uses the smaller one. The bundled FITS header templates define its actual output footprint and pixel grid.</p>
<p>The inputs are <strong>real, publicly accessible astronomical survey images</strong>, rather than generated test pictures. Their names identify the <strong>POSS2/UKSTU</strong> survey products distributed through the <a href="https://irsa.ipac.caltech.edu/data/DSS/" target="_blank" rel="noopener noreferrer" class="">Digitized Sky Survey (DSS) archive at IRSA</a>. DSS digitizes photographic survey plates from the Palomar and UK Schmidt telescopes; IRSA provides image access and links to the originating STScI archive. The <a href="https://irsa.ipac.caltech.edu/docs/irsaviewer_datasets.html" target="_blank" rel="noopener noreferrer" class="">IRSA dataset summary</a> documents that survey lineage. Public access does not remove the archive's attribution and copyright requirements; retain the DSS/STScI and original survey acknowledgments when reusing the images.</p>
<p>The pinned bundle contains four input tiles in each of three survey bands:</p>
<table><thead><tr><th>Branch</th><th>Source filename family</th><th>Source band</th><th>FITS mosaic</th><th>Display channel in the final PNG</th></tr></thead><tbody><tr><td><code>1</code></td><td><code>poss2ukstu_blue_*.fits</code></td><td>Blue</td><td><code>1-mosaic.fits</code></td><td>Blue</td></tr><tr><td><code>2</code></td><td><code>poss2ukstu_red_*.fits</code></td><td>Red</td><td><code>2-mosaic.fits</code></td><td>Green</td></tr><tr><td><code>3</code></td><td><code>poss2ukstu_ir_*.fits</code></td><td>Near infrared</td><td><code>3-mosaic.fits</code></td><td>Red</td></tr></tbody></table>
<p>That is <strong>12 FITS inputs</strong>, approximately 87 MiB in the image's input seed. The RGB assignment is a visualization choice: the red survey band is displayed in green, and the infrared band in red. Read the scientific FITS products and their headers when interpreting measurements; PNG colors alone do not identify an observing wavelength.</p>
<p>The exact command and file inventory is available in the <a href="https://github.com/UFFeScience/akoflow-examples/blob/d890c3171e3661890305b763b8fc3ede48bb61b4/scientific-workflows/montage-050/workflow.yaml" target="_blank" rel="noopener noreferrer" class="">pinned <code>workflow.yaml</code></a>. Keeping that revision and the container digest identifies the packaged input set used for reproduction. Acquiring a fresh cutout from the public archive may select different pixels or preprocessing, so it is a new input set to record explicitly.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="inside-the-58-activity-graph">Inside the 58-activity graph<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#inside-the-58-activity-graph" class="hash-link" aria-label="Direct link to Inside the 58-activity graph" title="Direct link to Inside the 58-activity graph" translate="no">​</a></h2>
<p>The local bundle preserves the original commands, activity names, and <strong>138 named file handoffs</strong>. Its activity inventory is:</p>
<table><thead><tr><th>Native command</th><th style="text-align:right">Activities</th><th>Responsibility</th></tr></thead><tbody><tr><td><code>mProject</code></td><td style="text-align:right">12</td><td>Reproject the input observations</td></tr><tr><td><code>mDiffFit</code></td><td style="text-align:right">18</td><td>Compare overlaps and fit their differences</td></tr><tr><td><code>mConcatFit</code></td><td style="text-align:right">3</td><td>Assemble fit results for each band</td></tr><tr><td><code>mBgModel</code></td><td style="text-align:right">3</td><td>Solve each band's background corrections</td></tr><tr><td><code>mBackground</code></td><td style="text-align:right">12</td><td>Apply corrections to the projected observations</td></tr><tr><td><code>mImgtbl</code></td><td style="text-align:right">3</td><td>Build metadata tables for corrected images</td></tr><tr><td><code>mAdd</code></td><td style="text-align:right">3</td><td>Coadd the three FITS mosaics</td></tr><tr><td><code>mViewer</code></td><td style="text-align:right">4</td><td>Produce three monochrome previews and one color preview</td></tr><tr><td><strong>Total</strong></td><td style="text-align:right"><strong>58</strong></td><td></td></tr></tbody></table>
<p>The diagram below comes from the local example's activity and dependency contract. Enlarge it to follow individual edges.</p>
<figure aria-label="Montage 050 locally activity DAG"><button type="button" class="thumbnail__JRY" aria-label="Enlarge DAG: Montage 050 locally"></button><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><div class="largeDiagram_oYyn"></div></dialog><figcaption>Montage 050 locally<!-- -->. Nodes in the same column can run in parallel once their dependencies complete.</figcaption></figure>
<p>Independent projections and overlap operations can run concurrently after their own inputs are ready. Background modeling introduces a convergence point within each band. The final color preview waits for its three mosaic inputs. There is no extra global barrier forcing an unrelated band to wait at every stage.</p>
<p>This is why the DAG matters: it encodes scientific dependencies. A scheduler can choose where ready work runs, but cannot skip an input merely to make the graph appear more parallel. The <a href="https://irsa.ipac.caltech.edu/Montage/docs/grid.html" target="_blank" rel="noopener noreferrer" class="">Montage parallelization guide</a> explains the relationship between independent image operations and background-model convergence.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-each-activity-does-and-what-its-parameters-mean">What each activity does, and what its parameters mean<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#what-each-activity-does-and-what-its-parameters-mean" class="hash-link" aria-label="Direct link to What each activity does, and what its parameters mean" title="Direct link to What each activity does, and what its parameters mean" translate="no">​</a></h2>
<p>The scientific design follows Jacob et al., <a href="https://arxiv.org/abs/1005.4454" target="_blank" rel="noopener noreferrer" class=""><em>Montage: a grid portal and software toolkit for science-grade astronomical image mosaicking</em></a>, especially its toolkit components and workflow discussion. Reprojection aligns the pixel grids; overlap fitting supplies evidence for background adjustments; corrected images are then coadded. The sections below combine that explanation with the module manuals and the <strong>actual arguments in this example</strong>.</p>
<p>An activity type, such as <code>mProject</code>, can have several executions in the graph. Here, the same processing chain repeats for three bands. The examples below show the first band unless noted otherwise. They run inside an activity workspace after AkôFlow has staged the declared inputs; copying one command into an empty directory is not a complete reproduction.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="mproject-put-one-observation-on-the-common-sky-grid"><code>mProject</code>: put one observation on the common sky grid<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#mproject-put-one-observation-on-the-common-sky-grid" class="hash-link" aria-label="Direct link to mproject-put-one-observation-on-the-common-sky-grid" title="Direct link to mproject-put-one-observation-on-the-common-sky-grid" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">mProject </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-X</span><span class="token plain"> poss2ukstu_blue_001_001.fits pposs2ukstu_blue_001_001.fits region-oversized.hdr</span><br></div></code></pre></div></div>
<p>Each of the <strong>12 executions</strong> reprojects one observation. It maps input pixels through sky coordinates onto the requested output grid, accounting for pixel overlap rather than merely resizing a picture. Its outputs include the projected FITS image and an accompanying <code>_area.fits</code> coverage image.</p>
<table><thead><tr><th>Parameter</th><th>Meaning in this example</th></tr></thead><tbody><tr><td><code>-X</code></td><td>Expand the template region as necessary to retain the input image's extent.</td></tr><tr><td><code>poss2ukstu_blue_001_001.fits</code></td><td>Input observation.</td></tr><tr><td><code>pposs2ukstu_blue_001_001.fits</code></td><td>Projected output; the <code>p</code> prefix is this workflow's naming convention.</td></tr><tr><td><code>region-oversized.hdr</code></td><td>FITS header template defining the working grid, coordinate projection, reference coordinates, and pixel scale. It is used before the final mosaic footprint is applied.</td></tr></tbody></table>
<p>These tasks have no predecessor activities and can start independently when execution slots are available. See the <a href="https://irsa.ipac.caltech.edu/Montage/docs/mProject.html" target="_blank" rel="noopener noreferrer" class="">official <code>mProject</code> manual</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="mdifffit-measure-how-two-projected-images-disagree"><code>mDiffFit</code>: measure how two projected images disagree<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#mdifffit-measure-how-two-projected-images-disagree" class="hash-link" aria-label="Direct link to mdifffit-measure-how-two-projected-images-disagree" title="Direct link to mdifffit-measure-how-two-projected-images-disagree" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">mDiffFit </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-d</span><span class="token plain"> </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-s</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-fit.000001.000002.txt pposs2ukstu_blue_001_001.fits pposs2ukstu_blue_001_002.fits </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-diff.000001.000002.fits region-oversized.hdr</span><br></div></code></pre></div></div>
<p>The <strong>18 executions</strong> compare overlapping pairs: six pairs among the four images in each band. <code>mDiffFit</code> combines image differencing (<code>mDiff</code>) with a plane fit (<code>mFitplane</code>). It measures relative background offsets and gradients that the next stages need.</p>
<table><thead><tr><th>Parameter</th><th>Meaning in this example</th></tr></thead><tbody><tr><td><code>-d</code></td><td>Enable diagnostic output.</td></tr><tr><td><code>-s 1-fit.000001.000002.txt</code></td><td>Write the structured fit/status result for this pair to a named file.</td></tr><tr><td>The two <code>pposs2ukstu_…fits</code> arguments</td><td>Projected images to compare; both projection tasks must finish first.</td></tr><tr><td><code>1-diff.000001.000002.fits</code></td><td>Difference-image path used by the combined operation.</td></tr><tr><td><code>region-oversized.hdr</code></td><td>Shared working-grid template.</td></tr></tbody></table>
<p>Different pairs can run concurrently after their respective inputs arrive. See the <a href="https://irsa.ipac.caltech.edu/Montage/docs/gridtools.html" target="_blank" rel="noopener noreferrer" class="">Montage grid-tool description</a> and <a href="https://github.com/Caltech-IPAC/Montage/blob/main/grid/Pegasus/mDiffFit.c" target="_blank" rel="noopener noreferrer" class=""><code>mDiffFit</code> implementation and command interface</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="mconcatfit-gather-the-pairwise-measurements"><code>mConcatFit</code>: gather the pairwise measurements<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#mconcatfit-gather-the-pairwise-measurements" class="hash-link" aria-label="Direct link to mconcatfit-gather-the-pairwise-measurements" title="Direct link to mconcatfit-gather-the-pairwise-measurements" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">mConcatFit </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-stat.tbl </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-fits.tbl </span><span class="token builtin class-name" style="color:hsl(35, 99%, 36%)">.</span><br></div></code></pre></div></div>
<p>There are <strong>three executions</strong>, one per band. Each gathers the individual overlap-fit records into the table required by background modeling. It combines <strong>fit parameters</strong>, not image pixels.</p>
<table><thead><tr><th>Parameter</th><th>Meaning in this example</th></tr></thead><tbody><tr><td><code>1-stat.tbl</code></td><td>Input table identifying the fit-result files to collect.</td></tr><tr><td><code>1-fits.tbl</code></td><td>Output table of pairwise fit measurements.</td></tr><tr><td><code>.</code></td><td>Directory containing those staged fit-result files: the current workspace.</td></tr></tbody></table>
<p>This task waits for the band's six <code>mDiffFit</code> executions. The <a href="https://irsa.ipac.caltech.edu/Montage/docs/gridtools.html" target="_blank" rel="noopener noreferrer" class="">grid-tool guide</a> explains why independently generated fit records need this merge; the <a href="https://github.com/Caltech-IPAC/Montage/blob/main/grid/Pegasus/mConcatFit.c" target="_blank" rel="noopener noreferrer" class=""><code>mConcatFit</code> source</a> documents its three positional arguments.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="mbgmodel-solve-a-consistent-background-model-for-the-band"><code>mBgModel</code>: solve a consistent background model for the band<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#mbgmodel-solve-a-consistent-background-model-for-the-band" class="hash-link" aria-label="Direct link to mbgmodel-solve-a-consistent-background-model-for-the-band" title="Direct link to mbgmodel-solve-a-consistent-background-model-for-the-band" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">mBgModel </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-i</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">100000</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-images.tbl </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-fits.tbl </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-corrections.tbl</span><br></div></code></pre></div></div>
<p>The <strong>three executions</strong> use the overlap measurements together to find per-image background corrections. A global solution within each band avoids treating each seam as an unrelated adjustment. The result is a correction table; the image pixels are changed by the following activity.</p>
<table><thead><tr><th>Parameter</th><th>Meaning in this example</th></tr></thead><tbody><tr><td><code>-i 100000</code></td><td>Iteration count requested by this versioned workload's modeling command; it is not a timeout or CPU allocation. Preserve it when reproducing the pinned example.</td></tr><tr><td><code>1-images.tbl</code></td><td>Input image metadata and identifiers.</td></tr><tr><td><code>1-fits.tbl</code></td><td>Aggregated measurements from <code>mConcatFit</code>.</td></tr><tr><td><code>1-corrections.tbl</code></td><td>Output coefficients for correcting each image's background.</td></tr></tbody></table>
<p>This is a convergence point for each band. Other bands can progress independently. The <a href="https://irsa.ipac.caltech.edu/Montage/docs/mBgModel.html" target="_blank" rel="noopener noreferrer" class="">official <code>mBgModel</code> manual</a> explains the solver and its arguments; documented iteration limits can differ from the packaged command, so the pinned image remains the reference for this reproduction.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="mbackground-apply-the-correction-to-one-projected-image"><code>mBackground</code>: apply the correction to one projected image<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#mbackground-apply-the-correction-to-one-projected-image" class="hash-link" aria-label="Direct link to mbackground-apply-the-correction-to-one-projected-image" title="Direct link to mbackground-apply-the-correction-to-one-projected-image" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">mBackground </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-t</span><span class="token plain"> pposs2ukstu_blue_001_001.fits cposs2ukstu_blue_001_001.fits </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-projected.tbl </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-corrections.tbl</span><br></div></code></pre></div></div>
<p>Each of the <strong>12 executions</strong> subtracts the fitted background plane from one projected image. In the module's model, the plane has the form <code>A*x + B*y + C</code>. This matches relative backgrounds while retaining the image for coaddition; it is not a command to remove every astronomical source or all diffuse emission.</p>
<table><thead><tr><th>Parameter</th><th>Meaning in this example</th></tr></thead><tbody><tr><td><code>-t</code></td><td>Table mode: obtain the image's correction coefficients from the supplied tables rather than three explicit coefficient arguments.</td></tr><tr><td><code>pposs2ukstu_blue_001_001.fits</code></td><td>Projected input image.</td></tr><tr><td><code>cposs2ukstu_blue_001_001.fits</code></td><td>Background-corrected output; <code>c</code> is the workflow's naming convention.</td></tr><tr><td><code>1-projected.tbl</code></td><td>Metadata table used to identify the projected image.</td></tr><tr><td><code>1-corrections.tbl</code></td><td>Per-image corrections produced by <code>mBgModel</code>.</td></tr></tbody></table>
<p>Corrections for different images can run concurrently once their band model and projected inputs are ready. See the <a href="https://irsa.ipac.caltech.edu/Montage/docs/mBackground.html" target="_blank" rel="noopener noreferrer" class="">official <code>mBackground</code> manual</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="mimgtbl-describe-the-corrected-files-for-the-coaddition-step"><code>mImgtbl</code>: describe the corrected files for the coaddition step<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#mimgtbl-describe-the-corrected-files-for-the-coaddition-step" class="hash-link" aria-label="Direct link to mimgtbl-describe-the-corrected-files-for-the-coaddition-step" title="Direct link to mimgtbl-describe-the-corrected-files-for-the-coaddition-step" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">mImgtbl </span><span class="token builtin class-name" style="color:hsl(35, 99%, 36%)">.</span><span class="token plain"> </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-t</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-corrected.tbl </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-updated-corrected.tbl</span><br></div></code></pre></div></div>
<p>The <strong>three executions</strong> read FITS headers and create metadata tables. Those tables describe image geometry and file identity so that coaddition can place the corrected inputs correctly. This stage produces metadata, not another mosaic.</p>
<table><thead><tr><th>Parameter</th><th>Meaning in this example</th></tr></thead><tbody><tr><td><code>.</code></td><td>Directory in which to read the corrected FITS files.</td></tr><tr><td><code>-t 1-corrected.tbl</code></td><td>Restrict processing to the images named in this input list, rather than every FITS file in the workspace.</td></tr><tr><td><code>1-updated-corrected.tbl</code></td><td>Output table with the corrected files' header metadata.</td></tr></tbody></table>
<p>Each task waits for its band's four corrected images. The <a href="https://irsa.ipac.caltech.edu/Montage/docs/mImgtbl.html" target="_blank" rel="noopener noreferrer" class="">official <code>mImgtbl</code> manual</a> documents the table fields and selection option.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="madd-coadd-the-corrected-observations-into-one-fits-mosaic"><code>mAdd</code>: coadd the corrected observations into one FITS mosaic<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#madd-coadd-the-corrected-observations-into-one-fits-mosaic" class="hash-link" aria-label="Direct link to madd-coadd-the-corrected-observations-into-one-fits-mosaic" title="Direct link to madd-coadd-the-corrected-observations-into-one-fits-mosaic" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">mAdd </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-e</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-updated-corrected.tbl region.hdr </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-mosaic.fits</span><br></div></code></pre></div></div>
<p>The <strong>three executions</strong> create one scientific mosaic per band from the corrected, aligned images. Coaddition combines contributions where pixels overlap; it is not concatenation of files or an RGB operation. Montage also produces an area/coverage mosaic.</p>
<table><thead><tr><th>Parameter</th><th>Meaning in this example</th></tr></thead><tbody><tr><td><code>-e</code></td><td>Use the exact dimensions in the final header template instead of shrinking the mosaic to the data's bounding region.</td></tr><tr><td><code>1-updated-corrected.tbl</code></td><td>Metadata table selecting the images to coadd.</td></tr><tr><td><code>region.hdr</code></td><td>Final mosaic template, as distinct from the oversized working template used earlier. The recorded output is 1800 × 1800 pixels.</td></tr><tr><td><code>1-mosaic.fits</code></td><td>Output scientific mosaic for this band.</td></tr></tbody></table>
<p>No averaging-mode override (<code>-a</code>) is supplied in this command. The <a href="https://irsa.ipac.caltech.edu/Montage/docs/mAdd.html" target="_blank" rel="noopener noreferrer" class="">official <code>mAdd</code> manual</a> describes the coaddition modes and area-image behavior.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="mviewer-turn-scientific-mosaics-into-viewable-pngs"><code>mViewer</code>: turn scientific mosaics into viewable PNGs<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#mviewer-turn-scientific-mosaics-into-viewable-pngs" class="hash-link" aria-label="Direct link to mviewer-turn-scientific-mosaics-into-viewable-pngs" title="Direct link to mviewer-turn-scientific-mosaics-into-viewable-pngs" translate="no">​</a></h3>
<p>The first <strong>three executions</strong> render one preview per band:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">mViewer </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-ct</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain"> </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-gray</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-mosaic.fits </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-1s</span><span class="token plain"> max gaussian </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-png</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-mosaic.png</span><br></div></code></pre></div></div>
<table><thead><tr><th>Parameter</th><th>Meaning in this example</th></tr></thead><tbody><tr><td><code>-ct 1</code></td><td>Select color-table index 1 for the single-band display.</td></tr><tr><td><code>-gray 1-mosaic.fits</code></td><td>Read one FITS image for single-band rendering.</td></tr><tr><td><code>-1s max</code></td><td>Set the display range using a sigma-based lower bound and the maximum as the upper bound.</td></tr><tr><td><code>gaussian</code></td><td>Use Gaussian histogram-based stretching for display.</td></tr><tr><td><code>-png 1-mosaic.png</code></td><td>Write the rendered PNG.</td></tr></tbody></table>
<p>The <strong>fourth execution</strong> builds the color preview after all three <code>mAdd</code> tasks finish:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">mViewer </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-red</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">3</span><span class="token plain">-mosaic.fits </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-0.5s</span><span class="token plain"> max gaussian-log </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-green</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">2</span><span class="token plain">-mosaic.fits </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-0.5s</span><span class="token plain"> max gaussian-log </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-blue</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-mosaic.fits </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-0.5s</span><span class="token plain"> max gaussian-log </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-png</span><span class="token plain"> mosaic-color.png</span><br></div></code></pre></div></div>
<p>Here, <code>-red</code>, <code>-green</code>, and <code>-blue</code> assign FITS mosaics to display channels. Each receives its own <code>-0.5s max</code> range and <code>gaussian-log</code> stretch. <code>-png</code> names the final output. These choices control visualization, not the calibrated FITS pixel values.</p>
<p>The <a href="https://github.com/Caltech-IPAC/Montage/blob/main/man/docs/mViewer.html" target="_blank" rel="noopener noreferrer" class="">official <code>mViewer</code> examples</a> describe these interfaces. Berriman and Good's <a href="https://arxiv.org/abs/1702.02593" target="_blank" rel="noopener noreferrer" class="">visualization paper</a> explains the scientific visualization context. The three single-band previews and the color preview are sibling consumers of the FITS mosaics: the color task does not need to wait for the preview PNGs.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="scientific-parameters-and-execution-settings-are-different">Scientific parameters and execution settings are different<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#scientific-parameters-and-execution-settings-are-different" class="hash-link" aria-label="Direct link to Scientific parameters and execution settings are different" title="Direct link to Scientific parameters and execution settings are different" translate="no">​</a></h3>
<p>The command arguments above determine image processing and file products. The YAML also supplies AkôFlow settings such as <code>cpuLimit: 1000m</code> (one CPU), <code>memoryLimit: 1Gi</code>, the selected runtime, and <code>dependsOn</code>. Those govern execution placement, limits, and readiness; they are not flags passed to Montage. <code>workspaceSeedPath</code> identifies the packaged seed, while historical <code>simulation.durationSeconds</code> values support planning and do not measure a new real execution.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="reproduce-the-workload-locally">Reproduce the workload locally<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#reproduce-the-workload-locally" class="hash-link" aria-label="Direct link to Reproduce the workload locally" title="Direct link to Reproduce the workload locally" translate="no">​</a></h2>
<p>If this is your first AkôFlow experiment, begin with <a class="" href="https://akoflow.com/blog/from-a-dag-to-your-first-run">the Desktop walkthrough</a>. It teaches definitions, environments, scopes, plans, and runs with a tiny local workload.</p>
<p>The full Montage bundle adds a command-line preparation and execution path. Have <strong>Git, Go 1.23 or newer, and Docker with linux/amd64 support</strong> available. Keep at least <strong>15 GiB</strong> of free disk for the image and intermediate workspaces. Retention and concurrency affect the peak requirement. Apple Silicon runs this amd64 workload through emulation and may take substantially longer.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-get-the-versioned-example">1. Get the versioned example<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#1-get-the-versioned-example" class="hash-link" aria-label="Direct link to 1. Get the versioned example" title="Direct link to 1. Get the versioned example" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token function" style="color:hsl(221, 87%, 60%)">git</span><span class="token plain"> clone https://github.com/UFFeScience/akoflow-examples.git</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token builtin class-name" style="color:hsl(35, 99%, 36%)">cd</span><span class="token plain"> akoflow-examples</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">git</span><span class="token plain"> checkout </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--detach</span><span class="token plain"> d890c3171e3661890305b763b8fc3ede48bb61b4</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token builtin class-name" style="color:hsl(35, 99%, 36%)">cd</span><span class="token plain"> scientific-workflows/montage-050</span><br></div></code></pre></div></div>
<p>Pinning the checkout makes this walkthrough refer to a specific example revision. The <a href="https://github.com/UFFeScience/akoflow-examples/blob/d890c3171e3661890305b763b8fc3ede48bb61b4/scientific-workflows/montage-050/README.md" target="_blank" rel="noopener noreferrer" class="">bundle README</a> documents its requirements and commands.</p>
<p>The bundle contains <code>workflow.yaml</code>, <code>environment.yaml</code>, <code>scope.yaml</code>, and <code>topology.yaml</code>, plus preparation, execution, and validation scripts. The workflow retains historical simulation durations as model inputs. Use the provided runner or daemon helper for the real workload; importing that source YAML alone is not the complete real-execution setup.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-prepare-the-image-and-inputs">2. Prepare the image and inputs<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#2-prepare-the-image-and-inputs" class="hash-link" aria-label="Direct link to 2. Prepare the image and inputs" title="Direct link to 2. Prepare the image and inputs" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">./prepare.sh</span><br></div></code></pre></div></div>
<p>Preparation obtains the pinned image and Go dependencies, and checks the command/input contract. The image includes approximately 87 MiB of source FITS data, region headers, lookup tables, and the native Montage tools. There is no need to locate twelve observations manually.</p>
<p>The upstream image is pinned by digest:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">ovvesley/akoflow-wf-montage@sha256:26b060b83b990557ea86ab40503cc8f17ab6016b5973e7e6f9201100a96440c9</span><br></div></code></pre></div></div>
<p>Preparation success establishes that the inputs and commands are available. It does not mean all scientific activities have executed.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-execute-the-complete-local-dag">3. Execute the complete local DAG<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#3-execute-the-complete-local-dag" class="hash-link" aria-label="Direct link to 3. Execute the complete local DAG" title="Direct link to 3. Execute the complete local DAG" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">./run.sh</span><br></div></code></pre></div></div>
<p>The standalone runner uses <strong>two CPU slots</strong> by default. Each activity becomes eligible once its dependencies finish and a slot is available. It copies the bundled input seed, executes the native commands with network access disabled, and writes activity observations under <code>outputs/</code>.</p>
<p>This path provisions no cloud machines and needs no remote HPC account. It is a substantial scientific workload: allow it to finish rather than interpreting a slow projection as a completed run.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-validate-and-open-the-products">4. Validate and open the products<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#4-validate-and-open-the-products" class="hash-link" aria-label="Direct link to 4. Validate and open the products" title="Direct link to 4. Validate and open the products" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">./validate.sh</span><br></div></code></pre></div></div>
<p>Inspect the final files in <code>outputs/</code>:</p>
<table><thead><tr><th>Product</th><th>What it gives you</th></tr></thead><tbody><tr><td><code>1-mosaic.fits</code>, <code>2-mosaic.fits</code>, <code>3-mosaic.fits</code></td><td>Three 1800 × 1800 scientific mosaics</td></tr><tr><td><code>1-mosaic.png</code>, <code>2-mosaic.png</code>, <code>3-mosaic.png</code></td><td>Monochrome visual previews</td></tr><tr><td><code>mosaic-color.png</code></td><td>Combined color preview</td></tr><tr><td><code>manifest.json</code></td><td>Generated artifacts and SHA-256 digests</td></tr><tr><td><code>dag-validation.json</code></td><td>Dependency-wave validation</td></tr><tr><td><code>stage-&lt;activity&gt;.json</code></td><td>Per-activity observations</td></tr></tbody></table>
<p>The validator checks all 58 activity records, FITS dimensions, and PNG headers. A successful manifest is published only after the workflow and final-file checks pass. Merely finding one intermediate image is insufficient to declare the experiment complete.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="inspect-a-daemon-managed-run-in-desktop">Inspect a daemon-managed run in Desktop<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#inspect-a-daemon-managed-run-in-desktop" class="hash-link" aria-label="Direct link to Inspect a daemon-managed run in Desktop" title="Direct link to Inspect a daemon-managed run in Desktop" translate="no">​</a></h3>
<p>The bundle also supports a daemon helper that registers the local environment, builds the declared image, and submits the 58 activities to the engine. This advanced path requires a daemon whose API address and token you manage; follow <a class="" href="https://akoflow.com/docs/tutorials/api-access">API connection setup</a>. The graphical Desktop installation keeps its internal credentials managed by its proxy—do not assume that it exposes a shell token.</p>
<p>From the example directory, with that daemon connection configured:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">go run </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">..</span><span class="token plain">/</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">..</span><span class="token plain">/tools/daemon-local </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-root</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">..</span><span class="token plain">/</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">..</span><span class="token plain"> </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-example</span><span class="token plain"> scientific-workflows/montage-050 </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-wait</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">false</span><br></div></code></pre></div></div>
<p>The command prints the submitted run ID and returns while execution continues. Connect Desktop to that same instance and open the run. Inspect its activity DAG, file handoffs, logs, and completion status. The daemon owns execution and transfers; the standalone runner's <code>outputs/</code> directory belongs to the separate standalone path.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-the-completed-hybrid-experiment-observed">What the completed hybrid experiment observed<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#what-the-completed-hybrid-experiment-observed" class="hash-link" aria-label="Direct link to What the completed hybrid experiment observed" title="Direct link to What the completed hybrid experiment observed" translate="no">​</a></h2>
<p>The following results come from the preserved completion record for <strong><code>montage-docker-image-real-20261010-v2</code></strong>, dated by that run's identity. Its topology comprised ten GCP <code>e2-micro</code> instances, two <code>e2-medium</code> instances, and eight HPC activity assignments. This is a historical experiment, not the local two-slot configuration above.</p>
<table><thead><tr><th>Evidence</th><th style="text-align:right">Recorded result</th></tr></thead><tbody><tr><td>Completed activities</td><td style="text-align:right">58 / 58</td></tr><tr><td>Failed activities</td><td style="text-align:right">0</td></tr><tr><td>Successful runtime handles</td><td style="text-align:right">58</td></tr><tr><td>Missing dependency routes</td><td style="text-align:right">0</td></tr><tr><td>Transfer-barrier violations</td><td style="text-align:right">0</td></tr><tr><td>Unreleased consumer leases</td><td style="text-align:right">0</td></tr><tr><td>Overlapping activities on single-lane micro instances</td><td style="text-align:right">0</td></tr><tr><td>Final PNG dimensions</td><td style="text-align:right">1800 × 1800</td></tr></tbody></table>
<p>The preserved record also distinguishes three timing scopes:</p>
<table><thead><tr><th>Timing</th><th style="text-align:right">Seconds</th><th style="text-align:right">Approximately</th></tr></thead><tbody><tr><td>Planned makespan</td><td style="text-align:right">3,617.94</td><td style="text-align:right">60.3 min</td></tr><tr><td>SimGrid makespan</td><td style="text-align:right">3,617.50</td><td style="text-align:right">60.3 min</td></tr><tr><td>Real API-reported makespan</td><td style="text-align:right">6,924.25</td><td style="text-align:right">115.4 min</td></tr><tr><td>Run timestamp wall interval</td><td style="text-align:right">6,949.00</td><td style="text-align:right">115.8 min</td></tr></tbody></table>
<p>The real API-reported makespan was about <strong>1.91× the planned estimate</strong>. That is an observation from this run, not a general slowdown factor. Close agreement between the plan and simulation did not establish that the real distributed execution would match either prediction.</p>
<p>The accompanying results record identifies whole-workspace traffic and different planned edge volumes as a comparability limit. Summed transfer or compute work can overlap across activities and is not the same as wall-clock makespan. Likewise, a zero reported interference value cannot establish that physical contention was absent.</p>
<p>The recorded cloud compute-and-boot-disk lifecycle estimate was <strong>USD 0.3532</strong> at the experiment's list rates. It excludes network egress, public IPv4, reusable image storage, discounts, and tax, and assigns no calibrated monetary tariff to HPC. It is an estimate, not a provider invoice or a current price quote. Other cost fields in the JSON use different task/window scopes and should not be treated as equivalent bills.</p>
<p><a href="https://akoflow.com/assets/files/observed-results-1b7ead5356d5a51e0a7e88d6792b3aab.json" target="_blank" class="">Download the result summary and its limitations</a>. The repository preserves the original <a href="https://github.com/UFFeScience/akoflow/blob/main/experiments/montage-micro-hpc-e2/docker-image-real-v2-completion.json" target="_blank" rel="noopener noreferrer" class="">completion record</a> and <a href="https://github.com/UFFeScience/akoflow/blob/main/experiments/montage-micro-hpc-e2/docker-image-real-v2-results.json" target="_blank" rel="noopener noreferrer" class="">detailed results</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-isand-is-notverified-for-the-local-bundle">What is—and is not—verified for the local bundle<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#what-isand-is-notverified-for-the-local-bundle" class="hash-link" aria-label="Direct link to What is—and is not—verified for the local bundle" title="Direct link to What is—and is not—verified for the local bundle" translate="no">​</a></h2>
<p>The checked-in local image contract was validated on <strong>2026-10-20</strong>: twelve FITS inputs, 58 activities, and 138 named handoffs. That record explicitly states <code>fullExecutionPerformed: false</code>. Its separate daemon snapshot recorded a running workflow with zero completed activities at capture time. These are historical snapshots; neither establishes the current state of another instance.</p>
<p>The completed hybrid run supplies the mosaic and the results in this article. To claim a completed reproduction on your machine, retain your own successful validator output, activity records, and output manifest. The <a class="" href="https://akoflow.com/docs/showcase/scientific-workflows/montage-050">local showcase page</a> links the checked-in contract and daemon evidence.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="keep-the-experiment-with-the-picture">Keep the experiment with the picture<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#keep-the-experiment-with-the-picture" class="hash-link" aria-label="Direct link to Keep the experiment with the picture" title="Direct link to Keep the experiment with the picture" translate="no">​</a></h2>
<p>The mosaic is the visible result, but the research artifact includes more: input identity, native commands, the dependency graph, resource assignments, file transfers, and output digests. Together, they explain how the image was produced and where a later execution differs.</p>
<p>AkôFlow's original paper provides the research context: Ferreira et al., <strong>AkôFlow: um Middleware para execução de Workflows científicos em múltiplos ambientes conteinerizados</strong>, SBBD 2024, pp. 27–39. <a href="https://doi.org/10.5753/sbbd.2024.241126" target="_blank" rel="noopener noreferrer" class="">Read the publication</a>.</p>
<p>Continue with the <a class="" href="https://akoflow.com/docs/showcase/scientific-workflows/montage-050">complete local example</a>, the <a class="" href="https://akoflow.com/blog/from-a-dag-to-your-first-run">Desktop first experiment</a>, or <a class="" href="https://akoflow.com/docs/guides/workflows/planning">planning alternatives</a>. When comparing placements, preserve the scientific workload and change the execution environment deliberately, so the measurements remain interpretable.</p>]]></content:encoded>
            <category>Scientific workflows</category>
            <category>Astronomy</category>
            <category>Experiments</category>
        </item>
    </channel>
</rss>