Skip to content

AstraBert/aggit

Repository files navigation

aggit

S3-backed, git-versioned object storage for agents.

aggit is a Rust CLI that implements a minimal Git-like content store in .aggit/, plus remote sync to S3-compatible storage.

Note

This software is still in alpha: you might encounter bugs and breaking changes might be introduced in future versions

Installation

cargo install aggit@0.3.0-alpha

As an Agent Skill

You can use aggit as an agent skill, downloading it with the skills CLI tool:

npx skills add AstraBert/aggit

Or copy-pasting the SKILL.md file to your own skills setup.

What It Does

  • Initializes an aggit repository with internal refs and object storage.
  • Hashes file contents into compressed objects (blob, tree, commit) under .aggit/objects.
  • Tracks staged files in a branch-specific index (.aggit/refs/index/<branch>).
  • Supports core local VCS-like commands:
    • add, commit, checkout, status, diff, ls, cat
    • switch (branch switching/creation)
    • branch (list local branches)
  • Stores global commit author config at ~/.config/.aggit/author.toml.
  • Stores repository metadata in .aggit/repo.toml.
  • Manages multiple S3 origins in .aggitorigin (create, add, update).
  • Pushes reachable local objects and branch metadata to S3.
  • Clones .aggit data from S3 and restores the working tree.

Note

gitops implementation is heavilys inspired by pygit

CLI Commands

  • aggit init <path>: initialize repository at path
  • aggit author -n <name> -e <email>: set global author
  • aggit repo <name> [-d <description>] [-t <topic> ...]: configure repository metadata
  • aggit add <files...>: stage files
  • aggit commit -m <message>: commit staged state
  • aggit checkout <commit_sha>: restore working tree/index to a specific commit (commit-only checkout)
  • aggit status: show changed/new/deleted files vs index
  • aggit diff: show unified diff of working copy vs index
  • aggit ls [-d]: list index entries (-d for mode/SHA/stage)
  • aggit cat -m <mode> -s <sha1-prefix>: inspect objects (blob|tree|commit|type|size|pretty)
  • aggit switch <branch> [-c]: switch branch, optionally create (branch switching is done with switch, not checkout)
  • aggit branch: list branches
  • aggit origin <create|add|update> <name> -e <endpoint> -s <secret> -k <key_id> -r <region>
  • aggit push <origin>: push current branch objects/head/index to remote bucket
  • aggit clone -o <origin> -n <repo_name> [-b <branch>]: clone from remote bucket

Remote Storage Model

When pushing, aggit targets bucket:

  • <origin>-<repository-name>-<branch>

It uploads:

  • reachable objects from local head (excluding what remote head already has)
  • branch head file
  • branch index file
  • remote head key

Clone downloads remote .aggit data, sets .aggit/HEAD, then restores files into the working tree.

Quick Start

# Build
cargo build --release

# Init repo
aggit init .

# Configure identity + repository metadata
aggit author -n "Jane Doe" -e "jane@example.com"
aggit repo my-repo -d "Agent artifacts" -t agents -t storage

# Local workflow
echo "hello" > notes.txt
aggit add notes.txt
aggit commit -m "initial commit"
aggit status

# Configure first S3 origin
aggit origin create prod \
  -e https://s3.example.com \
  -s <SECRET_KEY> \
  -k <KEY_ID> \
  -r us-east-1

# Push
aggit push prod

License

This project is provided under MIT license.

About

S3-backed, git-versioned object storage for your agents

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors