Organization-level skills
Your best engineers have prompts that work — ways of reviewing code, writing tests, or debugging issues that they’ve refined over time. Skills let you capture that expertise and share it with everyone. Skills are reusable prompts that the agent can discover and use proactively when relevant. They can optionally be made available as slash commands, so users can also invoke them manually by typing/ in the chat.
Why skills matter
Without shared skills, quality varies. One developer’s code review catches security issues; another’s misses them. One person knows how to write tests that actually test behavior; others write tests that only hit coverage targets. With skills:- Expertise scales: A senior engineer’s review checklist becomes available to the whole team
- Quality standardizes: Everyone follows the same process
- Onboarding accelerates: New team members immediately have access to proven workflows
- Agents get smarter: Skills are discoverable by the agent, so it can apply them proactively without being asked
How skills work
Skills are created in the dashboard under Settings > Agents. Each skill has:- Name: What appears in the skill list (e.g., “Security Review”)
- Description: When to use it — helps the agent decide when to apply it proactively
- Prompt: The full prompt text
- Available as slash command: Optional toggle to let users invoke it with a
/trigger
/ in the chat.
Example: Code review skill
A skill that captures one engineer’s review philosophy: Name: Review like Mads Prompt:review-like-mads, anyone can type /review-like-mads to get a review with that level of rigor. The agent can also apply this skill on its own when it detects a code review task.
Try it: Create your first skill
- Go to Settings > Agents
- Click New Skill
- Configure:
- Name: Code Review
- Description: Review code changes for logic errors, edge cases, and simplification opportunities
- Prompt:
- Available as slash command: Toggle on
- Command trigger:
review
- Click Create Skill
- In your agent panel, type
/review
Skills to create for your team
| Skill | Slash trigger | What it codifies |
|---|---|---|
| Pull Request | /pr | Create PRs with standardized format |
| Code Review | /review | Code review with your team’s standards |
| Write Tests | /test | Generate tests following your patterns |
| Fix CI | /fix-ci | Debug and fix failing CI builds |
| Security Review | /security | Security audit focused on your stack |
| Deploy Checklist | /deploy | Everything to verify before shipping |
Secrets management
Your apps need API keys, database passwords, and tokens. Ona provides secure secret management.Three levels of secrets
User secrets: Personal credentials (your GitHub token, your AWS keys) Project secrets: Shared within a project (staging database password) Organization secrets: Available across all projects (company-wide API keys)Adding secrets
Secrets can be managed in the dashboard or via the CLI. User secrets (personal credentials, available in all your environments):- Go to Settings → My Account → Secrets
- Click New Secret
- Enter a name (e.g.
API_KEY) and value - Your next environment will have
$API_KEYavailable
- Go to Project → Secrets
- Click New Secret
- Enter a name and value — all team members’ environments will have access
Using secrets in code
Secrets appear as environment variables:Try it: Add and use a secret
-
Add a test secret in the dashboard:
- Go to Settings → My Account → Secrets
- Create a new environment variable secret named
WORKSHOP_SECRETwith valuehello-from-ona
- Create a new environment (secrets are injected at environment creation)
-
Verify it’s available:
-
Use it in code: Create
test-secret.js:Run it:node test-secret.js
Security best practices
Do:- Use project secrets for shared credentials
- Rotate secrets regularly
- Use organization secrets for company-wide keys
- Keep production secrets separate from staging
- Commit secrets to Git
- Share secrets in chat or email
- Use the same secret for dev and production
- Log secret values in code
Command deny lists (safety)
Prevent Ona Agent from running dangerous commands. This feature is part of Guardrails and requires a Core or Enterprise plan.Command deny lists only block commands executed by Ona Agent. Users can still run any command directly in the terminal.
Why this matters
Without restrictions, an agent might accidentally:- Delete production databases
- Force-push over main
- Run expensive cloud operations
- Publish packages without review
Setting up deny lists
Deny lists are configured by organization admins in the dashboard — not via files in the repository.- Go to Settings → Agents
- Locate the Policies section
- Add patterns to the Command Deny List (one per line)
- Save — changes apply to new agent sessions
Pattern matching
Patterns use glob-style wildcards:| Pattern | Effect |
|---|---|
shutdown | Blocks exactly shutdown |
shutdown* | Blocks shutdown, shutdown -h, shutdown now |
rm * | Blocks all rm commands with arguments |
aws * | Blocks all AWS CLI commands |
Try it: Add a deny list
- Have an org admin go to Settings → Agents → Policies
- Add these patterns to the Command Deny List:
- Save and start a new agent session
- Ask the agent to run
git push --force— it will be blocked with an error message
Recommended deny patterns
aws *) rather than listing individual subcommands.
Quick wins checklist
Before finishing this lab, ensure you’ve:- Created at least one organization-level skill your team will use
- Added a secret (even a test one) and verified it works
- Reviewed the command deny list settings in Settings → Agents
Troubleshooting
Skill or slash command not working- Verify the skill exists in Settings > Agents
- If using as a slash command, ensure the Available as slash command toggle is on and a trigger is set
- Try typing
/in the agent panel to see available commands - Skills are organization-wide — any org member can use them
- Restarting an environment picks up updates to existing secrets, but newly added secrets require creating a new environment
- Check scope: User secrets only available to you, project secrets to everyone
- Verify spelling:
$SECRET_NAMEis case-sensitive - View loaded secrets:
env | grep SECRET
- Deny lists are configured in Settings → Agents → Policies (admin-only)
- Changes apply to new agent sessions — restart your session after updating
- Use
*wildcards for flexible matching (e.g.rm *not justrm) - Only agent-executed commands are blocked; direct terminal commands are unaffected
What you’ve learned
You now know how to:- Create organization-level skills to share expertise and enable proactive agent behavior
- Manage secrets securely at user, project, and organization levels
- Configure command deny lists to prevent dangerous agent operations
Next: Lab 5: Automations at Scale