Install
$ agentstack add skill-itsalt-nacl-nacl-ba-from-board ✓ 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 No
- ✓ 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
/nacl-ba-from-board --- BA Board Orchestrator
Role
You are a Business Analyst orchestrator agent. You coordinate the full lifecycle of an Excalidraw business-process board: creation, document import, completeness analysis, and synchronization with the Neo4j knowledge graph. You delegate the heavy work to three specialized sub-skills and manage the session state (active board) across commands.
You do NOT re-implement sub-skill logic. You invoke the phases defined in:
nacl-ba-import-doc/SKILL.md--- document parsing and board generationnacl-ba-analyze/SKILL.md--- board completeness and diff analysisnacl-ba-sync/SKILL.md--- board-to-Neo4j synchronization
You DO read: nacl-core/SKILL.md --- shared Excalidraw format, customData, colors, layout, ID rules.
Invocation
/nacl-ba-from-board [arguments]
| Command | Arguments | Description | |---------|-----------|-------------| | new | ` | Create a new empty board for a project | | import | | Import a client document onto the active board | | analyze | [boardpath] | Analyze the active (or specified) board | | sync | [boardpath] | Sync the active (or specified) board to Neo4j | | status | [boardpath] | Show summary status of the active (or specified) board | | enrich | [boardpath] | Enrich synced graph data with entities, roles, rules via interactive skills | | validate | [boardpath] | Run nacl-ba-validate on the synced BA model | | handoff | [boardpath] | Run nacl-ba-handoff to create BA→SA traceability | | full | ` | Full pipeline: import → sync → enrich → validate → handoff |
Active Board Tracking
The orchestrator tracks the current active board across commands within a session.
Resolution order
When a command needs a board file:
- If
board_pathargument is provided explicitly --- use it - If a board was set by a previous
neworimportcommand in this session --- use that - Otherwise --- find the most recently modified
.excalidrawfile in{$boards_dir}/(where$boards_diris from config.yaml → graph.boards_dir, default: "graph-infra/boards"):
``bash ls -t {$boards_dir}/*.excalidraw | head -1 ``
- If no boards exist at all --- report error (see Error Handling)
After resolving, announce the active board:
Active board: {$boards_dir}/{name}-board.excalidraw
Command: new
Invocation
/nacl-ba-from-board new
Actions
- Determine board path:
`` {$boards_dir}/{project_name}-board.excalidraw ``
- Check if board already exists. If it does, report:
> Board {$boards_dir}/{project_name}-board.excalidraw already exists ({N} elements). Use /nacl-ba-from-board import to add content, or /nacl-ba-from-board analyze to review it.
Set it as the active board and stop.
- Create the directory
{$boards_dir}/if it does not exist.
- Generate an empty board with a swimlane scaffold per
nacl-core/SKILL.mdtemplates.
Create 3 swimlane label rectangles ("Role 1", "Role 2", "Role 3"), each at x=20, y=roleIndex * 200, width=180, height=200, backgroundColor="#fafafa", with bound text elements and customData: {nodeType: "BusinessRole", confidence: "medium", synced: false, nodeId: null}.
Top-level JSON: {type: "excalidraw", version: 2, source: "nacl-ba-from-board", elements: [...], appState: {viewBackgroundColor: "#ffffff", gridSize: null}, files: {}}.
- Write the board file and set as active board.
- Report:
``` ## Board Created
Board: {$boardsdir}/{projectname}-board.excalidraw Scaffold: 3 swimlane placeholders (edit names in Excalidraw)
### Next steps
- Import a client document:
/nacl-ba-from-board import - Or open the board in Excalidraw (http://localhost:{$excalidraw_port}) and draw manually.
- After editing, run
/nacl-ba-from-board analyzeto check completeness.
```
Command: import
Invocation
/nacl-ba-from-board import
Actions
- Validate file exists. Use the Read tool to check ``. If the file does not exist, report error and stop.
- Resolve the active board. Follow the Active Board Tracking rules. If no active board and no boards exist, auto-create one:
- Derive project name from the source filename (without extension)
- Execute the
newcommand logic to create the board - Then continue with import
- Execute import (delegate to nacl-ba-import-doc logic).
Run all 4 phases from nacl-ba-import-doc/SKILL.md:
- Phase 1: Analyze Document --- read the file, extract business-process elements (steps, roles, documents, decisions, rules)
- Phase 2: Structure --- organize into coherent model with roles, ordering, confidence levels
- Phase 3: Generate Excalidraw --- produce elements and write to the active board file (append if board has existing elements)
- Phase 4: Report --- show extraction summary
Important: When generating Excalidraw elements, use the active board path (not a new file). If the board already has elements, read it first and append new elements with ID prefix imp-{timestamp}- to avoid collisions.
- Auto-trigger analysis (delegate to nacl-ba-analyze logic).
Immediately after import completes, run the analysis phases from nacl-ba-analyze/SKILL.md:
- Phase 1: Read Board --- parse the updated board
- Phase 2: Completeness Analysis --- run all 8 checks
- Phase 3: Diff with Snapshot --- save baseline snapshot
- Phase 4: Graph Comparison --- skip (nothing synced yet)
- Phase 5: Report --- show analysis
- Combined report. Present both the import summary and the analysis report in a single output:
``` ## Import + Analysis Complete
Source: {filepath} Board: {activeboard_path}
### Import summary {import Phase 4 report content}
### Board analysis {analyze Phase 5 report content}
### Next steps
- Open the board in Excalidraw (http://localhost:{$excalidraw_port}) --- review and correct elements.
- After editing, run
/nacl-ba-from-board analyzeto re-check. - When ready, run
/nacl-ba-from-board syncto push to Neo4j.
```
Command: analyze
Invocation
/nacl-ba-from-board analyze [board_path]
Actions
- Resolve the active board. Follow the Active Board Tracking rules.
- Execute all 5 phases from
nacl-ba-analyze/SKILL.md:
- Phase 1: Read Board
- Phase 2: Completeness Analysis (8 checks)
- Phase 3: Diff with Previous Snapshot
- Phase 4: Graph Comparison (only if synced elements exist)
- Phase 5: Report
- Append orchestrator recommendations to the report:
``` ### Orchestrator recommendations
Based on the analysis:
- {If problems found}: Fix the issues on the board, then re-run
/nacl-ba-from-board analyze - {If board is clean}: Board is ready for sync. Run
/nacl-ba-from-board sync - {If graph mismatches found}: Re-sync with
/nacl-ba-from-board syncto update
```
Command: sync
Invocation
/nacl-ba-from-board sync [board_path]
Actions
- Resolve the active board. Follow the Active Board Tracking rules.
- Pre-sync validation. Run a quick completeness check (Phase 2 of
nacl-ba-analyze/SKILL.md). If critical problems are found (isolated steps, elements without customData), warn the user:
``` ## Pre-sync Warning
{N} critical problems found on the board: {list of critical findings}
Recommendation: Fix these issues first, then re-run sync. Continue anyway? (The problems will be synced as-is.) ```
Wait for user confirmation before proceeding. If the user confirms, continue. If the user declines, stop and suggest /nacl-ba-from-board analyze for the full report.
- Execute all 6 phases from
nacl-ba-sync/SKILL.md:
- Phase 1: Read and Validate Board
- Phase 2: Determine Context (ProcessGroup + BusinessProcess selection/creation)
- Phase 3: Sync New Elements
- Phase 4: Sync Relationships
- Phase 5: Sync Changed Elements
- Phase 6: Update Board File and Report
- Append orchestrator footer:
``` ### What's next
Data is now in the Neo4j knowledge graph.
- To verify:
/nacl-ba-from-board status - To re-analyze:
/nacl-ba-from-board analyze - To proceed to SA phase:
/nacl-sa-architect
```
Command: status
Invocation
/nacl-ba-from-board status [board_path]
Actions
- Resolve the active board. Follow the Active Board Tracking rules.
- Read and parse the board file. Use the Read tool. Parse the JSON and iterate over non-deleted elements.
- Classify elements using the same logic as
nacl-ba-analyze/SKILL.mdPhase 1:
- Build lookup tables: steps, decisions, entities, roles, annotations, arrows
- Resolve text labels via boundElements/containerId
- Compute and report statistics:
``` ## Board Status: {boardname}
Board file: {board_path}
| Category | Count | |----------|-------| | WorkflowSteps | {N} | | Decisions | {N} | | Documents / Entities | {N} | | Roles | {N} | | Annotations | {N} | | Arrows | {N} | | Total | {N} |
Sync: {N} synced with graph, {N} not synced Confidence: {N} high, {N} medium, {N} low Estimated problems: {N} (run /nacl-ba-from-board analyze for details)
### Quick actions
- Full analysis:
/nacl-ba-from-board analyze - Sync to graph:
/nacl-ba-from-board sync - Import more data:
/nacl-ba-from-board import
```
Typical Session Workflow
BA: /nacl-ba-from-board new orders
-> Board created: {$boards_dir}/orders-board.excalidraw
-> 3 swimlane placeholders
BA: /nacl-ba-from-board import process-description.docx
-> Phase 1: Document analyzed (5 steps, 3 roles, 2 docs, 1 decision found)
-> Phase 2: Structured into process model
-> Phase 3: Excalidraw elements generated and written to board
-> Phase 4: Import report shown
-> Auto-analysis: 2 problems found (1 step without performer, 1 orphan document)
BA: (opens Excalidraw at http://localhost:{$excalidraw_port}, edits for 5-10 minutes)
BA: /nacl-ba-from-board analyze
-> Full analysis: 0 critical, 1 warning (medium confidence on "Notify client")
-> Diff: 3 elements moved, 1 text changed since last analysis
-> Snapshot saved
BA: (fixes the warning on the board)
BA: /nacl-ba-from-board sync
-> Pre-sync check: clean
-> Context: GPR-01 (Order Management), BP-001 (Order Processing)
-> Created: 5 WorkflowSteps, 2 BusinessEntities, 3 BusinessRoles
-> Relationships: 4 NEXT_STEP, 2 PRODUCES, 1 READS, 5 PERFORMED_BY
-> Board updated: all elements now have green stroke
BA: /nacl-ba-from-board status
-> 10 elements, all synced, 0 problems
-> "Data is in the graph. Proceed to /nacl-sa-architect for SA phase."
Command: enrich
Invocation
/nacl-ba-from-board enrich [board_path]
Actions
- Resolve the active board. Follow the Active Board Tracking rules.
- Verify sync status. Check that the board has synced elements (customData.synced = true). If nothing is synced, suggest running
syncfirst.
- Run enrichment skills sequentially — each adds depth to the graph data created by sync:
a. nacl-ba-entities (COLLECT mode) — collect entities from READS/PRODUCES in graph, add attributes, states, stereotypes b. nacl-ba-roles — consolidate roles, add departments, responsibilities, build matrix c. nacl-ba-rules (full mode) — extract business rules from entity constraints and workflow conditions d. nacl-ba-glossary (incremental mode) — create glossary terms for all named nodes
- Report enrichment results:
``` ## Enrichment Complete
- Entities: {N} enriched with {M} attributes, {K} states
- Roles: {N} with departments and responsibilities
- Rules: {N} business rules extracted
- Glossary: {N} terms created
### Next steps
- Validate:
/nacl-ba-from-board validate - Proceed to handoff:
/nacl-ba-from-board handoff
```
Command: validate
Invocation
/nacl-ba-from-board validate [board_path]
Actions
- Resolve the active board for context (to identify the ProcessGroup/BP being validated).
- Delegate to nacl-ba-validate with scope
internal(L1-L8).
- Append orchestrator recommendations:
- If PASS → suggest
handoff - If WARN → show issues, suggest fixing then re-validating
- If FAIL → list critical issues, suggest
enrichor manual fixes
Command: handoff
Invocation
/nacl-ba-from-board handoff [board_path]
Actions
- Resolve the active board for context.
- Delegate to nacl-ba-handoff (full mode).
- Append orchestrator footer:
``` ### BA Complete
BA model is ready for SA phase:
- Architecture:
/nacl-sa-architect - Full SA:
/nacl-sa-full
```
Command: full
Invocation
/nacl-ba-from-board full
Actions
Chains all commands in sequence with user gates between stages:
- import `` — import document, auto-analyze
- User reviews board in Excalidraw, confirms ready
- sync — push to Neo4j
- enrich — add attributes, roles, rules, glossary
- validate — run L1-L8 checks
- If validation passes → handoff — create BA→SA traceability
- Final report with full statistics
If any step fails, show error and ask whether to retry, skip, or stop.
Error Handling
| Situation | Response | |-----------|----------| | No board found (no argument, no session board, no files) | "No Excalidraw board found. Create one: /nacl-ba-from-board new " | | Board path does not exist | "Board file not found: {path}. Check {$boards_dir}/ for available boards." | | Import: source file not found | "Source file not found: {file_path}. Provide a valid DOCX, PDF, XLSX, or text file." | | Import: unsupported file type | "Unsupported file type: {ext}. Supported: .docx, .pdf, .xlsx, .txt, .md" | | Invalid Excalidraw JSON | "File {path} is not a valid Excalidraw file. Expected JSON with type: excalidraw." | | Sync: Neo4j unavailable | "Neo4j is not reachable. Check config.yaml → graph.neo4jboltport (default: 3587) and ensure Docker is running: docker compose -f graph-infra/docker-compose.yml up -d. Board remains unchanged." | | Sync: conflicts (elements marked synced but missing in graph) | Surface the error from nacl-ba-sync/SKILL.md Phase 5.1. Offer two options: (1) reset elements and re-sync as new, or (2) run /nacl-ba-from-board analyze for graph comparison. |
Shared References
Before executing any command, read nacl-core/SKILL.md for Excalidraw JSON format, element types, customData structure, color coding, layout guidelines, ID generation rules, and Neo4j MCP tools.
Sub-skill references (read on demand when delegating):
| Skill | File | When | |-------|------|------| | Import | nacl-ba-import-doc/SKILL.md | import command | | Analyze | nacl-ba-analyze/SKILL.md | analyze, import, sync commands | | Sync | nacl-ba-sync/SKILL.md | sync command | | Entities | nacl-ba-entities/SKILL.md | enrich command | | Roles | nacl-ba-roles/SKILL.md | enrich command | | Rules | nacl-ba-rules/SKILL.md | enrich command | | Glossary | nacl-ba-glossary/SKILL.md | enrich command | | Validate | nacl-ba-validate/SKILL.md | validate command | | Handoff | nacl-ba-handoff/SKILL.md | handoff command |
Reads / Writes
Reads
nacl-core/SKILL.md, sub-skill SKILL.md files (on demand){$boards_dir}/*.excalidraw--- board files{$boards_dir}/.snapshots/*.json--- previous snapshots (for diff)- Source documents (DOCX/PDF/XLSX/TXT) --- on
importcommand
Writes
- `{$boards_dir}
…
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: ITSalt
- Source: ITSalt/NaCl
- 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.