First off, thank you for considering contributing to AgentForge! It's people like you that make the open-source community such a great place.
This project and everyone participating in it is governed by the AgentForge Code of Conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to contact@agenticengineering.agency.
This is one of the easiest and most helpful ways to contribute. If you find a bug, please ensure the bug was not already reported by searching on GitHub under Issues.
If you're unable to find an open issue addressing the problem, open a new one. Be sure to include a title and clear description, as much relevant information as possible, and a code sample or an executable test case demonstrating the expected behavior that is not occurring.
If you have an idea for a new feature or an improvement to an existing one, please open an issue with the "enhancement" label. Provide a clear and detailed explanation of the feature, why it's needed, and how it should work.
We love pull requests! For any significant changes, please open an issue first to discuss what you would like to change.
- Fork the repo and create your branch from
main. - If you've added code that should be tested, add tests.
- If you've changed APIs, update the documentation.
- Ensure the test suite passes (
pnpm test). - Make sure your code lints (
pnpm lint). - Issue that pull request!
We use Prettier for code formatting and ESLint for linting. The configurations are in the root of the repository. Please run pnpm format and pnpm lint before committing your changes.
By contributing, you agree that your contributions will be licensed under its Apache 2.0 License.
AgentForge uses several environment variables for security. Regular rotation is recommended for production deployments.
API keys stored in Convex are encrypted with AES-256-GCM. The key is derived from VAULT_ENCRYPTION_KEY via PBKDF2 (100,000 iterations, SHA-256) with VAULT_SALT as the salt. See convex/vaultCrypto.ts for the implementation. To rotate:
-
Generate a new encryption key (32+ characters, cryptographically random):
openssl rand -base64 32
-
Back up your Convex data (export from dashboard or CLI)
-
Re-encrypt all vault entries with the new key:
- Set the new
VAULT_ENCRYPTION_KEYin your environment - For each encrypted entry, decrypt with the old key and re-encrypt with the new one via the
vaultCrypto.reEncryptinternal action VAULT_SALTcan remain unchanged during key rotation
- Set the new
-
Important: Key rotation requires decrypting and re-encrypting all vault entries. The AES-256-GCM auth tag ensures tamper detection during this process.
The AGENTFORGE_API_KEY is used for HTTP channel authentication:
-
Generate a new token:
agentforge tokens generate --name "rotated-token" -
Update clients to use the new token
-
Revoke old tokens:
agentforge tokens revoke <old-token-id>
For Discord and Telegram bot tokens:
- Generate new tokens in the respective developer portals
- Update
DISCORD_BOT_TOKENorTELEGRAM_BOT_TOKENenvironment variables - Restart the AgentForge daemon
- Invalidate old tokens in the developer portals
- Never commit
.envfiles or secrets to version control - Use strong, unique salts (32+ characters)
- Rotate secrets quarterly or after any suspected breach
- Use read-only database credentials where possible
- Enable rate limiting on public endpoints
- Sanitize all user input before processing