Skip to content

uri157/pulse

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pulse

Pulse is a lightweight, observable runtime for executing trading strategies behind a stable execution boundary.

By isolating strategy logic from infrastructure plumbing, Pulse keeps strategies small and focused on receiving market events and returning trading decisions.

Architecture & Scope

Pulse v1 is purposely scoped to support Krono simulator workflows. It handles market-data streaming, signed REST calls, strategy dispatch, health checks, metrics, and optional Krono telemetry publishing.

Pulse currently ships with:

  • One broker adapter: chronos_simulator.
  • Two built-in strategies: ema_cross and buy_and_hold.
  • External strategy loading with strategy_name="<module>:<factory_or_class>" and explicit strategy_paths.
  • Health endpoints on 127.0.0.1:9109 by default.
  • Prometheus-style runtime metrics.
  • Optional file logging.
  • Optional Krono telemetry publishing through the current chronos.* config fields to /api/v1/live/telemetry.

The user-facing product is Krono. Some code and config identifiers still use chronos names for compatibility, including chronos_simulator, chronos.enabled, and --chronos-enabled.

Note: Pulse is strictly designed around adapter boundaries. This repository focuses solely on the execution runtime and does not yet include production exchange adapters.

Runtime Contract

Pulse keeps strategy code strictly separate from infrastructure:

flowchart TD
    Simulator["Krono Adapter<br/>(Market Data & Execution)"]
    Exchange["Exchange Adapter<br/>(Market Data & Execution)<br/>(eg binance, bybit, etc.)"]
    PulseAdapter["Pulse Runtime Adapter<br/>(Networking, Retries & Telemetry)"]
    Strategy["Strategy Logic<br/>(Decisions & Signals)"]

    Exchange <==>|Raw WebSockets & Signed REST| PulseAdapter
    Simulator <==>|Raw WebSockets & Signed REST| PulseAdapter
    PulseAdapter <==>|Clean Market Events & Trading Decisions| Strategy

    classDef default fill:#111113,stroke:#3f3f46,stroke-width:1px,color:#e4e4e7;
    classDef highlight fill:#064e3b,stroke:#10b981,stroke-width:2px,color:#f8fafc;

    class PulseAdapter highlight;

Loading

The runtime owns networking, retries, order submission, telemetry, and health reporting. Strategies only implement the decision logic and can be built in or loaded from explicit import paths.

Observability

Pulse treats bot health as a first-class citizen, exposing:

  • GET /healthz
  • GET /readyz
  • GET /metrics

The metrics endpoint remains fully available whether Krono telemetry publishing is enabled or disabled.

Terminal Orchestration: Pulse Launcher

While Pulse acts as the core execution boundary, managing raw JSON configurations, credentials, and subprocess execution manually can introduce operational friction.

To solve this, the ecosystem includes Pulse Launcher, a Textual-based Terminal UI (TUI) designed for seamless orchestration across both local developer environments and remote servers.

Because it runs entirely in the terminal, the Launcher is perfect for SSH sessions and headless servers. It operates strictly outside the engine and the runtime, acting as a developer and operator tool that:

  • Discovers and parses strategy catalogs and manifests.
  • Merges configuration presets dynamically.
  • Resolves cryptographic secrets from a secure keyring (preventing plain-text credentials in config files).
  • Manages the Pulse runtime as a supervised subprocess.

Status

Early v1. The public contract is the runtime config, broker adapter interface, strategy interface, and CLI documented in docs/runtime-v1.md.

About

A lightweight, observable runtime for algorithmic trading. Isolates strategy logic from infrastructure and execution plumbing.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages