Skip to main content
piloop is a small core and a set of plugins. Core runs things. The plugins decide what to run, how to judge it and where it runs. A plugin owns its own tables and migrations. Core owns every other table. It works like a Django project: each app has its own models and migrations, and core is one more app. The memory of past campaigns is one plugin, memory/local. It adds three things: A campaign selects it in piloop.toml, as it selects any provider:

Core

Core is the mechanism that every plugin builds on:
  • The SQLite database, and its event feed: every change appends a typed event in the same transaction.
  • The daemon’s loop, which runs the consumers on new events.
  • The plugin host, which finds, checks and loads plugins.
  • The API, the CLI and the interfaces that plugins implement.
  • Leases, which hand jobs to workers.
Core’s tables are campaigns, agent_sessions, events, comments, secrets, tokens, limits, migrations, and the tables of leases and workers. The database schema lists each table under the plugin that owns it.

The research model is a plugin

Ideas, runs, candidates, evaluations and the head are the campaign type optimization. Its tables are ideas, idea_links, runs, candidates, evaluators, evaluations, measurements and techniques. Every campaign is of this type: it is what the rest of these docs describe.

Capabilities

A capability is one kind of decision or service, such as the verdict, the stop condition or where jobs run. Each capability has at least one built-in provider, which is a plugin of piloop itself. Your configuration selects a provider by its name. A plugin package adds more providers.

What a plugin adds

A plugin is a Python package that you install next to piloop. It declares what it adds with entry points in its pyproject.toml: A provider that the daemon opens also adds, through its contribution(), consumers (jobs of the daemon’s loop that wake on events) and routes of the daemon’s server. piloop declares its own capabilities, providers, tables and commands in the same groups. So a plugin can do anything that a built-in provider does. Write a plugin shows how.