This repository centralizes reusable agent tooling for development containers and agentic workflows.
It contains related but independently usable parts:
- a Nix flake that exposes an
agent-toolspackage/profile forghcr.io/devcontainers/features/nix:1; - an agentic setup with repository instructions, reusable skills, prompts, and tool guidance.
The intended outcome is that product repositories can stay small and consume this repository instead of copying long setup scripts into every project.
.
├── AGENTS.md
├── README.md
├── LICENSE
├── .gitignore
├── .github/
│ └── workflows/
│ └── nix-ci.yaml
├── docs/
│ ├── contributing.md
│ ├── versioning.md
│ └── tool-selection.md
├── nix/
│ └── agent-tools/
│ ├── flake.nix
│ ├── README.md
│ └── scripts/
│ ├── update-lock.sh
│ └── validate-tools.sh
├── agentic/
│ ├── README.md
│ ├── tools.md
│ ├── instructions/
│ │ ├── default.md
│ │ ├── devcontainer.md
│ │ ├── nix.md
│ │ └── git.md
│ ├── skills/
│ │ ├── code-review/
│ │ │ └── SKILL.md
│ │ ├── repo-onboarding/
│ │ │ └── SKILL.md
│ │ └── release-notes/
│ │ └── SKILL.md
│ └── prompts/
│ ├── inspect-repo.md
│ └── prepare-change.md
└── examples/
└── devcontainers/
└── nix-flake/
└── devcontainer.json
Root instructions for coding agents working in this repository. Put durable, repository-wide rules here: how to validate changes, how to update lockfiles, how to structure commits, and which directories are generated versus maintained by hand.
Agents should read this before making changes.
Automation for validation and publishing.
nix-ci.yamlvalidates the flake and tool profile.
Human-oriented design notes.
contributing.mdexplains the local development workflow.versioning.mdexplains how to tag and release the flake and Dev Container Feature parts of the monorepo.tool-selection.mdexplains the criteria for whether a tool belongs in the Nix flake, an official Dev Container Feature, the custom OCI Feature, or project-local setup.
Reusable Nix flake for agent-focused CLI tools.
This is the recommended default consumption path. A consuming devcontainer can use the official Nix feature and point flakeUri at this subfolder:
The flake intentionally excludes tools that are better installed by official Dev Container Features, such as Go, Java/Gradle, Node, Docker, kubectl/helm/minikube, GitHub CLI, and Nix itself.
Agent-facing project context.
agentic/tools.mddescribes the CLI tools agents should prefer.agentic/instructions/contains composable instruction files that can be referenced from project-levelAGENTS.mdfiles.agentic/skills/contains reusable skills, each with aSKILL.mdentrypoint.agentic/prompts/contains copy/paste prompts for common workflows.
Reference devcontainer configurations.
examples/devcontainers/nix-flake/devcontainer.jsonconsumes the Nix flake directly through the official Nix feature.examples/devcontainers/oci-feature/devcontainer.jsonconsumes the optional published OCI feature.
For most repositories, prefer the Nix flake directly:
{
"features": {
"ghcr.io/devcontainers/features/go:1": {},
"ghcr.io/devcontainers/features/java:1": {
"version": "21",
"jdkDistro": "ms",
"installGradle": true
},
"ghcr.io/devcontainers/features/node:2": {},
"ghcr.io/devcontainers/features/github-cli:1": {},
"ghcr.io/devcontainers/features/kubectl-helm-minikube:1": {},
"ghcr.io/devcontainers/features/docker-outside-of-docker:1": {},
"ghcr.io/devcontainers/features/nix:1": {
"multiUser": true,
"flakeUri": "github:YOUR_ORG/agentics-tooling?dir=nix/agent-tools#agent-tools",
"extraNixConfig": "experimental-features = nix-command flakes"
}
}
}This keeps official Dev Container Features responsible for language runtimes and platform integrations, while the flake provides the agent-oriented CLI layer.
From the repository root:
cd nix/agent-tools
nix flake update
nix flake check
nix run .#validateOr use the helper:
./nix/agent-tools/scripts/update-lock.shCommit both files when the lock changes:
git add nix/agent-tools/flake.nix nix/agent-tools/flake.lock
git commit -m "Update agent tools flake lock"cd nix/agent-tools
nix build .#agent-tools
nix run .#validateTo inspect what the profile exposes:
nix path-info -Sh .#agent-tools
ls -la result/binThe publishing workflow expects Feature folders under:
devcontainer-features/src/<feature-id>/
Tag releases with a Feature-specific prefix, for example:
git tag devcontainer-features-v0.1.0
git push origin devcontainer-features-v0.1.0The workflow publishes the features to GitHub Container Registry using devcontainers/action.
Use a stable tag for reproducible onboarding:
"flakeUri": "github:YOUR_ORG/agentics-tooling/v0.1.0?dir=nix/agent-tools#agent-tools"Use a branch only during active development:
"flakeUri": "github:YOUR_ORG/agentics-tooling/main?dir=nix/agent-tools#agent-tools"-
Check whether an official Dev Container Feature already provides it.
-
Check whether the tool is available in
nixpkgs. -
Add it to
nix/agent-tools/flake.nixunder the appropriate category. -
Add the executable name to
scripts/validate-tools.sh. -
Run:
cd nix/agent-tools nix flake update nix flake check nix run .#validate
-
Update
docs/tool-selection.mdwhen the decision needs explanation.
A consuming project can copy or reference the files under agentic/. A good minimal project setup is:
project/
AGENTS.md
agentic/
tools.md
instructions/
skills/
In a consuming project, the root AGENTS.md should point agents at relevant instructions, for example:
Read `agentic/tools.md` before using shell tools. For Nix or devcontainer work, also read `agentic/instructions/nix.md` and `agentic/instructions/devcontainer.md`.- Prefer Nix for reusable CLI tooling.
- Avoid post-create installation for tools that should be available during container setup.
- Keep agent instructions executable: every important rule should say how to verify it.
- Pin through
flake.lock; do not pin random versions in shell snippets unless there is no Nix package.
{ "features": { "ghcr.io/devcontainers/features/nix:1": { "multiUser": true, "flakeUri": "github:YOUR_ORG/agentics-tooling?dir=nix/agent-tools#agent-tools", "extraNixConfig": "experimental-features = nix-command flakes" } } }