Workspace toolkit for managing sources, secrets, profiles, and SSH keys.
Zero external services. Filesystem storage. Single binary.
- Sources — Clone and sync reference repositories per project
- Secrets — PIN-protected encrypted vault using age
- Profiles — Named environments with env vars, git config, and SSH key
- SSH — Generate and manage ed25519 keys per profile
deno install -A -n tinker ./cli/main.ts# Add a reference source to the current project
tinker sources add https://github.com/denoland/deno_std
# Store a secret
tinker secrets set MY_TOKEN s3cr3t
# Create and configure a profile
tinker profiles create work
tinker profiles set-var work NODE_ENV production
tinker profiles set-git work user.email work@example.com
tinker ssh gen-key work
# Activate a profile
eval $(tinker profiles apply work)Manage reference source repositories. Clones are cached globally at ~/.tinker/sources/; a project-local symlink is
created at .tinker/sources/<name> pointing to the global clone.
tinker sources list
tinker sources add <url> [--name <name>]
tinker sources remove <name>
# alias: tinker sources rm <name>
tinker sources syncEncrypted secrets stored globally at ~/.tinker/secrets/vault.age. All operations require a PIN.
On the first set, tinker creates the vault and asks for PIN confirmation. Keep that PIN — there is no recovery path if
it is lost.
tinker secrets set <key> <value>
tinker secrets get <key>
tinker secrets list
tinker secrets remove <key>
# alias: tinker secrets rm <key>Named environments stored at ~/.tinker/profiles/. Activate with eval.
tinker profiles create <name>
tinker profiles delete <name>
# alias: tinker profiles rm <name>
tinker profiles list
tinker profiles show <name>
# Env vars
tinker profiles set-var <profile> <key> <value>
tinker profiles unset-var <profile> <key>
# Git config
tinker profiles set-git <profile> <key> <value>
tinker profiles unset-git <profile> <key>
# SSH key
tinker profiles set-ssh-key <profile> <path>
tinker profiles unset-ssh-key <profile>
# Activate (prints export statements)
eval $(tinker profiles apply <name>)Generate and manage ed25519 SSH keys for profiles. Keys are stored at ~/.tinker/ssh/<profile>/.
tinker ssh gen-key <profile> [--comment <comment>]
tinker ssh set-key <profile> <path>
tinker ssh remove-key <profile>
# alias: tinker ssh rm-key <profile>
tinker ssh show <profile>Per-project state lives in .tinker/config.json. Sources are tracked there; tinker walks up from cwd to find the
project root (.tinker/ or .git/ directory).
{
"sources": {
"deno-std": "https://github.com/denoland/deno_std"
}
}# Type check
deno check **/*.ts
# Lint
deno lint
# Format
deno fmt
# Tests
deno test --allow-allMIT — see LICENSE.