Custom dev container Features for enhancing development containers, hosted on GitHub Container Registry. This repository follows the dev container Feature distribution specification.
| Feature | Description |
|---|---|
| Oh My Posh | Prompt theme engine for bash, zsh, and fish |
| Microsoft Security DevOps CLI | guardian CLI for running security analysis tools without .NET |
| Copilot CLI Persistence | Persist GitHub Copilot CLI settings & chat history across rebuilds |
| Atlassian CLI for Jira & Confluence | acli for working with Jira and Confluence Cloud |
| Atlassian Teamwork Graph CLI | twg for Jira, Confluence, Bitbucket, JSM and the Teamwork Graph, built for AI agents |
| Package Source Overrides | Point npm, pnpm, Yarn, Corepack, pip, uv, and NuGet at internal override feeds |
| GitLab CI Local | Run GitLab CI/CD pipelines locally with gitlab-ci-local |
| Prompty Dumpty | dumpty CLI for managing prompty files |
Each feature's full option reference lives in its src/<feature>/README.md.
Installs Oh My Posh, a prompt theme engine for customizing your shell prompt across bash, zsh, and fish.
Usage:
{
"features": {
"ghcr.io/rosstaco/devcontainer-features/ohmyposh:1": {
"version": "latest",
"theme": "jandedobbeleer",
"installPath": "/usr/local/bin",
"shells": "bash,zsh"
}
}
}Options:
version- Oh My Posh version to install (default: "latest")theme- Built-in theme name to use (default: "jandedobbeleer")installPath- Installation directory (default: "/usr/local/bin")shells- Comma-separated list of shells to configure: bash, zsh, fish (default: "bash,zsh")
Custom Themes:
To use a custom theme file from your host machine, add a mount in your devcontainer.json:
{
"features": {
"ghcr.io/rosstaco/devcontainer-features/ohmyposh:1": {}
},
"mounts": [
"source=${localEnv:HOME}/path/to/theme.json,target=/home/vscode/.ohmyposh.json,type=bind"
]
}The feature creates a placeholder file at ~/.ohmyposh.json during installation. If you mount a custom theme to this location, it will be used automatically. Otherwise, the built-in theme specified in the options will be used.
Installs Microsoft Security DevOps CLI (guardian command) for running security analysis tools without requiring .NET installation.
Usage:
{
"features": {
"ghcr.io/rosstaco/devcontainer-features/microsoft-security-devops-cli:1": {
"version": "latest"
}
}
}Options:
version- Version to install (default: "latest"). Use "latest" or a specific version like "0.215.0"installPath- Installation directory (default: "/usr/local/bin/guardian")
Supported Architectures:
- linux-x64 (x86_64)
- linux-arm64 (aarch64)
Running Guardian:
After installation, the guardian command is available in your PATH. To initialize guardian in your repository:
guardian init --forceNote: guardian init requires a git repository, so it must be run manually after the container starts (not during feature installation).
Persists GitHub Copilot CLI settings and chat history across container rebuilds using a named Docker volume.
Usage:
{
"features": {
"ghcr.io/devcontainers/features/copilot-cli:1": {},
"ghcr.io/rosstaco/devcontainer-features/copilot-persistence:1": {}
}
}How It Works:
- Mounts a named volume (scoped per dev container) to
/copilot-data - Creates a symlink from
~/.copilot→/copilot-data - Sets the
COPILOT_DATA_DIRenvironment variable to/copilot-data
What Persists:
- Chat history and sessions
- CLI configuration (model preferences, settings)
- Command history
- Trusted folders
Installs the Atlassian CLI (acli) for working with Jira and Confluence Cloud from the command line.
Usage:
{
"features": {
"ghcr.io/rosstaco/devcontainer-features/atlassian-jira-confluence-cli:1": {
"version": "latest"
}
}
}Options:
version- Version of acli to install (default: "latest"). Use "latest" or a specific version like "1.3.21"installPath- Directory where the acli binary will be installed (default: "/usr/local/bin")configureBrowser- Install anxdg-openshim that prefers$BROWSERsoacli auth loginopens on your host (default:true)
Supported Architectures:
- amd64 (x86_64)
- arm64 (aarch64)
Getting Started:
After the container starts, authenticate once and then use the Jira and Confluence commands:
acli auth login
acli jira project listBrowser Login:
acli auth login opens an OAuth page via xdg-open, which doesn't honor $BROWSER inside a dev container. With configureBrowser enabled (the default), the feature installs a small xdg-open shim at /usr/local/bin/xdg-open that prefers $BROWSER (such as the VS Code browser helper) so the login page opens on your host machine. Set configureBrowser to false to skip it.
Installs the Atlassian Teamwork Graph CLI (twg) for working with Jira, Confluence, JSM, Bitbucket, Loom, Trello and the Teamwork Graph, from the terminal or from AI coding agents. It complements acli, and the two Features can be used together.
Usage:
{
"features": {
"ghcr.io/rosstaco/devcontainer-features/atlassian-teamwork-graph-cli:1": {}
},
"remoteEnv": {
"TWG_TOKEN": "${localEnv:TWG_TOKEN}",
"TWG_USER": "${localEnv:TWG_USER}",
"TWG_SITE": "${localEnv:TWG_SITE}"
}
}The remoteEnv block is optional. Use it to pass credentials from your host instead of running twg login.
Options:
version- Version of twg to install (default: "latest"). Use "latest" or a specific version like "1.3.5"installSkills- Install the TWG agent skills into~/.agents/skillsand~/.claude/skills(default:false)enableTelemetry- Allow twg telemetry. Whenfalse,DO_NOT_TRACK=1andTWG_DISABLE_3P_DATA_TELEMETRY=1are exported (default:false)persistAuth- Keep~/.config/twgon a named volume sotwg loginsurvives rebuilds (default:true)configureBrowser- Install anxdg-openshim that prefers$BROWSERsotwg loginopens on your host (default:true)
How It Works:
- Downloads the official binary from Atlassian and checks its SHA-256 checksum. It skips the interactive installer, which asks for consent and login during the build.
- Installs to
~/.local/bin/twgfor the remote user, with a/usr/local/bin/twgsymlink - Run
twg loginand thentwg doctoronce the container starts
Points npm, pnpm, Yarn, Corepack, pip, uv, and NuGet at internal override package sources (a pull-through proxy such as Artifactory, Nexus, or Azure Artifacts) instead of public feeds. It writes system- and user-scoped configuration so that Features installed after it, and your projects, resolve packages through the proxy.
Usage:
{
"features": {
"ghcr.io/rosstaco/devcontainer-features/package-source-overrides:1": {
"npmRegistry": "https://artifactory.example.com/artifactory/api/npm/npm-remote/",
"pipIndexUrl": "https://artifactory.example.com/artifactory/api/pypi/pypi-remote/simple",
"nugetSource": "https://artifactory.example.com/artifactory/api/nuget/v3/index.json"
},
"ghcr.io/devcontainers/features/node:1": {},
"ghcr.io/devcontainers/features/python:1": {}
},
"overrideFeatureInstallOrder": [
"ghcr.io/rosstaco/devcontainer-features/package-source-overrides"
]
}Options:
npmRegistry- registry URL for npm, pnpm, Yarn (Classic and Berry), and Corepack (default: "")pipIndexUrl- PyPI index URL for pip and uv that replaces the default index (default: "")uvPythonInstallMirror- mirror of the python-build-standalone releases for uv-managed Python downloads (default: "")nugetSource- NuGet v3 source URL that replaces nuget.org (default: "")nugetSourceName- key/name for the configured NuGet source (default: "override")scope- where config is written:system,user, orboth(default: "both")strictSsl- set tofalsefor self-signed / HTTP internal proxies (default:true)bashEnvHook- opt-inBASH_ENVhook so later Features' install scripts see env-var-only overrides such asCOREPACK_NPM_REGISTRY(default:false)
Install Order:
Features install in rounds, and within a round the spec sorts them alphabetically by registry path, so ghcr.io/devcontainers/* Features install before this one unless you change the order. Per repository, list it first in overrideFeatureInstallOrder (as above). Machine-wide via VS Code's dev.containers.defaultFeatures there is no global override order; add ghcr.io/devcontainers/features/common-utils:2 to the defaults too, because the official Features declare installsAfter: common-utils and therefore move after this Feature. See the Feature docs for details and caveats. Providing no URLs makes it a safe no-op.
Installs gitlab-ci-local so you can run GitLab CI/CD pipelines locally (as a shell or docker executor) without pushing to test them.
Usage:
{
"features": {
"ghcr.io/rosstaco/devcontainer-features/gitlab-ci-local:1": {
"version": "latest"
}
}
}Options:
version- Version to install (default: "latest"). Use "latest" or a specific version like "4.67.0"
Supported Architectures:
- amd64 (x86_64)
- arm64 (aarch64)
Getting Started:
From a project containing a .gitlab-ci.yml:
gitlab-ci-local # run the default pipeline
gitlab-ci-local --job <job-name> # run a specific jobInstalls prompty-dumpty, a CLI (dumpty) for managing prompty files.
Usage:
{
"features": {
"ghcr.io/rosstaco/devcontainer-features/prompty-dumpty:1": {
"version": "latest"
}
}
}Options:
version- Version to install (default: "latest"). Use "latest" or a specific version like "0.6.2"
Getting Started:
dumpty --help
dumpty --versionPrompty Dumpty is installed system-wide with pip3 --break-system-packages (appropriate for containers) and assumes Python 3 is present in the base image.
This repository uses a GitHub Action workflow that publishes each Feature to GHCR (GitHub Container Registry).
Features in this repository are referenced with:
ghcr.io/rosstaco/devcontainer-features/<feature>:1
By default, GHCR packages are marked as private. To make them publicly accessible, navigate to the Feature's package settings page in GHCR and set the visibility to public:
https://github.com/users/rosstaco/packages/container/devcontainer-features%2F<featureName>/settings
To add Features to the public index:
- Go to github.com/devcontainers/devcontainers.github.io
- Open a PR to modify the collection-index.yml file
This allows tools like VS Code Dev Containers and GitHub Codespaces to surface your Features in their creation UI.