Skip to main content

Evyx

Local automation, as simple as a YAML file.

CI License Security Policy AI Guide

Routines you type over and over, packaged as small YAML actions you can install, inspect, and run from anywhere.

Small & tested - 52 tests · Python 3.11+ · one runtime dependency (PyYAML)


Table of Contents


Why Evyx?

I wrote Evyx because I kept running the same routines by hand: start the dev environment, check Docker, print system info. Aliases help, but they never follow you to a fresh machine, and Makefiles belong to projects, not to your day to day.

I wanted a handful of commands that behave the same everywhere I work: install a routine from a file, inspect it, run it. No framework, no daemon, no configuration file to edit. Just a YAML file and a CLI.

That's the idea behind Evyx: your routines, versioned like code, runnable like scripts.


Shell routines vs Evyx

A routine as shell one-liners (3 lines):

echo "Welcome $(whoami)!"
date "+%A %d %B %Y, %H:%M"
df -h / | tail -1

Same routine as an Evyx action (day-start.yml):

name: day-start
description: Morning startup routine
author: nytrox
steps:
  - shell: echo "Welcome $(whoami)!"
  - shell: date "+%A %d %B %Y, %H:%M"
  - shell: df -h / | tail -1
evyx add day-start.yml
evyx day-start

One file, one command, and the same routine on any machine you install it on.

What you get out of the box:

  • Installable routines: evyx add <file> copies an action to ~/.evyx/actions
  • Interactive variables: {{name}} placeholders answered at run time
  • Action introspection: evyx info <action> shows questions, steps, and plugins
  • Silent by default: logs only with -d/--debug, errors always shown
  • Internationalized: English by default, French available via EVYX_LANG=fr

Installation

# From source (before the PyPI release)
uv tool install --editable .
# or
pip install .

Requirements: Python 3.11+, PyYAML.


Quick Start

Create an action:

# hello.yml
name: hello
description: Demo action
author: nytrox
steps:
  - shell: echo "Hello from Evyx"

Install and run it:

evyx add hello.yml
evyx hello

# and when you forget what you installed
evyx list
evyx info hello
evyx remove hello

Key Features

name: rust-dev
description: Prepare a Rust project (without creating anything)
author: nytrox
questions:
  - name: project
    question: Project name?
    default: mon-crate
  - name: type
    question: Binary or library?
    options: [binary, library]
steps:
  - shell: echo "cargo new {{project}} --{{type}}"
  - shell: echo "crate {{project}} ready"
$ evyx rust-dev
? Project name? [mon-crate] :
? Binary or library? [binary/library] :
  • Questions & variables: {{name}} placeholders in step commands, answered interactively before the action runs. Empty input falls back to default, or to the first option. Invalid options are re-asked.
  • Validation at load time: an action referencing a variable with no matching question fails on evyx add, not at run time.
  • Action details: evyx info <action> shows the name, description, author, plugins, steps, and every question with its default and options.
  • Explicit run: evyx run <action> and evyx <action> are equivalent; logs appear with -d/--debug.
  • Internationalization: messages come from bundled catalogs. The locale is detected via EVYX_LANG, then LC_ALL, LC_MESSAGES, LANG (git-like), and falls back to English. Try EVYX_LANG=fr evyx list.

Action Reference

Key Required Description
name yes Identifier, [a-z0-9][a-z0-9._-]*
description no Shown in list and info
author no Shown in info
steps yes Non-empty list of step mappings
questions no List of questions, asked before the action runs

Step keys:

Key Description
shell The command to run. The only supported plugin today

A plugin field is planned so steps can target other executors than shell.

Question keys:

Key Description
name Variable name, [a-z][a-z0-9_]*
question The text shown to the user
default Fallback on empty input (string or number)
options Non-empty list of allowed answers

Variables: {{name}} in step commands is replaced by the answer to the question of the same name. Any reference without a matching question is an error at load time.


When NOT to use Evyx

Evyx runs shell commands on your machine, on demand. It is not a scheduler.

  • Scheduling: use cron, systemd timers, or launchd
  • Remote orchestration: use Ansible, Fabric, or your deployment tooling
  • CI/CD pipelines: GitHub Actions and friends run on servers, Evyx runs where you are
  • Anything stateful: actions are plain shell steps; keep them idempotent and dependency-free

Everything else? Evyx has you covered.


Changelog

See CHANGELOG.md for a per-release history of changes.


Contributing

Contributions are welcome. Please read CONTRIBUTING.md before submitting a pull request.

All contributors are expected to follow the Code of Conduct. Security issues should be reported privately, see SECURITY.md.


License

MIT License : see LICENSE for details.


AI

Evyx is human-led, AI-assisted. See AI.md for how AI tools are used in this project.

Metadata

Release files for evyx 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for evyx 0.1.0
File Size Uploaded
evyx-0.1.0.tar.gz 49.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for evyx 0.1.0
File Interpreter ABI Platform
evyx-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 66.1 kB

Release files / evyx-0.1.0.tar.gz

Download URL evyx-0.1.0.tar.gz
Size 49.5 kB
Tags Source
SHA-256 checksum
How to use checksums
e4498fe04588191733e12dfcc2330ae3b06517bfa79d899195f5302b68a26664
BLAKE2b-256 checksum
How to use checksums
7be0fb7800a91a0a8498e08abdcc1e30b6094eae2134d974deeba206d2185949
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 6, 2026.

Transparency log

Release files / evyx-0.1.0-py3-none-any.whl

Download URL evyx-0.1.0-py3-none-any.whl
Size 16.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0af1d16d0713213d4db89756a772c924bf306573b44dd98cb6b4b19f6d33c85e
BLAKE2b-256 checksum
How to use checksums
23406f94e152ffa30d9fd91f2afcf4fb344e595607042494fb93a2bfd37ec9ef
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 6, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page