Skip to main content

python-cordis

A plugin-driven framework kernel for Python, inspired by the cordis framework: everything is a plugin.

This package is a meta-framework: it ships only the engine that makes an application composable from plugins — hooks, a reflective service container, plugin lifecycle, config assembly, and hot reload. It knows nothing about agents, LLMs, filesystems, persistence, or transports.

Concrete business modules (agent loop, session logs, persistence backends, capability seams, web transport) live in the companion package python-cordis-agent as plain, replaceable plugins on top of this kernel.

What the kernel provides

  • HookRegistry (python_cordis.core.hook): plugin registration/discovery and the four hook invocation modes (emit / parallel / bail / waterfall) built on pluggy.
  • Context (python_cordis.core.context): a reflective service container (ctx.fs resolves to a registered service), with extend() / isolate() scopes, reversible register() / set(), reversible on() listeners, and use() which instantiates a component (declaring inject + apply) on a child context restricted to its declared dependencies (proxy enforcement — undeclared access raises ServiceNotFound).
  • Fiber (python_cordis.core.fiber): plugin instance lifecycle — start() / stop() with effects torn down in reverse registration order. refresh() is the reactive reconciliation: it activates when declared dependencies appear and deactivates when they disappear, converging to quiescence with an epoch version guard. When constructed with a HookRegistry that has the lifecycle specs registered, it emits fiber_started / fiber_stopped.
  • Loader (python_cordis.core.loader): a declarative component loader — entry tables (module / component + config) reconciled incrementally (reconcile applies the minimal destructive ops) and hot-reloaded transactionally (hot_reload re-executes the module in place and rolls back on failure).
  • Config assembly (python_cordis.core.config): OmegaConf-based loading, overlay patching, dumping, and interpolation (no arbitrary code execution).
  • HMR (python_cordis.core.hmr): hot module reload without restarting. Reloader swaps a unit ("stop old, then start new") and rolls back on any failure; PluginReloader re-executes an already-imported plugin module in place and re-registers its hooks; FileWatcher (optional watchdog) fires on_change on any watched file.
  • Lifecycle observability (python_cordis.observability): setup_lifecycle_logging registers the lifecycle hookspecs plus a LifecycleLogger plugin that writes structured records (event, fiber) via the standard logging module. It returns a disposer, so the observability is fully reversible.

The kernel declares no entry-point plugins of its own; applications register their own plugins under the python_cordis.plugins group and load them with HookRegistry.load_entry_points().

Quick start

pip install -e .
pytest

Architecture

Architecture

The diagram source (docs/architecture.mmd) is editable; re-render to SVG with any mermaid renderer to update the image above.

Key ideas:

  • Hooks are the seams between kernel and plugins — the kernel declares what can be extended (@hookspec), plugins provide it (@hookimpl). Nothing in the kernel hard-codes a specific plugin.
  • Revertible effects — every ctx.effect(), register / set, and on returns an idempotent disposer; teardown runs the inverses in reverse order, so removing a component fully undoes its side effects (paper §3.1).
  • Reactive coeffects — a component declares its dependencies (inject); use() mounts it and refresh() reconciles to the target state, activating when dependencies appear and deactivating when they disappear (paper §3.2).
  • Fiber emits, plugins observe — the kernel only emits lifecycle events; logging is a plain, reversible plugin (LifecycleLogger).
  • Everything is replaceable — the kernel owns no concrete provider; every business service is registered by an application-layer plugin, so swapping implementations needs zero kernel changes.

Development

pip install -e ".[dev,hmr]"
python -m mypy        # strict type checking
python -m pytest      # test suite
python -m build       # sdist + wheel

The full feature specification (kernel + application layer, with package ownership per feature) is maintained in the deepseek-harness repository at docs/python-cordis-feature-spec.md.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python_cordis-0.1.4.tar.gz (33.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

python_cordis-0.1.4-py3-none-any.whl (23.6 kB view details)

Uploaded Python 3

File details

Details for the file python_cordis-0.1.4.tar.gz.

File metadata

  • Download URL: python_cordis-0.1.4.tar.gz
  • Upload date:
  • Size: 33.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.3

File hashes

Hashes for python_cordis-0.1.4.tar.gz
Algorithm Hash digest
SHA256 94e4abf4455f1df859c2094717d75a8aa351afa82ad5a27bacb746bdc31b1db9
MD5 646a6959cdeb917b80a221895c66edd3
BLAKE2b-256 6d872e62ea4db57e30a0ffebbaa1bd393d9c246522457400b45dc36564761133

See more details on using hashes here.

File details

Details for the file python_cordis-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: python_cordis-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 23.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.3

File hashes

Hashes for python_cordis-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 6290167c6b53da945eecaa6580b7c51a03dc4769bfbed7e09de80df385f5aa25
MD5 864a448eac24dd3d7121d99dd229cf82
BLAKE2b-256 2ceb168d6dc7a3a6e9acc76eae7f9559e9c7238b6de5e9c8552b774342b3569a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page