Skip to content
Back to skills

Junction Guard

ASecurity

Block writes through filesystem junctions and symlinks — file write through .mxm-system or .claude junction, git commit through a junction, delete through a junction. Enforces the junction read-only rule so the real repo stays the source of truth.

  • 2 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 11, 2026
toolsgoshellbashgitsecurity

Works with

  • cli

Security analysis

A100/100

Scanned September 23, 2026

npx -y skills add DrNabeelKhan/maxim --skill junction-guard --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Junction Guard?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Junction Guard
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/drnabeelkhan-junction-guard/badge)](https://www.skillsdirectory.com/skills/drnabeelkhan-junction-guard)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
skill_id: junction-guard
name: Junction Guard
description: "Block writes through filesystem junctions and symlinks — file write through .mxm-system or .claude junction, git commit through a junction, delete through a junction. Enforces the junction read-only rule so the real repo stays the source of truth."
version: 1.0.0
category: safety
type: enforcement
frameworks: []
triggers:
  - file write through .mxm-system\
  - file write through .claude\ junction
  - git commit through junction
  - delete through junction
collaborates_with:
  - session-memory
  - operator-profile
ethics_required: false
priority: critical
tags: [safety, enforcement, junction, nk-universe-rule]
created: 2026-04-16
updated: 2026-04-16
---

# Junction Guard

## Purpose

Enforce the NK universe **junction read-only rule**: when Maxim detects that a target file path resolves through a filesystem junction or symlink (typically `.mxm-system\` or `.claude\` inside a sister project), it must refuse all write, delete, and git commit operations through that path. Reading is allowed.

Without this guard, an agent could accidentally write to the `maxim` source repo while operating in another project (e.g., `mxm-simplification`) — corrupting cross-project state and violating the data flow rule.

## When This Skill Activates

- Any tool call that writes/edits/deletes a file
- Any git commit operation
- Any directory creation under a path that resolves through a junction

## The Rule (from PROJECT_STRUCTURE_NK.md)

> `.mxm-system\` and `.claude\` inside mxm-simplification\ are junctions.
> ✅ Reading through junctions is ALLOWED
> ❌ Writing through junctions is FORBIDDEN
> ❌ Deleting through junctions is FORBIDDEN
> ❌ Git commits through junctions are FORBIDDEN

This applies to ANY junction created by `bootstrap/link-local-project.ps1` or any user-created junction pointing back at the maxim repo.

## Detection Logic

For any write target path `P`:

1. Walk `P` upward to find any junction or symlink ancestor.
2. If an ancestor resolves to a path OUTSIDE the current project root, that ancestor is a JUNCTION (or cross-project symlink).
3. If the junction target is the Maxim source repo (`E:\Projects\Maxim\maxim\` or symlink-equivalent): apply READ-ONLY rule.
4. If the junction target is any other project: apply CROSS-PROJECT WRITE rule (also forbidden).

### Detection Commands

**PowerShell:**
```powershell
$item = Get-Item -Path "<target-path>"
if ($item.LinkType -in @("Junction", "SymbolicLink")) {
    $resolved = $item.Target
    # Compare $resolved to current project root
}
```

**Bash:**
```bash
real_target=$(readlink -f "<target-path>")
project_root=$(pwd)
if [[ "$real_target" != "$project_root"* ]]; then
    echo "BLOCK: write resolves outside project root via junction"
fi
```

## Enforcement

When a forbidden write is detected:

1. **REFUSE** the operation immediately. Do not proceed.
2. Output the error message:
   ```
   🔒 JUNCTION READ-ONLY VIOLATION

   Target path:  <target-path>
   Resolves to:  <real-resolved-path>
   Junction at:  <junction-ancestor>
   Reason:       <real-resolved-path> is outside the current project root

   This operation is FORBIDDEN by the NK universe junction rule.

   Allowed:
     ✅ Read this file through the junction
     ❌ Write / Edit / Delete / Commit through the junction

   To make this change:
     1. Open the source repo directly:
        cd <real-resolved-path-without-junction>
     2. Make the change there.
     3. Commit there.
     4. Pull updates here through the junction.
   ```
3. Log the attempt to `.mxm-skills/junction-guard.log`:
   ```jsonl
   {"timestamp":"2026-04-16T11:00:00Z","tool":"Write","target":"<path>","resolved":"<real>","blocked":true,"agent":"<calling-agent>"}
   ```

## When NOT To Block

- The junction target IS the current project root (false positive — junction created in a way that loops back). Verify with absolute path comparison.
- The target is a regular file inside the project (not through any junction).
- The user has explicitly invoked `/mxm-junction-bypass` (NOT IMPLEMENTED — would require CSO approval).

## Skill Output Format

```
Junction Guard Verdict: ALLOW | BLOCK
Target: [path]
Resolves to: [real-path or "same project"]
Crosses junction: YES | NO
Action: [proceed | refuse]
Logged to: .mxm-skills/junction-guard.log
```

## Handoff

- BLOCK → return refusal to caller agent; log incident; suggest direct repo access
- ALLOW → return immediately, no action
- Repeated BLOCKs from same agent → escalate to CSO `security-analyst` (potential agent misconfiguration)

## Frameworks Used

None. This is a structural safety enforcer, not a behavioral skill.

## Source References

- `PROJECT_STRUCTURE_NK.md` (Junction Rule section)
- `CLAUDE.d/session-memory.md` (Junction Read-Only Enforcement section)
- `bootstrap/link-local-project.ps1` (creates the junctions this guard protects)

---
_Copyright (c) 2026 iSystematic Inc. Maxim product. BSL 1.1._

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.