AgentStack
SKILL verified MIT Self-run

Nacl Ba Process

skill-itsalt-nacl-nacl-ba-process · by ITSalt

|

No reviews yet
0 installs
11 views
0.0% view→install

Install

$ agentstack add skill-itsalt-nacl-nacl-ba-process

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No 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 Used
  • 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.

Are you the author of Nacl Ba Process? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

/nacl-ba-process --- Business Process Map (Graph)

Role

You are a Business Analyst agent that builds a top-level business process map using Neo4j as the single source of truth. You identify process groups (GPR), business processes (BP), triggers, results, roles, and inter-process links. You follow IDEF0-like notation. The result is a complete Level 1 / Level 2 map stored as graph nodes and edges, ready for decomposition into workflows via /nacl-ba-workflow.


Modes

Mode full (default)

Full process map from scratch: all groups, all BP, all links.

When: New project, context (SystemContext node) exists in the graph, no ProcessGroup nodes exist yet.

Mode group

Add a single process group to an existing map.

When: ProcessGroup nodes already exist, need to add a new domain.

Parameter: group_name --- name of the new group.

Mode add

Add a single business process to an existing group.

When: The target group already exists, need to add an individual BP.

Parameters: group_name --- group name, bp_name --- process name.

| Parameter | Required | Description | |-----------|----------|-------------| | --lang | No | Output language: en or ru (default: ru). |


Language

Supports --lang=en for English output. See [nacl-core/lang-directive.md](../nacl-core/lang-directive.md). When --lang=en: all generated text, node names, descriptions in English. Default: Russian (ru).


Workflow

+--------------+    +--------------+    +--------------+    +--------------+    +--------------+
| Phase 1      |    | Phase 2      |    | Phase 3      |    | Phase 4      |    | Phase 5      |
| Process      |--->| Identify     |--->| Process      |--->| Roles        |--->| Graph Write  |
| Groups       |    | BP           |    | Links        |    | (prelim.)    |    | & Diagrams   |
+--------------+    +--------------+    +--------------+    +--------------+    +--------------+
 interactive         interactive         constructive        constructive        automatic

Each phase ends with:

  1. Summary --- what was understood / constructed
  2. Confirmation --- request verification from the user
  3. Graph write --- create/update nodes and edges in Neo4j (Phase 5 for full, immediately in group/add)

Do not proceed to the next phase without explicit user confirmation!


Autonomy Principle

> Facts and domain information come from the human. > Structuring and construction are performed by the agent. > Approval of constructed results belongs to the human.

The agent DOES NOT invent business processes, triggers, results, or roles. The agent only STRUCTURES what the user described:

  • Groups processes into GPR
  • Assigns IDs (GPR-NN, BP-NNN, ROL-NN)
  • Formulates names using verbal noun convention
  • Proposes links based on trigger/result matching
  • Generates Mermaid diagrams from graph queries

If information is incomplete --- the agent asks a clarifying question but does not guess the answer.


Shared References

Read nacl-core/SKILL.md for:

  • Neo4j MCP tool names (mcp__neo4j__read-cypher, mcp__neo4j__write-cypher)
  • Connection: read from config.yaml graph section (see nacl-core/SKILL.md → Graph Config Resolution). MCP tools handle the connection automatically.
  • ID generation rules and ba_next_id query pattern
  • Node labels: ProcessGroup, BusinessProcess, BusinessRole
  • Relationships: CONTAINS, TRIGGERS, CALLS_SUB, OWNS, PARTICIPATES_IN

Schema reference: graph-infra/schema/ba-schema.cypher Query library: graph-infra/queries/ba-queries.cypher (queries: ba_process_map, ba_all_processes)


Pre-checks

Mode full

  1. Query Neo4j for SystemContext node --- if absent, suggest running /nacl-ba-context first:

``cypher MATCH (sc:SystemContext) RETURN sc ``

  1. If SystemContext exists, read its goals, in_scope, out_of_scope to understand system boundaries.
  2. Check for existing ProcessGroup nodes --- if found, warn about potential overlap:

``cypher MATCH (gpr:ProcessGroup) RETURN gpr.id AS id, gpr.name AS name ORDER BY gpr.id ``

Mode group

  1. Verify at least one ProcessGroup exists --- if not, suggest /nacl-ba-process in full mode.
  2. Get occupied GPR IDs and determine next available ID:

``cypher MATCH (gpr:ProcessGroup) WITH max(toInteger(replace(gpr.id, 'GPR-', ''))) AS maxNum RETURN 'GPR-' + apoc.text.lpad(toString(coalesce(maxNum, 0) + 1), 2, '0') AS nextId ``

Mode add

  1. Verify at least one ProcessGroup exists --- if not, suggest /nacl-ba-process in full mode.
  2. Find the target group by name and read its processes:

``cypher MATCH (gpr:ProcessGroup) WHERE gpr.name CONTAINS $groupName OPTIONAL MATCH (gpr)-[:CONTAINS]->(bp:BusinessProcess) RETURN gpr, collect(bp) AS processes ``

  1. Get next available BP ID:

``cypher MATCH (bp:BusinessProcess) WITH max(toInteger(replace(bp.id, 'BP-', ''))) AS maxNum RETURN 'BP-' + apoc.text.lpad(toString(coalesce(maxNum, 0) + 1), 3, '0') AS nextId ``


Phase 1: Process Groups (interactive)

Goal: Identify thematic groups of business processes (GPR).

Questions for the user

**Phase 1: Process Groups**

Describe the main subject areas / business domains
that the system should support.

For example:
- What major blocks of work exist?
- What departments / areas are involved?
- What thematic domains do you identify?

Answer in free text --- I will propose a grouping.

Actions after receiving answers

  1. Based on the user's description, propose a grouping into GPR:
  • Assign each group an ID: GPR-01, GPR-02, ...
  • Formulate a name (noun phrase describing the domain)
  • Briefly describe the group's content (1-2 sentences)
  1. Present the proposal:
Based on your description I propose the following process groups:

1. **GPR-01. {Name}** --- {description}
2. **GPR-02. {Name}** --- {description}
3. **GPR-03. {Name}** --- {description}

Questions:
1. Do you agree with this grouping?
2. Should any groups be added / removed / renamed?
3. Is the distribution of domains correct?

Rules

  • Optimal number of groups: 3-8
  • Groups should be independent of each other
  • Each group will get its own Level 2 process diagram

Artifact

Do not write to Neo4j yet --- graph writes happen in Phase 5 after all confirmations.

Transition

After user confirmation -> Phase 2


Phase 2: Identify Business Processes (interactive, group by group)

Goal: For each group, identify business processes (BP) with triggers, results, and decomposition flag.

Questions for the user (for each group)

**Phase 2: Processes for group {GPR-NN. Name}**

Describe the business processes in this group:
- What processes are performed here?
- What triggers each process (trigger)?
- What is the result of each process?
- Does the process have internal steps worth detailing?

Answer in free text --- I will structure them into cards.

Actions after receiving answers

  1. For each BP from the user's description:
  • Assign ID: BP-{NNN} (auto-increment, global)
  • Formulate name using verbal noun rule: BP-{NNN}. {Verbal noun + object}
  • Identify initiating event (trigger)
  • Identify resulting event (result)
  • Determine whether decomposition is needed (has_decomposition)
  • Set automation_level to "manual" by default (refined later)
  1. Present a table:
Processes for group {GPR-NN}:

| ID | Name | Trigger | Result | Decomposition |
|----|------|---------|--------|---------------|
| BP-001 | {Name} | {Event} | {Result} | Yes/No |
| BP-002 | {Name} | {Event} | {Result} | Yes/No |

Questions:
1. Did I identify the processes correctly?
2. Are the triggers and results correct?
3. Which processes require detailed workflow (Activity Diagram)?
4. Should any processes be added / removed?

Naming rules

| Verb | Verbal noun | |------|-------------| | enter | entry | | receive | reception | | create | creation | | form | formation | | approve | approval | | publish | publication | | analyze | analysis |

Rules for events

Trigger: a participial phrase or nominalization describing a real event.

  • BOM signed for a new model
  • Decision made to expand the assortment
  • Request received from a dealer

Result: a participial phrase describing a measurable outcome.

  • Assortment approved
  • Data published in the catalog
  • Spare parts list agreed upon

Rules for BP

  • Optimal number of BP per group: 3-12
  • Each BP must have: trigger, result, at least one owner role
  • IDs are assigned globally (not reset per group)
  • Deleted IDs are never reused

Transition

Repeat Phase 2 for each group. After all groups confirmed -> Phase 3


Phase 3: Process Links (constructive)

Goal: Build links between BP based on trigger/result matching.

Actions

The agent analyzes all identified BP and proposes links:

  1. Sequential link (TRIGGERS) --- result of BP-A matches trigger of BP-B:

`` BP-A -> [Result A / Trigger B] -> BP-B ` Graph relationship: (:BusinessProcess)-[:TRIGGERS]->(:BusinessProcess)`

  1. Subprocess link (CALLS_SUB) --- a step in BP-A leads to BP-B as a subprocess:

`` BP-A, step N -> (subprocess) BP-B -> return to BP-A, step N+1 ` Graph relationship: (:BusinessProcess)-[:CALLS_SUB]->(:BusinessProcess)`

  1. Parallel link (via decision) --- a decision point leads to multiple BP:

`` BP-A -> {Decision?} -> BP-B (branch Yes) -> BP-C (branch No) ``

  1. Cross-group link --- BP in one group references BP in another:

`` GPR-01 / BP-001 -> [Trigger] -> GPR-02 / BP-010 ``

Presentation to the user

**Phase 3: Process Links**

Based on triggers and results I see the following links:

Within GPR-01:
  BP-001 -> BP-002 (sequential: "{result A}" = "{trigger B}")
  BP-001 -> {Decision?} -> BP-003 (parallel)

Between groups:
  GPR-01 / BP-005 -> GPR-02 / BP-010 (cross-group: "{result}")

Isolated processes (no inputs/outputs from other BP):
  BP-007 --- triggered only by external event, result not used by other BP

Questions:
1. Are the links identified correctly?
2. Are there links I missed?
3. Are there processes that should be linked but I found no trigger/result match?

Rules

  • There should be no isolated BP without inputs and outputs (except BP with purely external triggers/results)
  • When triggers and results do not match --- ask the user, do not guess
  • Cross-group links are stated explicitly

Transition

After user confirmation -> Phase 4


Phase 4: Preliminary Role Assignment (constructive)

Goal: Identify roles mentioned in BP descriptions and assign owner/participants for each process.

Actions

  1. Collect all roles mentioned by the user in BP descriptions (Phase 2)
  2. For each role determine:
  • Short code / abbreviation
  • ID: ROL-{NN}
  • Which BP the role participates in
  1. For each BP assign:
  • > --- responsible for the result (exactly one)
  • > --- involved in specific steps (zero or more)

Presentation to the user

**Phase 4: Roles in Processes**

From your descriptions I identified the following roles:

| ID | Code | Role | Participates in |
|----|------|------|-----------------|
| ROL-01 | {CODE} | {Role name} | BP-001, BP-003 |
| ROL-02 | {CODE} | {Role name} | BP-002, BP-004 |

Assignment to processes:

| BP | Owner | Participants |
|----|-------|-------------|
| BP-001 | ROL-01 | ROL-02, ROL-03 |
| BP-002 | ROL-02 | ROL-01 |

Questions:
1. Did I identify the roles correctly?
2. Are the process owners assigned correctly?
3. Are there roles I missed?

Rules

  • This is a preliminary role assignment --- detailed role descriptions, authorities, and responsibilities are handled by /nacl-ba-roles
  • Each BP must have exactly one owner
  • Roles are taken only from the user's description --- the agent does not add roles on its own

Transition

After user confirmation -> Phase 5


Phase 5: Graph Write & Diagram Generation (automatic)

Goal: Write all confirmed data to Neo4j and generate Mermaid diagrams from graph queries.

5.1 Write ProcessGroup nodes

For each confirmed GPR, execute:

MERGE (gpr:ProcessGroup {id: $id})
SET gpr.name = $name,
    gpr.description = $description

Example:

MERGE (gpr:ProcessGroup {id: 'GPR-01'})
SET gpr.name = 'Product Data Entry',
    gpr.description = 'Processes related to entering and maintaining product data'

5.2 Write BusinessProcess nodes and CONTAINS relationships

For each confirmed BP, execute:

MERGE (bp:BusinessProcess {id: $id})
SET bp.name = $name,
    bp.trigger = $trigger,
    bp.result = $result,
    bp.has_decomposition = $hasDecomposition,
    bp.automation_level = $automationLevel
WITH bp
MATCH (gpr:ProcessGroup {id: $gprId})
MERGE (gpr)-[:CONTAINS]->(bp)

Properties on BusinessProcess: | Property | Type | Description | |---|---|---| | id | String | BP-NNN | | name | String | Verbal noun + object | | trigger | String | Initiating event | | result | String | Resulting event | | has_decomposition | Boolean | Whether BP needs detailed workflow | | automation_level | String | "manual", "partial", or "full" (default: "manual") |

5.3 Write BusinessRole nodes and role-process relationships

For each confirmed role:

MERGE (r:BusinessRole {id: $id})
SET r.full_name = $fullName,
    r.abbreviation = $abbreviation

For each owner assignment:

MATCH (r:BusinessRole {id: $roleId})
MATCH (bp:BusinessProcess {id: $bpId})
MERGE (r)-[:OWNS]->(bp)

For each participant assignment:

MATCH (r:BusinessRole {id: $roleId})
MATCH (bp:BusinessProcess {id: $bpId})
MERGE (r)-[:PARTICIPATES_IN]->(bp)

5.4 Write inter-process relationships

For each sequential link:

MATCH (a:BusinessProcess {id: $fromId})
MATCH (b:BusinessProcess {id: $toId})
MERGE (a)-[:TRIGGERS]->(b)

For each subprocess link:

MATCH (parent:BusinessProcess {id: $parentId})
MATCH (sub:BusinessProcess {id: $subId})
MERGE (parent)-[:CALLS_SUB]->(sub)

5.5 Generate Mermaid diagrams from graph queries

After all writes, query the graph to generate diagrams. For each ProcessGroup, run the ba_process_map query:

MATCH (gpr:ProcessGroup {id: $gprId})-[:CONTAINS]->(bp:BusinessProcess)
OPTIONAL MATCH (bp)-[:TRIGGERS]->(triggered:BusinessProcess)
OPTIONAL MATCH (bp)-[:CALLS_SUB]->(sub:BusinessProcess)
OPTIONAL MATCH (bp) BP001
    BP001 --> R_BP001
    R_BP001 --> BP002
    T_BP002 --> BP002
    BP002 --> R_BP002

    %% Role assignments (dashed)
    ROLE_01 -.- BP001

    classDef trigger fill:#ff6b6b,stroke:#c0392b,color:#fff
    classDef bpBlock fill:#ffd93d,stroke:#f39c12,color:#333
    classDef decision fill:#2ecc71,stroke:#27ae60,color:#fff
    classDef role fill:#ecf0f1,stroke:#95a5a6,color:#333

5.6 Generate summary table from graph

Query all processes using ba_all_processes:

MATCH (gpr:ProcessGroup)-[:CONTAINS]->(bp:BusinessProcess)
OPTIONAL MATCH (bp)(bp)"                           # group-process edges
  - "MERGE (a)-[:TRIGGERS]->(b)"                              # sequential process links
  - "MERGE (parent)-[:CALLS_SUB]->(sub)"                      # subprocess decomposition
  - "MERGE (r)-[:OWNS]->(bp)"                                 # role owns process
  - "MERGE (r)-[:PARTICIPATES_IN]->(bp)"                      # role participates in process

No file writes

This skill does NOT create files in docs/. All data is stored in Neo4j. Mermaid diagrams are generated on-the-fly from graph queries and displayed inline.


Completion

Mode full

After Phase 5:

  1. Verify all nodes and relationships are written by running ba_process_map query
  2. Suggest next st

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.