No description
  • Rust 88.1%
  • Nix 11.9%
Find a file
JMARyA c709797d82
fix: omit null fields from umbrella dump output
Option::None serialized as explicit `null`, so optional blocks like
`metrics` appeared present-but-empty. Consumers using has-attr checks
(e.g. nix prometheus backend's `s ? metrics`) then matched every
service and dereferenced null. Strip null object entries recursively
from the dump so absent optionals are truly absent.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 16:33:19 +02:00
docs feat: add netcup DNS backend 2026-05-29 03:05:18 +02:00
nix/backends feat: add netcup DNS backend 2026-05-29 03:05:18 +02:00
roles feat: integrate cersei agent/runtime ecosystem 2026-05-20 14:15:24 +02:00
schemas chore: regenerate schemas and reference docs 2026-05-29 02:51:28 +02:00
src fix: omit null fields from umbrella dump output 2026-06-04 16:33:19 +02:00
.gitignore feat: initial implementation of umbrella org metadata CLI and SSG 2026-05-14 22:40:42 +02:00
Cargo.lock build: pull cersei from crates.io instead of git 2026-06-04 16:23:08 +02:00
Cargo.toml build: pull cersei from crates.io instead of git 2026-06-04 16:23:08 +02:00
flake.lock feat: add Nix flake for reproducible builds 2026-05-17 18:02:36 +02:00
flake.nix feat: add netcup DNS backend 2026-05-29 03:05:18 +02:00
README.md Create README.md 2026-05-10 23:40:58 +02:00
renovate.json Add renovate.json 2026-05-17 15:04:57 +00:00
zensical.toml docs: add reference documentation for all Nix backends 2026-05-19 23:58:23 +02:00

Umbrella ☂️

A metadata framework for defining organizational structure — who works on what, what belongs to whom, and how it all fits together.

Concepts

Org tree

Projects form a tree. Any node can contain sub-projects — no fixed depth, no rigid categories.

The tree lives on the filesystem: directories are parents, .toml files are nodes.

Roles

Roles are the core abstraction — parameterized templates that describe what someone does. Each role has a set of responsibilities, each with a cadence (daily, weekly, monthly, on-demand) and optional trigger/output/tools.

umbrella resolve renders a role template into concrete output:

# System prompt for an AI agent (from a person's assignment)
umbrella resolve adm@hydrar.de@media.visual --format prompt

# Same, with explicit params
umbrella resolve software-maintainer \
  --param software=webarc \
  --param repo=git.hydrar.de/jmarya/webarc \
  --format prompt

# Human-readable job description
umbrella resolve platform-engineer \
  --param scope=k8s-prod --format job

People & assignments

People are defined once (ID = email), then linked to projects via role assignments:

[[people]]
id = "alice@example.com"
name = "Alice"

[[assignments]]
person = "alice@example.com"
role = "platform-engineer"
project = "engineering"
config = { scope = "k8s-prod" }

The config provides the {{ param }} values that resolve the role template for that context.

CLI

Command What it does
resolve Render a role definition into an AI prompt or job description
tree Print the org tree
info <path> Show project details with linked resources and assignments
whois <person> Show a person's roles and assignments
resources List every repo, domain, and server across the org
validate Cross-reference all data (assignments → people/roles/projects)
gen-schema Generate JSON Schemas from Rust types into schemas/
build Generate a static org chart site into dist/

Structure

All paths are convention-based — no entry point config needed.

umbrella/
  schemas/              # generated by cargo run -- gen-schema
  roles/definitions/    # 15+ role templates (.yaml)
  org/                  # your org tree (.toml)
  people.toml           # people + assignments
  infra.toml            # nodes + domains

Getting started

cargo run -- gen-schema     # generate JSON Schemas from Rust types
cargo run -- validate       # cross-reference everything
cargo run -- build          # build org chart site into dist/

The source of truth is the Rust types (#[derive(JsonSchema)]). JSON Schemas are generated artifacts — always in sync.

Future ideas

  • Graphviz / Mermaid exportumbrella tree --format dot or --format mermaid for visual org charts