Install
$ agentstack add skill-alexsandrocruz-zenpowers-defense-in-depth ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Defense-in-Depth Validation
Overview
When you fix a bug caused by invalid data, adding validation at one place feels sufficient. But that single check can be bypassed by different code paths, refactoring, or mocks.
Core principle: Validate at EVERY layer data passes through. Make the bug structurally impossible.
Why Multiple Layers
Single validation: "We fixed the bug" Multiple layers: "We made the bug impossible"
Different layers catch different cases:
- Entry validation catches most bugs
- Business logic catches edge cases
- Environment guards prevent context-specific dangers
- Debug logging helps when other layers fail
The Four Layers
Layer 1: Entry Point Validation
Purpose: Reject obviously invalid input at API boundary
public static async Task CreateProjectAsync(string name, string workingDirectory)
{
if (string.IsNullOrWhiteSpace(workingDirectory))
{
throw new ArgumentException("Working directory cannot be empty or whitespace", nameof(workingDirectory));
}
if (!Directory.Exists(workingDirectory))
{
throw new DirectoryNotFoundException($"Working directory does not exist: {workingDirectory}");
}
var dirInfo = new DirectoryInfo(workingDirectory);
if (!dirInfo.Exists)
{
throw new ArgumentException($"Working directory is not accessible: {workingDirectory}", nameof(workingDirectory));
}
// ... proceed
}
Layer 2: Business Logic Validation
Purpose: Ensure data makes sense for this operation
public static async Task InitializeWorkspaceAsync(string projectDir, string sessionId)
{
if (string.IsNullOrEmpty(projectDir))
{
throw new InvalidOperationException("projectDir required for workspace initialization");
}
// ... proceed
}
Layer 3: Environment Guards
Purpose: Prevent dangerous operations in specific contexts
public static async Task GitInitAsync(string directory)
{
// In tests, refuse git init outside temp directories
var environment = Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT");
if (environment == "Test")
{
var normalized = Path.GetFullPath(directory);
var tempPath = Path.GetFullPath(Path.GetTempPath());
if (!normalized.StartsWith(tempPath, StringComparison.OrdinalIgnoreCase))
{
throw new InvalidOperationException(
$"Refusing git init outside temp dir during tests: {directory}");
}
}
// ... proceed
}
Layer 4: Debug Instrumentation
Purpose: Capture context for forensics
public static async Task GitInitAsync(string directory)
{
var stackTrace = Environment.StackTrace;
_logger.LogDebug("About to git init: {Directory}, CWD: {CurrentDirectory}, Stack: {StackTrace}",
directory,
Environment.CurrentDirectory,
stackTrace);
// ... proceed
}
Applying the Pattern
When you find a bug:
- Trace the data flow - Where does bad value originate? Where used?
- Map all checkpoints - List every point data passes through
- Add validation at each layer - Entry, business, environment, debug
- Test each layer - Try to bypass layer 1, verify layer 2 catches it
Example from Session
Bug: Empty projectDir caused git init in source code
Data flow:
- Test setup → empty string
Project.create(name, '')WorkspaceManager.createWorkspace('')git initruns inprocess.cwd()
Four layers added:
- Layer 1:
Project.create()validates not empty/exists/writable - Layer 2:
WorkspaceManagervalidates projectDir not empty - Layer 3:
WorktreeManagerrefuses git init outside tmpdir in tests - Layer 4: Stack trace logging before git init
Result: All 1847 tests passed, bug impossible to reproduce
Key Insight
All four layers were necessary. During testing, each layer caught bugs the others missed:
- Different code paths bypassed entry validation
- Mocks bypassed business logic checks
- Edge cases on different platforms needed environment guards
- Debug logging identified structural misuse
Don't stop at one validation point. Add checks at every layer.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: alexsandrocruz
- Source: alexsandrocruz/ZenPowers
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.