Why Use This
This skill provides specialized capabilities for aiskillstore's codebase.
Use Cases
- Developing new features in the aiskillstore repository
- Refactoring existing code to follow aiskillstore standards
- Understanding and working with aiskillstore's codebase structure
Install Guide
2 steps - 1
- 2
Install inside Ananke
Click Install Skill, paste the link below, then press Install.
https://github.com/aiskillstore/marketplace/tree/main/skills/89jobrien/nathan-standards
Skill Snapshot
Auto scan of skill assets. Informational only.
Valid SKILL.md
Checks against SKILL.md specification
Source & Community
Updated At Jan 19, 2026, 04:39 AM
Skill Stats
SKILL.md 189 Lines
Total Files 3
Total Size 4.8 KB
License NOASSERTION
---
name: nathan-standards
description: Development standards for the Nathan n8n-Jira agent automation system.
Covers n8n workflows, Python patterns, and project conventions.
author: Joseph OBrien
status: unpublished
updated: '2025-12-23'
version: 1.0.1
tag: skill
type: skill
---
# 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:
```text
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:
```text
Webhook --> Validate Secret --> Operation --> Respond to Webhook
| | |
v v v
Unauthorized Error Response Success Response
Response (401) (500) (200)
```
### Required Node Pattern
```json
{
"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:
```json
{ "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 |
|-------|---------|
| `.map(x => "${x}")` | `.map(x => '"' + x + '"')` |
| `.join('\n')` | `.join('\\n')` |
| `.replaceAll('\n', ' ')` | `.replaceAll('\\n', ' ')` |
## Python Standards
For detailed patterns, load `references/python-patterns.md`.
### Module Structure
```text
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
```python
# 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
```yaml
# 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:
1. `/shape-spec` - Initialize and shape specification
2. `/write-spec` - Write detailed spec document
3. `/create-tasks` - Generate task list from spec
4. `/orchestrate-tasks` - Delegate to subagents
Specs live in `agent-os/specs/[spec-name]/` with:
- `spec.md` - Feature specification
- `tasks.md` - Implementation tasks with checkboxes
- `orchestration.yml` - Subagent delegation config
## Quick Reference
### Common Commands
```bash
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 |
|----------|---------|
| `N8N_WEBHOOK_SECRET` | Shared secret for webhook auth |
| `N8N_API_KEY` | n8n Public API key |
| `JIRA_DOMAIN` | Jira Cloud domain |
| `JIRA_EMAIL` | Jira account email |
| `JIRA_API_TOKEN` | Jira API token |
### File Naming Conventions
| Type | Convention | Example |
|------|------------|---------|
| Workflow JSON | `kebab-case.json` | `jira-get-ticket.json` |
| Python modules | `snake_case.py` | `n8n_workflow_registry.py` |
| Test files | `test_*.py` | `test_parser.py` |
| Registry | `registry.yaml` | per workflow category |