# In-process jobs (no file IPC) The AKMC server used to launch `eonclient` as a subprocess that read `pos.con` / `config.ini` and wrote `results.dat`. pyeonclient can keep the Matter in memory and call the same job objects. ## How a job is entered | Path | Entry | I/O | |---|---|---| | Classic `eonclient` | `Job::run()` | CON + `results.dat` | | pyeonclient / LocalInProcess | `runFromMatter(Matter)` | No CON read | `runFromMatter` is implemented for ReplicaDynamics, ParallelReplica, ReplicaExchange, GPSurrogate, SaddleSearch, and ProcessSearch. The subprocess path still exists for servers that have not switched. ## Potential layout flags `Potential::layoutFlags()` reports how a pot is executed: - `InProcess` — force() is a function call in this address space - `NeedsWorkingDirectory` — the pot reads files from cwd (`in.lammps`, VASP) - `Subprocess` — the pot is another process (ExtPot, some LAMMPS workers) In-process jobs should not wrap a `NeedsWorkingDirectory` pot without setting cwd first. ## What still writes files `saveData` / `results.dat` still exist so the classic server can parse them. Filling a JobResult envelope from memory is `eOn-4mrf`.