Marketplace nathan-standards
Development standards for the Nathan n8n-Jira agent automation system.
install
source · Clone the upstream repo
git clone https://github.com/aiskillstore/marketplace
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/aiskillstore/marketplace "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/89jobrien/nathan-standards" ~/.claude/skills/aiskillstore-marketplace-nathan-standards && rm -rf "$T"
manifest:
skills/89jobrien/nathan-standards/SKILL.mdsource content
Nathan Development Standards
Standards and patterns for developing within the Nathan project - an n8n-Jira agent automation system.
When to Use
Invoke this skill when:
- Creating or modifying n8n workflow JSON files
- Writing Python code for the Nathan helpers or templating modules
- Designing webhook command contracts
- Building workflow registry configurations
- Implementing spec-driven features via agent-os
Project Architecture
Nathan follows a layered architecture:
External Service (Jira) <-- n8n Workflows <-- Python Agent Service (credentials) (webhook calls)
Core Principle: n8n owns all external credentials. Python services call n8n webhooks with shared secret authentication.
n8n Workflow Standards
For detailed workflow patterns, load
references/n8n-workflow-patterns.md.
Standard Workflow Structure
Every webhook workflow must follow this pattern:
Webhook --> Validate Secret --> Operation --> Respond to Webhook | | | v v v Unauthorized Error Response Success Response Response (401) (500) (200)
Required Node Pattern
{ "id": "validate-secret", "name": "Validate Secret", "type": "n8n-nodes-base.if", "typeVersion": 2, "parameters": { "conditions": { "conditions": [{ "leftValue": "={{ $json.headers['x-n8n-secret'] }}", "rightValue": "={{ $env.N8N_WEBHOOK_SECRET }}", "operator": { "type": "string", "operation": "equals" } }] } } }
Response Format
All responses must follow this shape:
{ "success": true, "data": {...}, "status_code": 200, "error": null } { "success": false, "data": {}, "status_code": 500, "error": "message" }
JQL Expression Escaping
In n8n expressions within JSON, escape properly:
| Wrong | Correct |
|---|---|
| |
| |
| |
Python Standards
For detailed patterns, load
references/python-patterns.md.
Module Structure
nathan/ helpers/ # Shared utilities (workflow registry, etc.) workflows/ # n8n workflow JSON + registry.yaml per category templating/ # YAML-to-JSON template engine scripts/ # Standalone runnable scripts
Code Style
# Required imports pattern from __future__ import annotations from typing import Any from pathlib import Path import logging logger = logging.getLogger(__name__) # Type hints required, use T | None not Optional[T] async def trigger_workflow(url: str, params: dict[str, Any]) -> dict[str, Any]: ...
Registry Pattern
# registry.yaml version: "1.0.0" description: "Registry description" commands: command_name: endpoint: /webhook/endpoint-path method: POST required_params: - param1 optional_params: - param2 description: What this command does example: param1: "value"
Spec-Driven Development
Use agent-os commands for feature development:
- Initialize and shape specification/shape-spec
- Write detailed spec document/write-spec
- Generate task list from spec/create-tasks
- Delegate to subagents/orchestrate-tasks
Specs live in
agent-os/specs/[spec-name]/ with:
- Feature specificationspec.md
- Implementation tasks with checkboxestasks.md
- Subagent delegation configorchestration.yml
Quick Reference
Common Commands
uv sync # Install dependencies uv run pytest # Run tests uv run pytest path/to/test.py -v # Single test file uvx ruff check . # Lint uvx ruff format . # Format docker compose -f docker-compose.n8n.yml up -d # Start n8n
Environment Variables
| Variable | Purpose |
|---|---|
| Shared secret for webhook auth |
| n8n Public API key |
| Jira Cloud domain |
| Jira account email |
| Jira API token |
File Naming Conventions
| Type | Convention | Example |
|---|---|---|
| Workflow JSON | | |
| Python modules | | |
| Test files | | |
| Registry | | per workflow category |