Rust CLI · macOS & Linux · v0.3.0

Your team's agent skills, versioned like code.

Dalo is the missing layer between "I found a useful skill" and "our agents can rely on this." Keep local experiments and team skills in Git, resolve one approved set, and link it into the folders your agents already read.

MIT-licensed. Single binary, no daemon; just git on your PATH.

~/work · dalo sync
$ dalo sync
  refresh   company        clean · fast-forward
  link      review         → ~/.agents/skills/review
  link      release-notes  → ~/.claude/skills/release-notes
  shadow    copy-editing   company over oss
  block     deploy         slot held by unmanaged skill
 
  2 linked · 1 shadowed · 1 blocked · 0 overwritten

Agent skills are becoming operational knowledge.

They encode how your team works. But most of them still live in one machine's folder, a pasted snippet, or a chat thread. Over time, versions diverge, ownership blurs, and the same skill behaves differently for everyone.

The usual flow

  • install this skill here
  • copy that folder there
  • pick the target agent again
  • hope nobody changed the public repo
  • hope the local edit doesn't get lost
  • hope the team runs the same version

With Dalo

  • every skill versioned in Git
  • resolved deterministically
  • synced across the whole team
  • private work kept separate
  • existing files never touched
  • ready to promote when it proves out

What Dalo gives you today.

01

One source of truth

All skills live in Git, locally and across the team. Dalo's store becomes the single, versioned source of truth, so the team repository stays a clean input and your agent folders stay an output.

~/.dalo/
  • local/ private skills, git-tracked
  • sources/ team checkouts
  • lock.toml resolved set
02

Deterministic resolution

The resolver is a pure function: given your sources and config, it returns the same result every time. Source priority decides conflicts, lower wins. Re-running on the same inputs is byte-for-byte identical.

localprio 0wins
companyprio 10shadowed
ossprio 20shadowed

same name review · one slot · highest priority linked

03

Safe sync

Dalo only writes paths it owns. It links resolved skills as directory symlinks, removes only the links it created, and never overwrites a real file or folder it didn't make. --dry-run prints the plan and writes nothing.

unmanaged files left untouched
only dalo-owned symlinks removed
conflicts reported, never forced
04

Selective catalogs

Public skill repositories are often catalogs, not one-skill packages. Add a catalog source, inspect its inventory, select only the skills you want, and keep the selection pinned with read-only drift checks.

catalog flow
  • inspect 40 offered skills
  • select 3 team-approved skills
  • check upstream drift before changing pins
05

Managed instruction packs

Shared conventions can live as versioned Markdown packs. Dalo renders them into explicit managed blocks, preserves everything outside those markers, and warns when active packs declare overlapping topics.

instruction blocks are versioned
unmarked text is preserved
topic overlaps are visible

How it works

Dalo is a small pipeline: it turns many skill sources into one reliable set, then links that set into the folders your agents already read.

The agent folder is an output, not the database. That one boundary keeps team repos clean, local experiments private, and existing files safe to inspect.

From local experiment to team standard.

A path that scales from a single developer to the whole org, one step at a time.

  1. 1

    Adopt

    An agent wrote a useful skill straight into its own folder. Bring it under management without losing the original. Dalo copies it into your local source first.

    dalo adopt release-notes
  2. 2

    Add a source

    Connect a team repository of shared skills. Dalo checks it out into the store and tracks its branch.

    dalo source add company git@github.com:acme/skills.git
  3. 3

    Sync

    Resolve every active source into one set and link it into your agent folders. Safe to run any time; dirty edits block instead of getting lost.

    dalo sync
  4. 4

    Promote planned

    When a local skill proves useful, send it upstream through a PR-first flow so the whole team gets it. On the roadmap for a future release.

    dalo promote release-notes --target company

Up and running in minutes.

Install from crates.io or grab a prebuilt archive from GitHub Releases. Dalo shells out to git for source operations, no other runtime to install.

cargo install dalo
  • Single Rust binary, no daemon
  • Local-only, no network needed to try it
  • Detects Codex, Claude Code, OpenClaw, Hermes
first sync
# set up the store and link agents
$ dalo init
$ dalo target detect
$ dalo target link codex
$ dalo target link claude
 
# add a team source and sync
$ dalo source add company git@github.com:acme/skills.git
$ dalo sync

Prefer a dry run first? Every command takes --dry-run.

Safe by design.

Dalo is conservative on purpose. It protects the work that's already on your disk, and it makes every change visible before and after it happens.

Protects unmanaged files

If a real skill folder already holds a slot, Dalo reports the conflict and leaves it exactly where it is. It never overwrites what it didn't create.

Approval gating

A newly active skill stays pending until you approve it: by skill, source, author, or org. Scheduled syncs apply existing approvals but never grant new ones.

Visible conflicts

Same-name skills resolve by priority and the rest are reported as shadowed, not silently dropped. status explains every state.

Dirty work blocks, not breaks

Edited a team skill in place? The source is dirty, and sync stops for it instead of discarding your change. The default is no data loss.

Dry-run everything

The same planning path drives real runs and --dry-run. See exactly which symlinks would be created or removed before anything changes.

Built-in diagnostics

dalo doctor checks store structure, lockfiles, Git auth, target paths, and broken symlinks, so you trust the result.

Works with the folders your agents already use.

Dalo syncs the resolved set into normal skill directories. Your agents keep reading the same paths. They never know Dalo is there.

Codex and OpenClaw both default to ~/.agents/skills, so Dalo de-duplicates the shared directory and links each slot once.

  • Codex~/.agents/skillssupported
  • Claude Code~/.claude/skillssupported
  • OpenClaw~/.agents/skillssupported
  • Hermes~/.hermes/skillssupported
  • Generic folderany path you choosesupported
  • Cursor · OpenCodeunverifiedexperimental

Why not just install skills directly?

Single-user installers are useful for trying a skill. Dalo starts where that flow gets awkward for teams: review, provenance, version drift, and safe rollout across several agent folders.

One-off installer

Good for one machine.

Weak once a team needs review, shared versions, and the same result on every laptop.

Dotfile repo

Too broad for agent skills.

Great for personal setup, risky when skill rollout can overwrite unrelated environment files.

Git submodule

Pins a repo, not a selection.

Useful for one external source, awkward for catalogs where you only want three skills out of forty.

Copy-paste

Fast until nobody knows what changed.

No drift detection, no provenance, and no clean path from local experiment to team standard.

Early, and honest about it.

Dalo is v0.3.0. The V1 and V1.1 surfaces work today: local, team, and catalog sources; deterministic resolution; safe sync; adoption; diagnostics; and instruction packs. Here's what's intentionally deferred to later releases.

  • later PR-first promotion of local skills into team repos
  • later Scheduled autosync via launchd / systemd timers
  • later Lock-advancing source refresh and catalog pin PRs
  • later More verified agent adapters and package managers

Make your agents boringly reliable.

Stop fighting drift. Keep your team's agent skills in Git, resolve them once, and sync with confidence.