Wesley Ferreira (@ovvesley), Boosted with LLMs
· 10 min read
Getting started / Desktop / Experiments
With AkôFlow Desktop installed, follow annotated screenshots to create your first local workflow, execute it, and inspect its output.
Read the storyWith 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.
This walkthrough uses AkôFlow Desktop throughout. 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.
Begin with write-report: one activity that writes result.txt and prints its contents in the activity log. This checks the complete path from a definition to a local execution and its recorded output.
After that succeeds, import a second YAML with three activities: prepare three measurements, compute their mean, and write a report. The expected answer is 4.00.
Both examples use a small BusyBox container on your local Docker engine. They perform real execution. They do not simulate work or allocate cloud machines.
This walkthrough starts after installing AkôFlow Desktop. If you still need the application, follow Install AkôFlow Desktop, then return here.
The screenshots below were captured from the actual interface. They show the controls using an existing reference instance: its workflow is named hello, its activity is a, and its local environment is Local environment. For your experiment, enter the tutorial names first-local-check, write-report, Local check, and First local scope. 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.
Each red number has a matching instruction below the image. Click a screenshot to enlarge it with its arrows; on a phone, scroll the enlarged view sideways to read the controls.
The capture shows an existing instance. Your fresh installation can have empty catalogs.
Checkpoint: Desktop is connected. If startup fails, open its failure details before retrying.
Open Infrastructure → Environments. To create the environment from scratch, follow the two screens below. If you already created Local check, open it and continue with its connection check instead.
Use the execution-infrastructure catalog for this real local workflow.
Local check.This form has only been filled for the capture: Save environment becomes available after a successful connection test.
On the environment page, select Check now. Wait until Local machine shows online. This makes the local resource available for planning.
An environment 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.
Open the environment you created. This reference environment is already online; your tutorial environment is named Local check.
Checkpoint: the local resource is online. Remember its environment name for step 5.
Create a plain-text file named first-local-check.yaml, or download the complete YAML. Copy the whole document, preserving indentation, and save it with the .yaml extension.
name: first-local-check
spec:
namespace: learning
activities:
- name: write-report
cpuLimit: "0.1"
memoryLimit: 32Mi
command:
executable:
source:
type: oci
reference: docker.io/library/busybox:1.36
delivery:
strategy: auto
targetFormat: oci
entrypoint: sh
arguments:
- -c
- |
printf 'Akoflow local check\n' > result.txt
cat result.txt
expectedOutputs: [result.txt]
Read the document from the outside in:
name identifies the workflow. namespace groups it under learning.activities contains one unit of work: write-report.command.executable names the BusyBox image. targetFormat: oci selects the container format used by local Docker.entrypoint: sh and the -c argument run the following shell script.printf creates the file in the activity workspace. cat prints it into the activity log.expectedOutputs asserts that result.txt exists after execution.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.
The catalog can already contain other workflows. Import your first-local-check.yaml file.
first-local-check.yaml.first-local-check definition.A DAG 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.
If the name already exists, open the existing definition or change name before importing another copy. The importer normalizes names into identifiers, so each new definition needs a distinct name.
Checkpoint: the definition exists and its graph matches the YAML. Importing saves a definition; it does not start a run.
A fresh instance can show an empty catalog; the creation action is in the page header.
First local scope and select your local environment.Enter First local scope. The initial topology is sufficient for a one-machine experiment.
The reference instance calls its existing environment Local environment. In your tutorial, choose Local check.
After selecting Local check, scroll to the bottom of the form to save it:
Scroll below the list of participating environments to reach this action.
A scope selects the environment resources offered to planning. Its topology describes the connections between them. A one-machine experiment needs no network links.
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.
Return to first-local-check and select Generate plan:
This reference definition is named hello. Open first-local-check in your own catalog.
The reference definition has two activities. Your first-local-check definition has only write-report.
First local scope.1 second.This reference activity is named a. In your workflow, select write-report; configure the same controls.
The duration is an estimate, not a timeout or a measurement. Image download and startup can make the first run take longer.
On the saved plan page, select Execute plan:
The example capture shows an existing saved plan. Use the manual plan generated for first-local-check.
Review the selected plan, Real execution, and the local runtime. Keep the suggested unique run ID or enter your own:
This reference plan is bound to its execution request. Your scope and plan names should refer to your new tutorial records.
Scroll to the bottom, then select Start execution once:
Scroll to the bottom of the execution request after reviewing the selected plan.
Wait until the run says completed and 1/1 activities settled:
This real reference run has two activities. Your first-local-check run must show 1/1 settled.
A plan describes where work should run. A run records what happened. Submission is asynchronous: pending or running can appear before completed.
On the completed run, select Activities, then write-report. Open its Details link or Open activity page from its information panel (some releases label this Open activity details).
This reference run lists a and b. Your activity list contains write-report.
| Where to look | Expected result |
|---|---|
| Execution details | Exit code 0 |
| Activity output/log | Akoflow local check |
| Generated files | result.txt, with a SHA-256 checksum |
Scroll down the activity page to Activity output and Generated files:
The reference run produced a.txt. Your YAML produces result.txt and prints Akoflow local check.
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.
You have now submitted and inspected a real local experiment. Save the YAML with your experiment material so the definition can be reused.
Save the next document as first-local-analysis.yaml, or download the complete analysis YAML. This is a new, complete workflow, with a different name from the first definition.
| Activity | Reads | Produces |
|---|---|---|
prepare | Values declared in its command: 2, 4, 6 | measurements.txt |
analyze | measurements.txt | mean.txt, containing 4.00 |
write-report | mean.txt | report.txt, containing Mean: 4.00 |
name: first-local-analysis
spec:
namespace: learning
activities:
- name: prepare
cpuLimit: "0.1"
memoryLimit: 32Mi
command:
executable:
source:
type: oci
reference: docker.io/library/busybox:1.36
delivery:
strategy: auto
targetFormat: oci
entrypoint: sh
arguments:
- -c
- |
printf '2\n4\n6\n' > measurements.txt
cat measurements.txt
expectedOutputs: [measurements.txt]
- name: analyze
dependsOn: [prepare]
cpuLimit: "0.1"
memoryLimit: 32Mi
command:
executable:
source:
type: oci
reference: docker.io/library/busybox:1.36
delivery:
strategy: auto
targetFormat: oci
entrypoint: sh
arguments:
- -c
- |
awk '{sum += $1; n++} END {printf "%.2f\n", sum/n}' measurements.txt > mean.txt
cat mean.txt
expectedOutputs: [mean.txt]
- name: write-report
dependsOn: [analyze]
cpuLimit: "0.1"
memoryLimit: 32Mi
command:
executable:
source:
type: oci
reference: docker.io/library/busybox:1.36
delivery:
strategy: auto
targetFormat: oci
entrypoint: sh
arguments:
- -c
- |
printf 'Mean: %s\n' "$(cat mean.txt)" > report.txt
cat report.txt
expectedOutputs: [report.txt]
The new field is dependsOn. analyze waits for prepare, and write-report waits for analyze. 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. expectedOutputs verifies that the required file exists.
Repeat the Desktop sequence:
first-local-analysis.yaml in Workflows → Definitions.First local scope.1 second each.Mean: 4.00. Its generated files should include report.txt with a checksum.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.
| Symptom | Next action |
|---|---|
| Desktop does not reach Connected | Check Docker and inspect first-start failure details. |
| Local environment is offline or missing from planning | Test its connection, save it, and select Check now. |
| YAML import fails | Check indentation, retain the complete name/spec wrapper, and use a distinct workflow name. |
| No compatible runtime appears | Recheck the environment's runtime binding and select a real local scope. |
| The first activity cannot obtain its image | Inspect the activity error and verify access to Docker Hub and the local Docker engine. |
| Analysis cannot find its input | Check dependsOn, the predecessor's completion, and workspace-staging evidence. |
| A run fails or stays pending | Open activity details and run events, then see Troubleshooting. |
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:
Ferreira, W.; Kunstmann, L.; Paes, A.; Bedo, M.; de Oliveira, D. AkôFlow: um Middleware para execução de Workflows científicos em múltiplos ambientes conteinerizados. SBBD, 2024, pp. 27–39. Read the paper.
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.
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.
For your next experiment, change the measurements in a new copy of the analysis YAML and check that the mean changes accordingly. Continue with planning alternatives, workflow authoring, or the Montage 050 scientific workflow.
API automation is a separate next step once you know these objects; see API access. The Desktop path manages its internal credentials for you.