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.

Download files

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

Source Distribution

evyx-0.1.0.tar.gz (49.5 kB view details)

Uploaded Source

Built Distribution

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

evyx-0.1.0-py3-none-any.whl (16.6 kB view details)

Uploaded Python 3

File details

Details for the file evyx-0.1.0.tar.gz.

File metadata

  • Download URL: evyx-0.1.0.tar.gz
  • Upload date:
  • Size: 49.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for evyx-0.1.0.tar.gz
Algorithm Hash digest
SHA256 e4498fe04588191733e12dfcc2330ae3b06517bfa79d899195f5302b68a26664
MD5 065c7e42e7093f0bc79653b319d2f5aa
BLAKE2b-256 7be0fb7800a91a0a8498e08abdcc1e30b6094eae2134d974deeba206d2185949

See more details on using hashes here.

Provenance

The following attestation bundles were made for evyx-0.1.0.tar.gz:

Publisher: publish.yml on NytroxDev/Evyx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file evyx-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: evyx-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 16.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for evyx-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0af1d16d0713213d4db89756a772c924bf306573b44dd98cb6b4b19f6d33c85e
MD5 c129b8fdfb3f669ab2c6817289b37efd
BLAKE2b-256 23406f94e152ffa30d9fd91f2afcf4fb344e595607042494fb93a2bfd37ec9ef

See more details on using hashes here.

Provenance

The following attestation bundles were made for evyx-0.1.0-py3-none-any.whl:

Publisher: publish.yml on NytroxDev/Evyx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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