All notable changes to DELFIN will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
PUCKER_SYMM and PUCKER_SYMM_ADD join cli_manta._CHAMPION_FLAGS
(delfin/manta/_ring_pucker.py). Two rings that lie in one orbit of the molecule's
automorphism group are indistinguishable, so the cartesian product over their pucker
states generates duplicates. Reducing the product per orbit does not mainly save
compute: because the combination cap cuts by fold depth, a smaller product means the
deep states — all rings folded at once — are reached at all instead of being cut off.
The add guard builds the champion's combination set first and fills up with the
reduced one afterwards, so the champion frame set is contained by construction.
Measured as a never-worse A/B on 6000 CCDC systems (symmfoldadd6k): 5819 systems
compared, 123 affected, 107 in the judged intersection. Every never-worse term is
zero, and the existing stock is provably untouched.
This landing is a coverage gain, not a quality gain. What carries it is the stock being provably untouched. The hard-frame fraction on the judged intersection does fall by 0.0013, but that margin is smaller than a single frame: had one of the 649 frames been hard, the sign would flip. All five systems that are known to build non-deterministically sit inside that judged set. The number is real as computed and below what this sample can resolve, so it establishes nothing about quality and is not read as if it did.
The reduction only merges what a genuine automorphism maps onto each other, never
what merely shares a rank multiset; where the automorphism search does not hold, the
full product is used, so the fallback is always the larger set. Both flags remain
overridable through the environment, and PUCKER_SYMM_ADD can be left off by anyone
who needs the combination cap to hold, at the cost of the deeper fold states.
DELFIN_FFFREE_INTERLIG_PAIR_FACTOR now defaults to 0.70 instead of 0.65
(delfin/manta/converter_backend.py). The inter-ligand pair gate that guards
backbone re-embedding uses this factor as its contact threshold; at 0.65 it sat
below the eye's own threshold of 0.70, so every pair in the band between the two
was a collision for the eye and invisible to the gate.
Measured as a never-worse A/B on 6000 CCDC systems (pairgate70): 5811 systems
compared, 1100 affected, 968 in the judged intersection. Every never-worse term is
zero — no capability, isomer, crystal isomer, polyhedron or frame lost, no torn
ligand bond, no good regression, no build lost — with capability gained on one
system and the existing stock provably untouched. Against the 1.3.0 landing at
0.65 the hard-frame fraction on the affected systems falls from 0.0638 to 0.0512,
so the appended frames are measurably cleaner while nothing in the stock is lost.
Counted file by file afterwards, against the state that carried factor 0.65: on 250 systems the tighter gate rejects 1424 previously appended frames, and three systems gain frames. No stock frame is affected anywhere — on all 250 the champion's own frame set is still contained in full. So this change makes the manifold cleaner by making it slightly smaller, and the frames it removes are the ones whose contacts the eye itself counts as collisions.
The factor stays overridable through the environment, so an interrupted run can be pinned to its original value and stay byte-identical.
Seven construction flags landed in cli_manta._CHAMPION_FLAGS, each behind a
never-worse A/B on 1000 to 6000 CCDC systems with the evidence recorded next
to the flag: RING_PUCKER (Cremer-Pople pucker siblings), LP_SIBLING
(lone-pair-oriented sibling), SIGMA_ENSEMBLE (ETKDG conformer ensemble as
siblings), BETA_SIBLING (+_STRICT, donor-plane sibling), TPR6
(+_EARLY_TM, trigonal-prismatic CN6 sibling), and BACKBONE_REEMBED with
INTERLIG_PAIR_GATE (ligand backbone re-embedding with a pairwise
never-worse contact gate in front of it; pool 6000, capability +7/-0, first
landing written by the loop's own landing gate). All additive: frames are
appended, never replaced; builds are byte-deterministic.
- All German comments and docstrings in the package translated to English; an AST comparison with docstrings stripped proves the code unchanged in every touched file.
_energy_terms.py: f-string rewritten for Python 3.11 (requires-python <3.12).staged_patches/native_grip_canonical.patchremoved (stale since June).
- Six slow tests that document known construction defects are marked
xfail(strict=True)with the defect named in the reason, so the nightly run is green while the defects stay visible and a root fix is noticed (distibine builds no frame; Cd MA2B2C2 all-trans isomer has one trans pair; Theorem-D flag adds no cf-isomers for YIVROM; D-AQIWAZ pyridine not metal-bonded; cyclam bimetal pucker sibling fails the graph gate). test_multihapto_patches.py: the rollback test asserted the pre-wire-in Sn-Ir regression (> 3.25 A); the construction no longer has it (2.194 A with both patches off), so the test now asserts the bonded distance.
A multi-sprint pass on the dashboard agent. Solo mode is now suitable for multi-day sessions: nothing the agent learns or does is silently lost, the user can fork / branch / search across history, and the canonical slash-command, hook, and MCP surfaces are all live.
Context management
- Live context-window bar above the chat input (blue → orange → red ramp at 60 % / 80 %; thin marker at the 95 % auto-compact trigger).
- LLM-quality compaction (API backends) with structured Goal / Decisions / Open-items summarisation; falls back to extractive on the CLI backend to keep the persistent session untouched.
- Tool-result auto-truncation via
_smart_truncate(cap=5000)so 200 kB MCP outputs no longer detonate the next request's input budget; head- tail kept so Python tracebacks always survive.
- Live per-turn footer reports duration / token Δ / tool calls / cost Δ after every turn.
- Pre-compaction transcript archive (append-only JSONL under
~/.delfin/transcript_archive/<sid>.jsonl). Long sessions never truly lose history — only summarise it in-place. - New
/context,/cost,/usageslash commands; status block injected into the solo system prompt every turn (msgs / tokens / % of window / last compaction).
Session
- Full state save+restore: chat, perm profile, provider, model, effort, active gate, last-compaction info, subagent panel, pending plan body, todo payload (10 fields total — legacy sessions still load).
/session ls | restore <id> | search <query> | fork [<id>] | tree [<id>] | archive | archive <id>slash commands.delfin-voila --resume <sid>(or--resume latest) auto-loads a saved session at dashboard boot; also honoursDELFIN_RESUME_SESSIONenv var for wrapper scripts.- Headless CLI:
python -m delfin.agent.cli run/init/session ls/session search, suitable for CI hooks, nightly summaries, scripted refactors.
Memory (typed, Claude-Code-compatible layout)
- Four memory types —
user/feedback/project/reference— with auto-classifier when/rememberis called without an explicit prefix (e.g. "don't mock the DB" → feedback). /remember [type:] <text>writes both the legacy~/.delfin/agent_memory.jsonand a typed sidecar file under~/.claude/projects/<slug>/memory/<type>_<slug>.mdwith frontmatter, plus an indexed line inMEMORY.md.[[name]]wiki-style cross-link resolution at prompt-build time: resolved targets become inline markdown links, dangling targets get a(not yet written)annotation./memories verifygreps every memory file for path-shaped references that no longer exist on disk — flags rotten recommendations.
Plan Mode
- New
planmode in the dropdown locks the permission profile to read-only and injectsplan_mode_addendum.mdinto the system prompt. ExitPlanModetool round-trip persists the approved plan to~/.claude/projects/<slug>/plans/<slug>.mdwith frontmatter./plansslash command (list / view / delete saved plans).
Subagents
- Built-in presets
explore/plan/code-reviewer/general-purposeextended by markdown files indelfin/agent/pack/agents/*_subagent.md(cannot override built-ins) and~/.delfin/subagents/*_subagent.md(can override). First user-facing custom preset shipped:chemistry-reviewer. - Optional
isolation="worktree"parameter creates a fresh git worktree before deriving sub-perms, so subagent edits never touch the user's working tree until reviewed. - Per-run telemetry JSONL log +
/agents statsfor lifetime aggregates (count, mean duration, tokens, errors, truncations).
Skills + custom slash commands
/skillslists discovered skills;/skills <name>prints the body- source path + usage hint. Palette autocomplete bug fixed (referenced non-existent fields, crashed on first skill).
- User-defined slash commands as markdown templates: drop
~/.delfin/commands/<name>.mdor<workspace>/.delfin/commands/<name>.mdwith optional frontmatter (description,argument-hint).$ARGUMENTS/$@/$1/$2/${ARGUMENTS}are substituted; unknown placeholders preserved.
Project bootstrap
/init(anddelfin-agent init) scans the repo for Python / Node / Rust / Go indicators + Makefile targets, writes a populatedAGENTS.mdwith detected build/test/lint commands, and scaffolds.delfin/settings.json.AGENTS.mdis auto-loaded by the prompt loader on the next turn.
Hooks (PreToolUse / PostToolUse / UserPromptSubmit / Stop)
- All four events now fire end-to-end.
UserPromptSubmitcan block the send viadecision: block; non-blocking hook output (exit code, stderr, duration) surfaces in chat so the user sees activity. /hooks list / add / remove / dry-runslash commands edit~/.delfin/settings.jsonwithout hand-editing JSON.
MCP servers
/mcp list / add / remove / enable / disable / reloadslash commands manage~/.delfin/mcp_servers.json. Add / remove / toggle auto-reload the process-wide registry; new MCP tool surfaces register without a dashboard restart.
Tooling
- 45 native function-calling tools (
/toolsfor the categorised browser): filesystem, bash, web, notebook, subagent, planning, task, skill, user interaction, scheduling, code navigation, docs, permissions. Plustask_getfor runtime task lookup. - Diff preview for
Edit/Write/multi_editrendered in the approval row (difflib.unified_diff, head + tail capped at 120 lines).
UX / observability
- Spinner with four modes — streaming (blue) / gated (orange, paused on approval) / queued (grey) / stale (red, no output for 10 min). Header chip mirrors the activity-tab spinner exactly.
- Silent-exit detection: when the worker finishes with no output and no exception, surfaces an informative system message so the user isn't left wondering why the spinner just disappeared.
- AskUserQuestion options accept an optional
previewmarkdown field; single-select questions with previews render side-by-side (40 % option list / 60 % preview pane) for visual comparison. /bash watch <id>streamsbash_backgroundjob output to chat in real time; auto-stops on job exit./bash jobs//bash unwatch//bash killfor fleet management.solo_agent.mdextended with "Strategies for approaching tasks", "Subagents", "Parallel tool calls", "Context management", "Memory", "Skills", "Sandbox security boundary" sections.
Follow-up to the parity sprint focused specifically on long-running multi-day usage: making each turn cheaper, keeping context useful as it grows, refusing to forget user goals at compaction, and learning from repeated failures.
Prompt processing
- Progressive disclosure stripper. Heavy lazy sections of the solo
role prompt (chemistry decision tree, web research, notebook
handling, KIT sandbox, project-dev workflow, background jobs) are
marked with
<!-- module:NAME -->comments. The prompt loader's new_strip_lazy_modulesruns a task-keyword heuristic and removes inactive modules before injection. Measured: 10 894 → 7 558 tokens (−31 %) on a typical no-keyword turn; chemistry / web / notebook tasks get their module back. Pipeline roles (quick / reviewed / cluster / full) keep the full prompt — they're more sensitive to subtle context changes. Opt-out via user settingagent.slim_prompt: false. - Cache-aware section order. The per-turn-variable session- environment block (cwd, git status, recent commits) moved from position 3 in the solo prompt to the bottom (just before live state + anchor), so the stable role-prompt + project-context prefix can stay in the provider prompt cache between turns.
Context management
- Sliding-window proactive compaction. New
AgentEngine._should_slide/_slide_window_trimfire at 70 % of the window (configurable via_SLIDING_WINDOW_PCT). User messages survive verbatim; assistant payloads >2 kB get head + tail truncation with a middle marker. The cliff-edge full compaction at 95 % becomes much rarer because the sliding window keeps trimming proactively. - Selective full compaction. When full compaction does fire, user-role messages now contribute up to 400 chars to the summary (not just the first line); tool-role messages are dropped except for JSON-error markers; assistant text continues to be extractive- summarised. Goal: the post-compaction agent remembers WHY it was doing what it was doing.
Task workflow
- Task dependency graph.
TaskStore.creategainsblocked_by;TaskStore.updategainsadd_blocked_by/remove_blocked_bywith automatic reverse-index maintenance onblocks. Transitioning toin_progressis refused while any blocker is unfinished. Thetask_createtool schema accepts the new field. - Stalled-task detector. After every worker turn, the dashboard
checks
TaskStore.find_stalled(max_age_s=600)against the current session; if any in-progress task has been untouched for >10 min the user gets a one-shot suggestion to switch into/mode planor/forgetthe task.
Learning loops
- Retrospective failure log (
delfin/agent/failure_log.py). Every tool error gets written to~/.delfin/failure_log.jsonl(best- effort, append-only, trimmed at 2 000 entries). Helpersread_failures,top_recurring(≥N occurrences in 7 days), anddetect_repeat_for_current_taskfor retry-loop short-circuits.api_client._dispatchwrites the log automatically when a tool returns{"error": …}. New/failuresslash command (defaulttop; alsorecent,clear). - BM25-style memory rerank.
memory_store.format_memory_contextnow scores every fact against the query via the standard BM25 saturation curve (k1=1.2, b=0.75) with recency as a tiebreaker. Replaces the previous token-set Jaccard score, which surfaced unrelated facts whenever they happened to share stopword-like tokens. Materially more relevant memories reach the prompt on long sessions where facts have accumulated.
- Unified Calculator Factory (
delfin/calculators.py): 34 computational backends (8 MLP, 20 QM, 3 semi-empirical, 3 MD) accessible through a singlecreate_calculator()interface returning standard ASE Calculator objects. - ML Potential backends: CHGNet, M3GNet/MatGL, SchNetPack, NequIP/Allegro, and ALIGNN added alongside existing ANI-2x, AIMNet2, and MACE-OFF, with CUDA device validation and automatic CPU fallback.
- AI/ML tools integration (
delfin/ai_tools/): 21 tools across Foundation Models (MoLFormer, Uni-Mol, ChemBERTa), Generative (REINVENT4, SyntheMol), Conformers (GeoMol, torsional-diffusion), Crystal Generation (MatterGen, CDVAE), Retrosynthesis (AiZynthFinder, RXNMapper, LocalRetro), Screening (DeepChem, ADMETlab), Metal Complex ML (molSimplify, architector), Visualization (plotly), and Wrapper Libraries (pymatgen, QCEngine, MDAnalysis, pymolpro). - Analysis tools: cclib (output parsing), nglview (3D visualization), and Packmol (solvation box builder) with wrapper modules.
- Per-tool Install/Update buttons in Dashboard Settings tab for all pip-installable tools, with outdated-package detection via
pip list --outdated. - Auto-detection of 88 external programs: Turbomole, Gaussian, NWChem, Q-Chem, GAMESS, Molpro, VASP, Quantum ESPRESSO, CP2K, FHI-aims, GROMACS, LAMMPS, AMBER, NAMD, OpenMM, and many more via PATH search (compatible with cluster module systems).
- ARCHITECTOR button in Submit Job tab: converts metal-complex SMILES to 3D XYZ structures using the architector library, with isomer navigation and 3D viewer display.
- Shell-based installers for all tool categories (
install_mlp_tools.sh,install_ai_tools.sh,install_analysis_tools.sh) with per-tool environment variable control.
- Fixed xTB calculator missing OrcaProfile (caused ASE BadConfiguration error).
- Fixed MOPAC calculator unreachable UHFSINGLET branch.
- Fixed OpenMM calculator dead code and confusing error flow.
- Fixed OpenMolcas factory importing wrong module (openmx instead of openmolcas).
- Fixed AIMNet2 and M3GNet silently ignoring
deviceparameter (GPU requests had no effect). - Fixed ALIGNN ignoring
model_nameparameter. - Fixed Dashboard Update button using
install_cmdinstead ofpip_pkg_name(wrong package updated). - Fixed Dashboard pip command parsing using
str.split()instead ofshlex.split()(broke on complex package specs). - Fixed operator precedence in wrapper library version lambdas (
orvsif/else). - Fixed missing ADMETlab and LocalRetro in AI tools installer script.
- Added
logging.exception()to Dashboard refresh error handlers (errors were silently swallowed). - Added installer return code check in
setup_runtime()for QM tools.
- New runtime and setup controls in the Settings tab, including configurable
Calculations/Archivepaths, backend selection, ORCA path overrides, ORCA scan/selection, and system-aware local resource detection. - New packaged
qm_toolsworkflow controls in the Settings tab:Prepare qm_tools,Install qm_tools, andUpdate qm_tools. - New bwUniCluster actions in the Settings tab:
Setup bwUniCluster,Verify bwUniCluster, andFull bwUni install. - New packaged runtime resources for wheel/PyPI installs, including generic submit templates and the packaged bwUniCluster installer.
- New English setup documentation in
docs/SETTINGS_AND_SETUP.md.
- DELFIN runtime configuration is now stored in
~/.delfin_settings.json, keeping user-specific paths and runtime choices outside the git repository. - Local execution now uses a bundled Python local runner fallback when shell-based local runner scripts are not present.
delfin-voilanow stages packaged notebooks safely, avoids fragile server-side browser assumptions, and behaves better in remote/server sessions.- Local and cluster setup flows are now exposed directly in the GUI while preserving compatibility with editable installs, existing repo-based installations, and established
software/layouts. - Packaged installs now include the resources needed for runtime setup instead of assuming a neighboring source checkout.
- Fixed packaged
delfin-voilalaunch failures caused by notebook root-directory issues, hidden staging paths, and server/browser launch behavior. - Fixed missing packaged runtime resources for PyPI/wheel installs, including local runner and setup assets that were previously only available from a source checkout.
- Fixed Settings-tab issues around saving configurable workspace/runtime paths and improved masking/handling of local sensitive transfer settings.
- Added detailed documentation for Settings, runtime controls, setup buttons, local installs, PyPI installs, and bwUniCluster workflows.
- Dashboard/GUI expansion across Submit/Recalc/ORCA Builder/TURBOMOLE Builder/Calculations/Archive tabs, including improved archive-to-calculations workflows and MO plotting controls.
- Explicit SMILES conversion modes in the Submit tab (
CONVERT SMILES,QUICK CONVERT SMILES,CONVERT SMILES + UFF) with improved handling of metal complexes. delfin-guppyworkflow improvements: quick conversion as additional start geometry and post-XTB topology validation.- Extended coordination-chemistry support in SMILES conversion (including additional coordination numbers and improved topology/isomer enumeration robustness).
ESD_T1_opttoggle support for controlling UKS vs TDDFT T1 optimization behavior.- Smart recalc controls and fingerprint-based skip logic for avoiding unnecessary ORCA reruns.
- Isomer deduplication logic was tightened and then made workflow-aware: dashboard and GUPPY now preserve broader labeled variant diversity for SMILES isomer sets.
- Dashboard molecule viewer and trajectory UX refined (layout stability, playback reliability, print mode controls, cube/MO interaction refinements).
- Cleanup/copy-back behavior around
.orca_iso*and GOAT/XTB side products hardened for better restart safety. - HPC runtime I/O overhead reduced via caching and scratch/runtime optimizations.
- Multiple SMILES conversion regressions affecting metal complexes (fragment topology, ring-count checks, hydrogen handling, and fallback strategy behavior).
- Archive/statistics browser issues (path extraction, folder navigation toggles, and clipboard/export actions).
- Several ORCA input/output propagation issues in submit/recalc flows (including missing copied
.inpand timeout/abort recovery paths). - Additional CO2 coordinator input-generation edge cases (basis assignment and convergence keyword handling).
- CLI: add
delfin --imagentry point to rerun the IMAG workflow on existing results and regenerate DELFIN.txt. - IMAG inputs now reuse the original ORCA template (incl.
%QMMM, per-atomNewGTO) while strippingMORead/%moinphints to force fresh guesses. %paland%maxcoreare inherited from the source frequency job so IMAG iterations use the same resource allocation.- Classic, manually, and OCCUPIER pipelines call the refactored IMAG routine for initial and redox steps, copying original inputs/outputs for traceability.
- README updated with
--imagdocumentation and CONTROL optionIMAG_scope(initial/all).
- Optional excited-state dynamics (ESD) module with standalone or post-redox execution, including S0/S1/T1/T2 optimisations plus ISC/IC scheduling in a dedicated
ESD/directory. - ORCA input builders for ESD workflows (
esd_module.py,esd_input_generator.py) and CLI/pipeline switches (ESD_modul,states,ISCs,ICs) with documentation. - Automatic per-run logging: the CLI attaches a global
delfin_run.logand OCCUPIER subprocesses emit anoccupier.logalongside ORCA outputs. - CLI help now documents QM/XTB splitting via
$markers and clarifies howparallel_workflowstoggles between parallel and sequential scheduling modes. delfin --purgecommand to wipe all intermediates (keeps CONTROL.txt + main input) with interactive confirmation.
- Persist QMMM split detection (
$separator) via shared cache so OCCUPIER/Classic/Manually runs keep theQM/XTBflag even if later geometries omit the marker. - All geometry writers now pass the geometry path to the splitter so cache lookups work across workflow steps.
- OCCUPIER FoB scheduling always uses the global job manager; sequential runs simply cap
max_jobsto one, ensuring consistent PAL enforcement. delfin --purgenow deletes only recognized DELFIN artifacts (OCCUPIER folders, ORCA inputs/outputs, logs) and refuses to touch unknown files.- Global job manager initialization is now idempotent and refuses to tear down an active pool when jobs are still running; configuration differences are detected via resource signatures.
- Improved banner and logging output for the global scheduler, including explicit parallel-mode reporting.
- Added
orca_parallel_strategyCONTROL option allowing OCCUPIER runs to force serial ORCA execution (threads/serial) when MPI backends are unstable.
- Ensured newly spawned OCCUPIER steps reuse the cached QM range, restoring the
%QMMMblock for oxidation/reduction inputs. - Sanitized PAL/maxcore/pal_jobs parsing so subprocesses inherit consistent limits from CONTROL.txt and
parallel_workflows.
- Global job manager singleton for centralized resource coordination across all workflows
- Automatic PAL splitting for parallel oxidation/reduction workflows (e.g., PAL=12 → 6 cores per workflow)
- Thread-safe workflow execution with proper locking and coordination mechanisms
- Subprocess PAL coordination via
DELFIN_CHILD_GLOBAL_MANAGERenvironment variable - Bootstrap mechanism for OCCUPIER subprocesses to respect global resource limits
- New module:
global_manager.py- Singleton GlobalJobManager class - New module:
thread_safe_helpers.py- Thread-safe workflow preparation functions - New module:
cluster_utils.py- Automatic cluster resource detection (SLURM/PBS/LSF) - Verification script
verify_global_manager.pyfor testing singleton behavior
- Refactored parallel execution to use shared
DynamicCorePoolacross all workflows - OCCUPIER subprocesses now receive allocated PAL via environment variables instead of reading original CONTROL.txt
- PAL management centralized - read once at startup, propagated consistently to all jobs
- CONTROL.txt updates in subprocess folders now include reduced PAL values
- Improved logging with visual banners for parallel workflow execution
- Updated
parallel_classic_manually.pyto use global pool with intelligent fallback - Updated
parallel_occupier.pyfor global pool integration
- Fixed critical issue: Double core allocation when ox/red workflows run in parallel
- Resolved race conditions in parallel workflow execution through global coordination
- Prevented PAL over-allocation - total CPU usage never exceeds configured PAL
- Improved thread safety in file operations (CONTROL.txt, geometry files)
- Fixed subprocess resource management to respect global limits
- Added "Global Resource Management" section to README.md
- Expanded "Parallel Processing" section in docs/methodology.md with implementation details
- Updated project layout in README.md with new modules
- Added architectural details for global job manager pattern
- Initial public release
- OCCUPIER, classic, and manually calculation modes
- Automated spin-state prediction and redox potential calculations
- Integration with ORCA 6.1.1, xTB, and CREST
- Support for up to 3 sequential oxidation/reduction steps
- Parallel workflow execution for oxidation/reduction steps
- Cluster environment detection (SLURM/PBS/LSF)
- CPCM/SMD implicit solvation models
- TD-DFT excited state calculations
- Broken-symmetry DFT for transition metal complexes
- Comprehensive README.md with installation and usage instructions
- Detailed methodology.md documentation
- Example job submission scripts for SLURM/PBS/LSF
- CITATION.cff for academic citation
This release introduces a major architectural improvement: global job management. Previously, when oxidation and reduction workflows ran in parallel, each could potentially allocate the full PAL (number of CPU cores), leading to double allocation (e.g., 2×12=24 cores when only 12 were available).
Key Improvements:
- Single source of truth for PAL allocation
- Automatic core splitting when workflows run in parallel
- Guaranteed compliance with cluster resource limits
- Thread-safe coordination between all workflows
Impact:
- More efficient cluster resource utilization
- No more job failures due to over-subscription
- Predictable performance in parallel execution mode
Migration: No changes required to existing CONTROL.txt files or workflows. The global job manager is automatically initialized and works transparently.