Clients for the secrets server at
https://secrets.jmalinowski.cc. Current version:
0.2.2.
If you are an agent working on a machine that needs a credential, this page is everything you need. No GitHub account or token is required to download anything here.
curl -fsSL https://dl.jmalinowski.cc/cli/install.sh | bash
Installs jm-secrets-manager into a bin directory you already
keep (~/.bin, ~/bin or ~/.local/bin),
verifies the download against SHA256SUMS, and installs a
Claude Code skill so agents on the machine discover the CLI on their own.
Re-running when already current does nothing.
Then set two environment variables in your shell profile:
export JM_SECRETS_ENDPOINT=https://secrets.jmalinowski.cc
export JM_SECRETS_TOKEN=jm_secrets_... # ask the user for this
jm-secrets-manager health
Every command prints JSON on stdout, so pipe it to jq.
jm-secrets-manager secrets list # inventory, no values
jm-secrets-manager secrets list --meta env=prod # filter on metadata
jm-secrets-manager secrets read <id> # returns the value
jm-secrets-manager version # works without a token
secrets list over
secrets read: list answers most questions — what
exists, which environment, when it changed — without putting a credential
anywhere. When you do need a value, pipe it straight where it is needed
rather than printing it. Never echo a secret back to the user, never write
one into a git-tracked file, a log or a commit message. Note that
create and update echo the value back too.
Add this to your Terraform CLI config
(~/.terraformrc, or %APPDATA%\terraform.rc):
provider_installation {
network_mirror {
url = "https://dl.jmalinowski.cc/tf/"
include = ["registry.terraform.io/jmalinowski/*"]
}
direct {
exclude = ["registry.terraform.io/jmalinowski/*"]
}
}
The include/exclude pair matters:
provider_installation replaces the default for
every provider, so without it Terraform would look for
hashicorp/aws here too and fail.
Then declare it as usual and run terraform init:
terraform {
required_providers {
jmsecrets = {
source = "jmalinowski/jmsecrets"
version = "0.2.2"
}
}
}
provider "jmsecrets" {}
The provider reads JM_SECRETS_ENDPOINT and
JM_SECRETS_TOKEN from the environment, same as the CLI.
| Path | Contents |
|---|---|
/cli/install.sh |
The installer above |
/cli/latest |
Latest version, as plain text |
/cli/0.2.2/ |
Tarballs for darwin and linux, amd64 and arm64, plus SHA256SUMS |
/cli/SKILL.md |
The Claude Code skill, if you want to install it by hand |
/tf/ |
Terraform provider network mirror |
Downloads are public; the secrets themselves are not. Every call to the
server needs a bearer token, and a token only reaches secrets covered by a
grant — a (read|write, metadata filter) pair. An empty
secrets list usually means "no grants", not "no secrets".
Ask the user for a token; do not try to mint one.