Quick Start

Start with the maintained PsyFlow workflow.

Install the framework, scaffold a local task package, then run QA and validation before release.

These are the commands that matter most on the current main branch. The site now stays aligned with the maintained local runtime instead of the older Sphinx-era flow.

Latest 0.1.21
Install
pip install psyflow

Install the framework first.

Scaffold
psyflow init my-task

Create a canonical task package.

Run
psyflow-run task-path

Launch the task in human mode.

Validate
psyflow-validate task-path

Lint contracts, configs, and references.

QA
psyflow-qa task-path --config config/config_qa.yaml

Smoke-test and validate QA outputs.

Sim
psyflow-sim task-path --config config/config_scripted_sim.yaml

Run a scripted or task-specific simulation profile.

TAPS

TAPS keeps the full task structure readable.

Instead of scattering docs, config, runtime code, and QA artifacts across unrelated places, TAPS keeps them attached to the same task package.

Docs
README
Human-readable task purpose, setup, and review context.
Metadata
taskbeacon.yaml
Machine-readable IDs, maturity, preview links, and release state.
Runtime
config + src + assets
Separate task code, participant-facing assets, and local runtime settings.
Review
references + outputs
Keep QA artifacts, reference files, and release evidence attached to the task.
One Auditable Task Package
Readable by humans

README carries the task story, setup notes, and review context without forcing readers into the code.

Readable by tooling

Metadata and config stay structured, so QA, previews, and downstream tooling can reason over the task.

Readable over time

Outputs, references, and release evidence remain beside the source package instead of drifting away.

Framework

Keep the framework opinionated where reviewability matters.

PsyFlow is designed around a few stable primitives: `BlockUnit`, `StimBank`, `StimUnit`, `SubInfo`, and `TaskSettings`. The goal is not abstraction for its own sake, but a task runtime that stays readable when the paradigm grows.

Framework idea

Keep generic runtime work inside the framework, but keep paradigm logic close to the task. That split is what makes larger tasks easier to test, localize, and review.

PsyFlow framework flowchart
Use config and settings for reusable runtime state.
Keep `main.py` orchestration separate from `run_trial.py`.
Let framework helpers absorb generic boilerplate, not paradigm logic.
Keep outputs and validation artifacts tied to the same local package.
Trigger

The task emits semantic events. The runtime and drivers own delivery.

Semantic events

Trial code should name cue, target, feedback, or custom events instead of embedding serial logic.

TriggerRuntime

The runtime decides `now` versus `flip`, capability checks, and planned or executed logging.

Drivers

Mock, callable, serial, and fanout drivers stay outside task logic so hardware can change cleanly.

QA & Sim

Keep QA simple: run, inspect artifacts, validate, then release.

QA
psyflow-qa task-path --config config/config_qa.yaml

Run smoke QA and inspect qa_report.json, trace, and events.

Sim
psyflow-sim task-path --config config/config_scripted_sim.yaml

Use scripted or task-specific responders without coupling simulation to PsychoPy.

Validate
psyflow-validate task-path

Check contracts, configs, reference artifacts, and runtime text policy.

Tutorials

Start with the few tutorials that matter most.

Get started first, then go straight to Trigger and QA if you are building or reviewing a real task.

Open tutorials