Thanks for your interest in contributing! AgentSecrets is built in the open, and we welcome contributions from everyone.
# Fork the repo on GitHub, then:
git clone https://github.com/YOUR_USERNAME/agentsecrets
cd agentsecrets
# Install Go (1.21+)
# macOS: brew install go
# Linux: snap install go --classic
# Windows: Download from https://go.dev/dl/
# Download dependencies
go mod download
# Run the CLI
go run cmd/agentsecrets/main.go --help
# Run tests
go test ./...
# Build binary
go build -o agentsecrets cmd/agentsecrets/main.go
./agentsecrets --help- Create a feature branch:
git checkout -b feature/your-feature - Make changes: Edit code, add tests
- Test: Run
go test ./... - Format: Run
go fmt ./... - Commit: Use clear commit messages
- Push:
git push origin feature/your-feature - PR: Open a pull request on GitHub
We follow standard Go conventions:
- Format: Use
go fmt(enforced in CI) - Linting: Use
golangci-lint(coming soon) - Naming:
- Exported functions:
PascalCase - Unexported functions:
camelCase - Constants:
PascalCaseorUPPER_CASE
- Exported functions:
- Errors: Return errors, don't panic
- Comments: Public functions must have doc comments
# Run all tests
go test ./...
# Run tests with coverage
go test -cover ./...
# Run tests verbosely
go test -v ./...
# Test specific package
go test ./pkg/crypto/...
go test ./pkg/proxy/...
go test ./pkg/auth/...agentsecrets/
├── cmd/agentsecrets/ # CLI entry point + commands
│ ├── main.go
│ └── commands/
│ ├── root.go # Root command + auth middleware
│ ├── init.go # Account creation + workflow template
│ ├── login.go / logout.go # Session management
│ ├── status.go # Current context
│ ├── workspace.go # Workspace management
│ ├── allowlist.go # Zero-trust domain allowlist
│ ├── project.go # Project management
│ ├── secrets.go # Secrets CRUD + sync
│ ├── proxy.go # HTTP proxy + audit logs
│ ├── call.go # One-shot authenticated calls
│ ├── env.go # Env var injection into child processes
│ ├── mcp.go # MCP server + install
│ └── exec.go # OpenClaw exec provider
├── pkg/
│ ├── api/ # HTTP API client
│ ├── auth/ # Authentication + JWT refresh middleware
│ ├── config/ # Global config + project config
│ ├── crypto/ # X25519 + AES-256-GCM + Argon2id
│ ├── keychainauth/ # keychain-auth daemon integration
│ ├── keyring/ # OS keychain integration
│ ├── mcp/ # MCP server implementation
│ ├── projects/ # Project API wrappers
│ ├── proxy/ # Proxy engine, injector, audit logger
│ ├── secrets/ # Secret management + dotenv
│ ├── telemetry/ # Local usage tracking + background sync
│ ├── ui/ # Terminal UI components
│ └── workspaces/ # Workspace + allowlist API wrappers
├── integrations/openclaw/ # OpenClaw skill (SKILL.md)
├── docs/ # Documentation
│ ├── commands/ # Per-command reference docs
│ └── learning/ # Tutorials and guides
└── .agent/workflows/ # AI assistant workflow (generated by init)
- Test coverage (aiming for 80%+)
- Error message improvements (agents read these — clarity matters)
- LangChain + CrewAI first-party integrations
- Documentation (examples, guides, tutorials)
- Secret rotation
- Web dashboard (separate repo)
- CI/CD pipeline improvements
- JavaScript / Node.js SDK
- SSO integration
- Plugin system for custom auth styles
- Performance benchmarking
These are non-negotiable. PRs violating them will be rejected:
- Never log credential values — not stdout, not stderr, not files, not audit logs
- Never pass credential values as function arguments where avoidable — pass key names and resolve at the last possible moment via
pkg/keyring - Never write credential values to any file — keychain only for StorageMode 1
- The audit log struct must never gain a value field
- All new cloud sync operations must use
pkg/crypto— no plaintext uploads - Domain allowlist enforcement must not be bypassable — all outbound proxy calls go through allowlist check
We use conventional commits:
feat: add secrets rotation command
fix: handle network errors gracefully
docs: update installation instructions
test: add crypto package tests
refactor: simplify workspace switching logic
chore: update dependencies
- Title: Clear, descriptive (e.g., "Add secrets rotation command")
- Description:
- What does this PR do?
- Why is it needed?
- How was it tested?
- Tests: Add tests for new features
- Docs: Update docs if needed
- Size: Keep PRs focused and reasonably sized
- GitHub Issues: For bugs and feature requests
- GitHub Discussions: For questions and ideas
Great resources:
By contributing, you agree that your contributions will be licensed under the MIT License.
Thanks for contributing to making secrets management better for the AI era!