I'm a Developer Using AI Coding Tools

March 19, 2026 ยท View on GitHub

You use Claude Code, Cursor, GitHub Copilot, or another AI coding assistant. You want to secure your project without changing your workflow.

Time estimate: 5 minutes from start to a fully governed project.

Prerequisites:

  • Node.js 18 or later
  • An existing project directory

Step 1: See What's Running

Start by discovering what AI tools are active in your environment and how well-governed they are.

npx opena2a-cli detect

Expected output:

  Shadow AI Detection  v0.7.2

  Machine    macbook-pro (darwin arm64)
  User       dev
  Directory  /home/dev/my-project

  AI Agents (2 running)
  -----------------------------------------------
  claude-code          PID 41023   v1.0.12
  cursor               PID 38291   v0.45.6

  MCP Servers (3 configured)
  -----------------------------------------------
  filesystem           claude     local
  postgres             claude     local
  slack                cursor     local

  AI Config Files (2 found)
  -----------------------------------------------
  CLAUDE.md            project    governance rules
  .cursorrules         project    editor config

  Governance Score     45 / 100

  Findings
  -----------------------------------------------
  - Project not registered (no AIM identity)
  - No SOUL.md behavioral governance file
  - MCP servers unsigned
  - 2 credentials detected in source files

  Run: opena2a protect    (fix all findings)

The governance score tells you how well-managed your AI environment is. A score of 45 means several gaps need attention.


Step 2: Register the Project

Create a cryptographic identity for your project. This generates a local Ed25519 keypair that other OpenA2A tools use to verify ownership and sign artifacts.

npx opena2a-cli identity create --name my-project

Expected output:

  Agent Identity Created

  Name         my-project
  Agent ID     agent:ed25519:k1_a8f3...7d2e
  Key Type     Ed25519
  Created      2026-03-15T10:30:00Z
  Storage      .aim/identity.json

  The private key is stored locally. It never leaves this machine.
  Other tools can now reference this identity for signing and verification.

This identity is local-only. No data is sent to any server. The .aim/ directory is automatically added to .gitignore by the protect command in a later step.


Step 3: Set Governance Rules

Generate a SOUL.md file that defines behavioral boundaries for AI agents working in your project. This file is checked by scan-soul and used by governance-aware agents.

npx opena2a-cli harden-soul

Expected output:

  SOUL.md Governance Hardening

  Project      /home/dev/my-project
  Type         Node.js (detected)
  Tier         TOOL-USING (54 controls)

  Generated Sections
  -----------------------------------------------
  Trust Hierarchy          who can override whom
  Capability Boundaries    allowed/denied tool actions
  Injection Hardening      prompt injection defenses
  Data Handling            PII, credentials, exfiltration
  Hardcoded Behaviors      invariant safety rules
  Agentic Safety           delegation, recursion limits
  Honesty                  transparency requirements
  Human Oversight          approval gates, escalation

  Wrote: SOUL.md (54 controls, 8 domains)

  Run: opena2a scan-soul    (verify coverage)

The generated file uses the ABGS (Agent Behavioral Governance Specification) framework. You can edit the file to customize rules for your project. For example, you might restrict file deletion or require human approval for deployments.

To verify your governance file covers all required controls:

npx opena2a-cli scan-soul

Expected output:

  SOUL.md Governance Scan

  File         SOUL.md
  Tier         TOOL-USING (54 controls)

  Domain Scores
  -----------------------------------------------
  Trust Hierarchy          8 / 8    100%
  Capability Boundaries    7 / 7    100%
  Injection Hardening      6 / 6    100%
  Data Handling            7 / 7    100%
  Hardcoded Behaviors      6 / 6    100%
  Agentic Safety           8 / 8    100%
  Honesty                  6 / 6    100%
  Human Oversight          6 / 6    100%

  Overall Score    54 / 54   100%

Step 4: Protect Credentials

If you have API keys or tokens in your source files, migrate them to environment variables. Secretless AI detects hardcoded credentials and replaces them with process.env.VAR_NAME (or the equivalent for your language).

npx secretless-ai init

Expected output:

  Secretless AI  v0.11.4

  Scanning /home/dev/my-project...

  Credentials Found (2)
  -----------------------------------------------
  src/config.ts:12     ANTHROPIC_API_KEY    sk-ant-api03-***
  src/config.ts:15     OPENAI_API_KEY       sk-proj-***

  Actions Taken
  -----------------------------------------------
  Created .env with 2 variables
  Updated src/config.ts (2 replacements)
  Added .env to .gitignore
  Created .env.example (variable names only, no values)
  Added CLAUDE.md secretless block

  All credentials migrated to environment variables.
  Run: npx secretless-ai verify    (confirm no leaks)

The original credential values are moved to .env (which is gitignored). Your source files now reference process.env.ANTHROPIC_API_KEY instead of the raw key.


Step 5: Scan for Vulnerabilities

Run a full security scan to check for remaining issues across your AI configuration.

npx hackmyagent secure

Expected output:

  HackMyAgent  v0.10.4

  Scanning /home/dev/my-project...
  187 checks across 39 categories

  Results
  -----------------------------------------------
  Critical     0
  High         1    MCP server 'postgres' has unrestricted query access
  Medium       2    .cursorrules not signed, CLAUDE.md not signed
  Low          1    No runtime monitoring configured
  Info         3    Detected 3 MCP servers, 2 AI agents

  Score        82 / 100

  Recommended Fixes
  -----------------------------------------------
  1. Restrict postgres MCP server queries:
     Add allowedOperations to MCP config (see docs)

  2. Sign config files:
     opena2a guard sign

  3. Enable runtime monitoring:
     opena2a runtime init

Address the findings based on severity. Critical and high findings should be resolved before deploying to production.


Step 6: Verify

Run detection again to confirm your governance score has improved.

npx opena2a-cli detect

Expected output:

  Shadow AI Detection  v0.7.2

  Machine    macbook-pro (darwin arm64)
  User       dev
  Directory  /home/dev/my-project

  AI Agents (2 running)
  -----------------------------------------------
  claude-code          PID 41023   v1.0.12    governed
  cursor               PID 38291   v0.45.6    governed

  MCP Servers (3 configured)
  -----------------------------------------------
  filesystem           claude     local      signed
  postgres             claude     local      signed
  slack                cursor     local      signed

  AI Config Files (4 found)
  -----------------------------------------------
  CLAUDE.md            project    governance rules    signed
  .cursorrules         project    editor config       signed
  SOUL.md              project    behavioral rules
  .aim/identity.json   project    agent identity

  Governance Score     100 / 100

  All checks passed. This project is fully governed.

Every AI agent is now tracked, credentials are protected, behavioral governance is defined, and config files are signed for tamper detection.


Ongoing Maintenance

After the initial setup, use these commands as part of your regular workflow:

WhenCommandPurpose
Before commitsopena2a protect --dry-runCheck for new credential leaks
Weeklyopena2a detectVerify governance posture
After config changesopena2a guard resignRe-sign modified config files
In CI/CDopena2a review --format jsonAutomated security gate

Built-in Help

You do not need to memorize commands. The CLI provides contextual assistance:

opena2a ?                           # Context-aware recommendations for your project
opena2a ~shadow ai                  # Semantic search across all commands
opena2a "find leaked credentials"   # Natural language command matching
opena2a                             # Interactive guided wizard (no args)