No description
Find a file
2026-05-22 00:03:32 +00:00
docs feat: integrate cersei agent/runtime ecosystem 2026-05-20 14:15:24 +02:00
nix/backends feat: absorb IAC backends into umbrella flake, validate on dump 2026-05-19 23:56:03 +02:00
roles feat: integrate cersei agent/runtime ecosystem 2026-05-20 14:15:24 +02:00
schemas feat(domain): add TLSA and DS record fields to DnsRecord 2026-05-19 12:27:48 +02:00
src feat: integrate cersei agent/runtime ecosystem 2026-05-20 14:15:24 +02:00
.gitignore feat: initial implementation of umbrella org metadata CLI and SSG 2026-05-14 22:40:42 +02:00
Cargo.lock chore(deps): update rust crate serde_json to v1.0.150 2026-05-21 21:06:12 +00:00
Cargo.toml feat: integrate cersei agent/runtime ecosystem 2026-05-20 14:15:24 +02:00
flake.lock feat: add Nix flake for reproducible builds 2026-05-17 18:02:36 +02:00
flake.nix feat: absorb IAC backends into umbrella flake, validate on dump 2026-05-19 23:56:03 +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