@the-agenticflow/openflows 0.1.3 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +60 -0
- package/README.md +156 -113
- package/bin/LICENSE +21 -0
- package/bin/README.md +535 -0
- package/bin/agentflow-bin +0 -0
- package/bin/agentflow-dashboard-bin +0 -0
- package/bin/agentflow-doctor-bin +0 -0
- package/bin/agentflow-setup-bin +0 -0
- package/bin/openflows.js +285 -3
- package/bin/orchestration/agent/agents/forge.agent.md +110 -0
- package/bin/orchestration/agent/agents/lore.agent.md +27 -0
- package/bin/orchestration/agent/agents/nexus.agent.md +201 -0
- package/bin/orchestration/agent/agents/sentinel.agent.md +96 -0
- package/bin/orchestration/agent/agents/vessel.agent.md +38 -0
- package/bin/orchestration/agent/registry.json +10 -0
- package/bin/orchestration/agent/standards/CODING.md +22 -0
- package/bin/orchestration/agent/standards/REVIEW.md +15 -0
- package/bin/orchestration/agent/standards/SECURITY.md +72 -0
- package/bin/orchestration/plugin/commands/assign.md +45 -0
- package/bin/orchestration/plugin/commands/check-ci.md +26 -0
- package/bin/orchestration/plugin/commands/document-pr.md +32 -0
- package/bin/orchestration/plugin/commands/gate-approve.md +39 -0
- package/bin/orchestration/plugin/commands/handoff.md +75 -0
- package/bin/orchestration/plugin/commands/merge.md +47 -0
- package/bin/orchestration/plugin/commands/plan.md +66 -0
- package/bin/orchestration/plugin/commands/segment-done.md +50 -0
- package/bin/orchestration/plugin/commands/status-check.md +28 -0
- package/bin/orchestration/plugin/commands/status.md +94 -0
- package/bin/orchestration/plugin/commands/update-changelog.md +37 -0
- package/bin/orchestration/plugin/hooks/forge/post_write_lint.sh +76 -0
- package/bin/orchestration/plugin/hooks/forge/pre_bash_guard.sh +81 -0
- package/bin/orchestration/plugin/hooks/forge/pre_compact_handoff.sh +28 -0
- package/bin/orchestration/plugin/hooks/forge/pre_write_check.sh +77 -0
- package/bin/orchestration/plugin/hooks/forge/session_start.sh +59 -0
- package/bin/orchestration/plugin/hooks/forge/stop_require_artifact.sh +75 -0
- package/bin/orchestration/plugin/hooks/lore/session-start.sh +13 -0
- package/bin/orchestration/plugin/hooks/nexus/init-session.sh +23 -0
- package/bin/orchestration/plugin/hooks/nexus/log-decision.sh +10 -0
- package/bin/orchestration/plugin/hooks/sentinel/post_write_validate.sh +59 -0
- package/bin/orchestration/plugin/hooks/sentinel/pre_bash_readonly_guard.sh +107 -0
- package/bin/orchestration/plugin/hooks/sentinel/session_start.sh +74 -0
- package/bin/orchestration/plugin/hooks/sentinel/stop_require_eval.sh +57 -0
- package/bin/orchestration/plugin/hooks/vessel/log-merge-status.sh +7 -0
- package/bin/orchestration/plugin/hooks/vessel/session-start.sh +14 -0
- package/bin/orchestration/plugin/mcp/mcp.json.template +26 -0
- package/bin/orchestration/plugin/plugin.json +66 -0
- package/bin/orchestration/plugin/skills/forge-algorithmic-art.md +24 -0
- package/bin/orchestration/plugin/skills/forge-canvas-design.md +25 -0
- package/bin/orchestration/plugin/skills/forge-coding.md +161 -0
- package/bin/orchestration/plugin/skills/forge-frontend-design.md +30 -0
- package/bin/orchestration/plugin/skills/forge-mcp-builder.md +37 -0
- package/bin/orchestration/plugin/skills/forge-planning.md +102 -0
- package/bin/orchestration/plugin/skills/forge-skill-creator.md +25 -0
- package/bin/orchestration/plugin/skills/forge-web-artifacts-builder.md +29 -0
- package/bin/orchestration/plugin/skills/lore-brand-guidelines.md +33 -0
- package/bin/orchestration/plugin/skills/lore-changelog.md +69 -0
- package/bin/orchestration/plugin/skills/lore-doc-coauthoring.md +33 -0
- package/bin/orchestration/plugin/skills/lore-documentation.md +57 -0
- package/bin/orchestration/plugin/skills/lore-docx.md +20 -0
- package/bin/orchestration/plugin/skills/lore-pdf.md +20 -0
- package/bin/orchestration/plugin/skills/lore-pptx.md +23 -0
- package/bin/orchestration/plugin/skills/lore-theme-factory.md +20 -0
- package/bin/orchestration/plugin/skills/lore-xlsx.md +20 -0
- package/bin/orchestration/plugin/skills/nexus-doc-coauthoring.md +21 -0
- package/bin/orchestration/plugin/skills/nexus-internal-comms.md +28 -0
- package/bin/orchestration/plugin/skills/nexus-orchestration.md +63 -0
- package/bin/orchestration/plugin/skills/nexus-skill-creator.md +15 -0
- package/bin/orchestration/plugin/skills/nexus-slack-gif-creator.md +21 -0
- package/bin/orchestration/plugin/skills/nexus-triage.md +56 -0
- package/bin/orchestration/plugin/skills/nexus-xlsx.md +20 -0
- package/bin/orchestration/plugin/skills/sentinel-algorithmic-art.md +20 -0
- package/bin/orchestration/plugin/skills/sentinel-criteria.md +115 -0
- package/bin/orchestration/plugin/skills/sentinel-frontend-design.md +20 -0
- package/bin/orchestration/plugin/skills/sentinel-review.md +124 -0
- package/bin/orchestration/plugin/skills/sentinel-web-artifacts-builder.md +20 -0
- package/bin/orchestration/plugin/skills/sentinel-webapp-testing.md +34 -0
- package/bin/orchestration/plugin/skills/shared-claude-api.md +25 -0
- package/bin/orchestration/plugin/skills/vessel-ci-gate.md +68 -0
- package/bin/orchestration/plugin/skills/vessel-internal-comms.md +20 -0
- package/bin/orchestration/plugin/skills/vessel-mcp-builder.md +21 -0
- package/bin/orchestration/plugin/skills/vessel-merge-protocol.md +113 -0
- package/bin/orchestration/plugin/skills/vessel-pdf.md +20 -0
- package/bin/orchestration/plugin/skills/vessel-webapp-testing.md +34 -0
- package/package.json +8 -3
- package/scripts/install.js +162 -9
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# SENTINEL Pre-Bash Guard Hook
|
|
3
|
+
# Enforces read-only mode - SENTINEL cannot modify source files
|
|
4
|
+
#
|
|
5
|
+
# Environment:
|
|
6
|
+
# SPRINTLESS_WORKTREE - the worktree path (source code)
|
|
7
|
+
# SPRINTLESS_SHARED - the shared directory (allowed writes)
|
|
8
|
+
# CLAUDE_BASH_COMMAND - the command about to run (injected by Claude Code)
|
|
9
|
+
|
|
10
|
+
WORKTREE="${SPRINTLESS_WORKTREE:-}"
|
|
11
|
+
SHARED="${SPRINTLESS_SHARED:-}"
|
|
12
|
+
CMD="${CLAUDE_BASH_COMMAND:-}"
|
|
13
|
+
|
|
14
|
+
# If no command, allow
|
|
15
|
+
if [ -z "$CMD" ]; then
|
|
16
|
+
exit 0
|
|
17
|
+
fi
|
|
18
|
+
|
|
19
|
+
# Blocked commands - SENTINEL cannot use these at all
|
|
20
|
+
BLOCKED_PATTERNS=(
|
|
21
|
+
"git "
|
|
22
|
+
"git"
|
|
23
|
+
"rm "
|
|
24
|
+
"rm"
|
|
25
|
+
"sudo "
|
|
26
|
+
"npm install"
|
|
27
|
+
"pip install"
|
|
28
|
+
"cargo install"
|
|
29
|
+
"mv "
|
|
30
|
+
"cp "
|
|
31
|
+
"chmod"
|
|
32
|
+
"chown"
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
for pattern in "${BLOCKED_PATTERNS[@]}"; do
|
|
36
|
+
if [[ "$CMD" == *"$pattern"* ]]; then
|
|
37
|
+
echo "=============================================="
|
|
38
|
+
echo " BLOCKED: Command not allowed for SENTINEL"
|
|
39
|
+
echo "=============================================="
|
|
40
|
+
echo ""
|
|
41
|
+
echo "Command: ${CMD}"
|
|
42
|
+
echo ""
|
|
43
|
+
echo "SENTINEL is read-only. You cannot:"
|
|
44
|
+
echo " - Use git commands"
|
|
45
|
+
echo " - Delete files (rm)"
|
|
46
|
+
echo " - Move or copy files"
|
|
47
|
+
echo " - Install packages"
|
|
48
|
+
echo " - Modify permissions"
|
|
49
|
+
echo ""
|
|
50
|
+
echo "You CAN:"
|
|
51
|
+
echo " - Read files (cat, head, tail, less)"
|
|
52
|
+
echo " - Run tests and linters"
|
|
53
|
+
echo " - Search code (grep, find)"
|
|
54
|
+
echo " - Write to shared/ directory"
|
|
55
|
+
echo ""
|
|
56
|
+
exit 2
|
|
57
|
+
fi
|
|
58
|
+
done
|
|
59
|
+
|
|
60
|
+
# Check if command writes to source tree
|
|
61
|
+
if [ -n "$WORKTREE" ]; then
|
|
62
|
+
# Patterns that write files
|
|
63
|
+
WRITE_PATTERNS=(
|
|
64
|
+
" > "
|
|
65
|
+
" >> "
|
|
66
|
+
" 2> "
|
|
67
|
+
" | tee "
|
|
68
|
+
"sed -i"
|
|
69
|
+
"awk -i"
|
|
70
|
+
"truncate"
|
|
71
|
+
"dd if="
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
for pattern in "${WRITE_PATTERNS[@]}"; do
|
|
75
|
+
if [[ "$CMD" == *"$pattern"* ]]; then
|
|
76
|
+
# Check if the redirect target is in worktree
|
|
77
|
+
# Extract the file path after the redirect
|
|
78
|
+
REDIRECT_FILE=$(echo "$CMD" | grep -oP '(?<=[<>])\s*\S+' | head -1 | tr -d ' ')
|
|
79
|
+
|
|
80
|
+
if [ -n "$REDIRECT_FILE" ]; then
|
|
81
|
+
# Get absolute path
|
|
82
|
+
if [[ "$REDIRECT_FILE" != /* ]]; then
|
|
83
|
+
REDIRECT_FILE="${WORKTREE}/${REDIRECT_FILE}"
|
|
84
|
+
fi
|
|
85
|
+
|
|
86
|
+
# Check if it's inside worktree but NOT in shared
|
|
87
|
+
if [[ "$REDIRECT_FILE" == "$WORKTREE"* ]] && [[ "$REDIRECT_FILE" != *"$SHARED"* ]]; then
|
|
88
|
+
echo "=============================================="
|
|
89
|
+
echo " BLOCKED: Cannot write to source tree"
|
|
90
|
+
echo "=============================================="
|
|
91
|
+
echo ""
|
|
92
|
+
echo "Command: ${CMD}"
|
|
93
|
+
echo ""
|
|
94
|
+
echo "SENTINEL can only write to: ${SHARED}"
|
|
95
|
+
echo "Attempted write to: ${REDIRECT_FILE}"
|
|
96
|
+
echo ""
|
|
97
|
+
echo "All your outputs (eval files, reviews) go in shared/."
|
|
98
|
+
echo ""
|
|
99
|
+
exit 2
|
|
100
|
+
fi
|
|
101
|
+
fi
|
|
102
|
+
fi
|
|
103
|
+
done
|
|
104
|
+
fi
|
|
105
|
+
|
|
106
|
+
# Allow the command
|
|
107
|
+
exit 0
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# SENTINEL Session Start Hook
|
|
3
|
+
# Determines segment mode and reads the correct input artifacts
|
|
4
|
+
#
|
|
5
|
+
# Environment:
|
|
6
|
+
# SPRINTLESS_SHARED - the shared directory
|
|
7
|
+
# SPRINTLESS_SEGMENT - segment number (set by harness)
|
|
8
|
+
|
|
9
|
+
SHARED="${SPRINTLESS_SHARED}"
|
|
10
|
+
SEGMENT="${SPRINTLESS_SEGMENT:-1}"
|
|
11
|
+
|
|
12
|
+
echo "=============================================="
|
|
13
|
+
echo " SENTINEL SESSION STARTED"
|
|
14
|
+
echo "=============================================="
|
|
15
|
+
echo ""
|
|
16
|
+
echo "Segment: ${SEGMENT}"
|
|
17
|
+
echo ""
|
|
18
|
+
|
|
19
|
+
# Determine mode based on what files exist
|
|
20
|
+
if [ "${SEGMENT}" = "final" ] || [ -f "${SHARED}/DONE.md" ]; then
|
|
21
|
+
echo "MODE: FINAL_REVIEW"
|
|
22
|
+
echo ""
|
|
23
|
+
echo "Reading DONE.md to verify completion..."
|
|
24
|
+
if [ -f "${SHARED}/DONE.md" ]; then
|
|
25
|
+
echo "--- DONE.md ---"
|
|
26
|
+
head -50 "${SHARED}/DONE.md"
|
|
27
|
+
echo "..."
|
|
28
|
+
else
|
|
29
|
+
echo "ERROR: DONE.md not found. Cannot perform final review."
|
|
30
|
+
exit 1
|
|
31
|
+
fi
|
|
32
|
+
elif [ -f "${SHARED}/PLAN.md" ]; then
|
|
33
|
+
echo "MODE: SEGMENT_REVIEW"
|
|
34
|
+
echo ""
|
|
35
|
+
echo "Reading PLAN.md and segment inputs..."
|
|
36
|
+
echo ""
|
|
37
|
+
echo "--- PLAN.md (first 30 lines) ---"
|
|
38
|
+
head -30 "${SHARED}/PLAN.md"
|
|
39
|
+
echo "..."
|
|
40
|
+
echo ""
|
|
41
|
+
if [ -f "${SHARED}/WORKLOG.md" ]; then
|
|
42
|
+
echo "--- WORKLOG.md (last 20 lines) ---"
|
|
43
|
+
tail -20 "${SHARED}/WORKLOG.md"
|
|
44
|
+
echo ""
|
|
45
|
+
fi
|
|
46
|
+
else
|
|
47
|
+
echo "MODE: UNKNOWN - No PLAN.md found"
|
|
48
|
+
echo "This may be an initial setup. Check TICKET.md and TASK.md."
|
|
49
|
+
if [ -f "${SHARED}/TICKET.md" ]; then
|
|
50
|
+
echo ""
|
|
51
|
+
echo "--- TICKET.md ---"
|
|
52
|
+
cat "${SHARED}/TICKET.md"
|
|
53
|
+
fi
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
echo ""
|
|
57
|
+
echo "=============================================="
|
|
58
|
+
echo " YOUR MISSION"
|
|
59
|
+
echo "=============================================="
|
|
60
|
+
echo ""
|
|
61
|
+
echo "1. Read the segment changes from WORKLOG.md"
|
|
62
|
+
echo "2. Run tests and linters to verify quality"
|
|
63
|
+
echo "3. Write your evaluation to segment-${SEGMENT}-eval.md"
|
|
64
|
+
echo ""
|
|
65
|
+
echo "Evaluation must include:"
|
|
66
|
+
echo " - ## Summary"
|
|
67
|
+
echo " - ## Tests Run"
|
|
68
|
+
echo " - ## Issues Found (if any)"
|
|
69
|
+
echo " - ## Verdict (APPROVED / NEEDS_WORK)"
|
|
70
|
+
echo ""
|
|
71
|
+
echo "If NEEDS_WORK, list specific issues that must be fixed."
|
|
72
|
+
echo ""
|
|
73
|
+
|
|
74
|
+
exit 0
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# SENTINEL Stop Hook
|
|
3
|
+
# Ensures SENTINEL writes an eval file before exiting
|
|
4
|
+
#
|
|
5
|
+
# Environment:
|
|
6
|
+
# SPRINTLESS_SHARED - the shared directory
|
|
7
|
+
# SPRINTLESS_SEGMENT - segment number (set by harness)
|
|
8
|
+
|
|
9
|
+
SHARED="${SPRINTLESS_SHARED}"
|
|
10
|
+
SEGMENT="${SPRINTLESS_SEGMENT:-1}"
|
|
11
|
+
|
|
12
|
+
# Determine expected eval file
|
|
13
|
+
if [ "${SEGMENT}" = "final" ]; then
|
|
14
|
+
EVAL_FILE="${SHARED}/final-review.md"
|
|
15
|
+
else
|
|
16
|
+
EVAL_FILE="${SHARED}/segment-${SEGMENT}-eval.md"
|
|
17
|
+
fi
|
|
18
|
+
|
|
19
|
+
# Check if eval file exists
|
|
20
|
+
if [ -f "$EVAL_FILE" ]; then
|
|
21
|
+
# Validate it has a verdict
|
|
22
|
+
if grep -q "## Verdict" "$EVAL_FILE"; then
|
|
23
|
+
VERDICT=$(grep -A1 "## Verdict" "$EVAL_FILE" | tail -1 | tr -d ' ')
|
|
24
|
+
|
|
25
|
+
if [ "$VERDICT" = "APPROVED" ] || [ "$VERDICT" = "NEEDS_WORK" ]; then
|
|
26
|
+
echo "Evaluation complete: ${VERDICT}"
|
|
27
|
+
exit 0
|
|
28
|
+
else
|
|
29
|
+
echo "ERROR: Invalid verdict in ${EVAL_FILE}"
|
|
30
|
+
echo "Verdict must be APPROVED or NEEDS_WORK, got: ${VERDICT}"
|
|
31
|
+
exit 2
|
|
32
|
+
fi
|
|
33
|
+
else
|
|
34
|
+
echo "ERROR: ${EVAL_FILE} missing ## Verdict section"
|
|
35
|
+
exit 2
|
|
36
|
+
fi
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
# No eval file - block exit
|
|
40
|
+
echo "=============================================="
|
|
41
|
+
echo " BLOCKED: Cannot exit without evaluation"
|
|
42
|
+
echo "=============================================="
|
|
43
|
+
echo ""
|
|
44
|
+
echo "You must write your evaluation to:"
|
|
45
|
+
echo " ${EVAL_FILE}"
|
|
46
|
+
echo ""
|
|
47
|
+
echo "Required sections:"
|
|
48
|
+
echo " - ## Summary"
|
|
49
|
+
echo " - ## Tests Run"
|
|
50
|
+
echo " - ## Issues Found (if any)"
|
|
51
|
+
echo " - ## Verdict (APPROVED or NEEDS_WORK)"
|
|
52
|
+
echo ""
|
|
53
|
+
echo "If NEEDS_WORK, include:"
|
|
54
|
+
echo " - ## Required Fixes (specific, actionable items)"
|
|
55
|
+
echo ""
|
|
56
|
+
|
|
57
|
+
exit 2
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# VESSEL Session Start Hook
|
|
3
|
+
# Initializes the deployer session
|
|
4
|
+
|
|
5
|
+
echo "=========================================="
|
|
6
|
+
echo "VESSEL Session Starting"
|
|
7
|
+
echo "=========================================="
|
|
8
|
+
echo ""
|
|
9
|
+
echo "Checking for open PRs from forge branches..."
|
|
10
|
+
|
|
11
|
+
# Vessel monitors open PRs and CI status
|
|
12
|
+
# This would typically query GitHub API
|
|
13
|
+
|
|
14
|
+
exit 0
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"mcpServers": {
|
|
3
|
+
"github": {
|
|
4
|
+
"command": "npx",
|
|
5
|
+
"args": ["-y", "@modelcontextprotocol/server-github"],
|
|
6
|
+
"env": {
|
|
7
|
+
"GITHUB_PERSONAL_ACCESS_TOKEN": "${SPRINTLESS_GITHUB_TOKEN}"
|
|
8
|
+
}
|
|
9
|
+
},
|
|
10
|
+
"filesystem": {
|
|
11
|
+
"command": "npx",
|
|
12
|
+
"args": [
|
|
13
|
+
"-y",
|
|
14
|
+
"@modelcontextprotocol/server-filesystem",
|
|
15
|
+
"${SPRINTLESS_WORKTREE}"
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
"shell": {
|
|
19
|
+
"command": "shell-mcp-server",
|
|
20
|
+
"args": [
|
|
21
|
+
"--allowlist",
|
|
22
|
+
"orchestration/agent/tooling/run-tests.sh,cargo clippy,cargo test,npx eslint,npx jest,ruff check"
|
|
23
|
+
]
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "orchestration",
|
|
3
|
+
"version": "3.0.0",
|
|
4
|
+
"description": "Autonomous agent pair tooling for AgentFlow FORGE-SENTINEL architecture",
|
|
5
|
+
"skills": {
|
|
6
|
+
"forge": [
|
|
7
|
+
"skills/forge-coding.md",
|
|
8
|
+
"skills/forge-planning.md",
|
|
9
|
+
"skills/forge-frontend-design.md",
|
|
10
|
+
"skills/forge-mcp-builder.md",
|
|
11
|
+
"skills/forge-skill-creator.md",
|
|
12
|
+
"skills/forge-canvas-design.md",
|
|
13
|
+
"skills/forge-web-artifacts-builder.md",
|
|
14
|
+
"skills/forge-algorithmic-art.md",
|
|
15
|
+
"skills/shared-claude-api.md"
|
|
16
|
+
],
|
|
17
|
+
"sentinel": [
|
|
18
|
+
"skills/sentinel-review.md",
|
|
19
|
+
"skills/sentinel-criteria.md",
|
|
20
|
+
"skills/sentinel-webapp-testing.md",
|
|
21
|
+
"skills/sentinel-frontend-design.md",
|
|
22
|
+
"skills/sentinel-web-artifacts-builder.md",
|
|
23
|
+
"skills/sentinel-algorithmic-art.md",
|
|
24
|
+
"skills/shared-claude-api.md"
|
|
25
|
+
],
|
|
26
|
+
"nexus": [
|
|
27
|
+
"skills/nexus-orchestration.md",
|
|
28
|
+
"skills/nexus-triage.md",
|
|
29
|
+
"skills/nexus-internal-comms.md",
|
|
30
|
+
"skills/nexus-doc-coauthoring.md",
|
|
31
|
+
"skills/nexus-skill-creator.md",
|
|
32
|
+
"skills/nexus-xlsx.md",
|
|
33
|
+
"skills/nexus-slack-gif-creator.md",
|
|
34
|
+
"skills/shared-claude-api.md"
|
|
35
|
+
],
|
|
36
|
+
"vessel": [
|
|
37
|
+
"skills/vessel-ci-gate.md",
|
|
38
|
+
"skills/vessel-merge-protocol.md",
|
|
39
|
+
"skills/vessel-webapp-testing.md",
|
|
40
|
+
"skills/vessel-internal-comms.md",
|
|
41
|
+
"skills/vessel-mcp-builder.md",
|
|
42
|
+
"skills/vessel-pdf.md",
|
|
43
|
+
"skills/shared-claude-api.md"
|
|
44
|
+
],
|
|
45
|
+
"lore": [
|
|
46
|
+
"skills/lore-documentation.md",
|
|
47
|
+
"skills/lore-changelog.md",
|
|
48
|
+
"skills/lore-doc-coauthoring.md",
|
|
49
|
+
"skills/lore-brand-guidelines.md",
|
|
50
|
+
"skills/lore-theme-factory.md",
|
|
51
|
+
"skills/lore-docx.md",
|
|
52
|
+
"skills/lore-pptx.md",
|
|
53
|
+
"skills/lore-xlsx.md",
|
|
54
|
+
"skills/lore-pdf.md",
|
|
55
|
+
"skills/shared-claude-api.md"
|
|
56
|
+
]
|
|
57
|
+
},
|
|
58
|
+
"hooks": {
|
|
59
|
+
"forge": "hooks/forge/",
|
|
60
|
+
"sentinel": "hooks/sentinel/",
|
|
61
|
+
"nexus": "hooks/nexus/",
|
|
62
|
+
"vessel": "hooks/vessel/",
|
|
63
|
+
"lore": "hooks/lore/"
|
|
64
|
+
},
|
|
65
|
+
"commands": "commands/"
|
|
66
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: algorithmic-art
|
|
3
|
+
description: Create generative, code-based art and visualizations using P5.JS and algorithmic principles.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# FORGE Algorithmic Art Skill
|
|
7
|
+
|
|
8
|
+
Use this skill to create unique, generative visual artifacts or to visualize complex data structures algorithmically.
|
|
9
|
+
|
|
10
|
+
## Algorithmic Philosophy
|
|
11
|
+
|
|
12
|
+
- **Conceptual Seed**: Start with a mathematical or natural phenomenon (e.g., "Voronoi Diagrams", "Lindenmayer Systems", "Fluid Dynamics").
|
|
13
|
+
- **Deduce Style**: Choose an aesthetic (e.g., Generative Minimalism, Digital Brutalism, Organic Complexity).
|
|
14
|
+
- **Technical Implementation**: Use P5.JS to implement the visual logic.
|
|
15
|
+
|
|
16
|
+
## Craftsmanship Requirements
|
|
17
|
+
|
|
18
|
+
- **Efficiency**: Favor procedural generation over static assets.
|
|
19
|
+
- **Interactivity**: Where appropriate, make the art responsive to user input.
|
|
20
|
+
- **Clean Code**: Structure your P5.JS scripts for readability and modularity.
|
|
21
|
+
|
|
22
|
+
## Output Format
|
|
23
|
+
|
|
24
|
+
Deliver your implementation in a self-contained HTML/JS artifact.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: canvas-design
|
|
3
|
+
description: Visual philosophy and design principles for creating impactful visual content.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# FORGE Canvas Design Skill
|
|
7
|
+
|
|
8
|
+
Use this skill to establish a strong visual philosophy before creating visual artifacts, posters, or UI layouts.
|
|
9
|
+
|
|
10
|
+
## Visual Philosophy Creation
|
|
11
|
+
|
|
12
|
+
- **Deduce the Conceptual Seed**: What is the core idea? (e.g., "The Precision of a Swiss Watch", "The Organic Flow of Water").
|
|
13
|
+
- **Establish Principles**: define constraints (e.g., "Only 3 colors", "Strict Grid", "Asymmetric Balance").
|
|
14
|
+
- **Deduce Style**: Use specific visual descriptors (e.g., Brutalist, Geometric, Soft Minimalism).
|
|
15
|
+
|
|
16
|
+
## Essential Principles
|
|
17
|
+
|
|
18
|
+
- **Contrast**: Use size, color, and weight to create impact.
|
|
19
|
+
- **Hierarchy**: Guide the viewer's eye to the most important element first.
|
|
20
|
+
- **Negative Space**: Give your design room to breathe. Don't crowd the canvas.
|
|
21
|
+
- **Intentionality**: Every element must have a purpose. If it doesn't add value, remove it.
|
|
22
|
+
|
|
23
|
+
## Execution
|
|
24
|
+
|
|
25
|
+
Once the philosophy is established, apply it consistently across all components of the artifact.
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# FORGE Coding Skill
|
|
2
|
+
|
|
3
|
+
## Your role
|
|
4
|
+
|
|
5
|
+
You are FORGE, the generator in a FORGE-SENTINEL pair.
|
|
6
|
+
Your job is to produce correct, complete, well-tested implementations.
|
|
7
|
+
You work in segments. After each segment you submit to SENTINEL.
|
|
8
|
+
Quality comes from the pair loop, not from you alone.
|
|
9
|
+
|
|
10
|
+
## Before writing any code
|
|
11
|
+
|
|
12
|
+
1. Read `TICKET.md` from `${SPRINTLESS_SHARED}/TICKET.md` - understand what you are building
|
|
13
|
+
2. Read `CONTRACT.md` from `${SPRINTLESS_SHARED}/CONTRACT.md` - this is your definition of done
|
|
14
|
+
3. Search the codebase - find existing patterns before inventing new ones
|
|
15
|
+
- Use Glob and Grep tools to find relevant files
|
|
16
|
+
- Look for similar functionality in existing code
|
|
17
|
+
|
|
18
|
+
## Coding standards
|
|
19
|
+
|
|
20
|
+
- All standards are in `orchestration/agent/standards/CODING.md` (if it exists)
|
|
21
|
+
- All architecture patterns are in `orchestration/agent/arch/patterns.md` (if it exists)
|
|
22
|
+
- API contracts are in `orchestration/agent/arch/api-contracts.md` (if it exists)
|
|
23
|
+
- **READ these before implementing. They are not optional.**
|
|
24
|
+
|
|
25
|
+
## Testing discipline
|
|
26
|
+
|
|
27
|
+
- Every new function needs a test
|
|
28
|
+
- Every changed file needs updated tests
|
|
29
|
+
- Run tests after every segment: `orchestration/agent/tooling/run-tests.sh`
|
|
30
|
+
- Do not submit a segment with failing tests
|
|
31
|
+
|
|
32
|
+
## Error handling
|
|
33
|
+
|
|
34
|
+
- Never throw raw Error - use the project's error type (e.g., `AppError` from `src/errors/`)
|
|
35
|
+
- Every async function must have explicit error handling
|
|
36
|
+
- Network calls must have timeout and retry logic
|
|
37
|
+
|
|
38
|
+
## Submitting a segment
|
|
39
|
+
|
|
40
|
+
When you believe a segment is complete:
|
|
41
|
+
|
|
42
|
+
1. Run tests - all must pass
|
|
43
|
+
2. Run linter - zero warnings
|
|
44
|
+
3. Use `/segment-done` command to commit and notify SENTINEL
|
|
45
|
+
4. Wait for `segment-N-eval.md` to appear in `${SPRINTLESS_SHARED}/`
|
|
46
|
+
|
|
47
|
+
## Handling SENTINEL feedback
|
|
48
|
+
|
|
49
|
+
If SENTINEL returns `CHANGES_REQUESTED`:
|
|
50
|
+
|
|
51
|
+
- Read the `## Specific feedback` section carefully
|
|
52
|
+
- Each item has: `file:line:problem:fix`
|
|
53
|
+
- Fix **only** the specific items listed - do not refactor beyond what's requested
|
|
54
|
+
- Re-run tests and linter
|
|
55
|
+
- Re-submit with `/segment-done`
|
|
56
|
+
|
|
57
|
+
## File locking
|
|
58
|
+
|
|
59
|
+
Before writing to any file, the `pre_write_check.sh` hook validates ownership.
|
|
60
|
+
|
|
61
|
+
- If you get `BLOCKED: File locked by pair-X`, you must:
|
|
62
|
+
1. Find an alternative implementation that avoids this file, OR
|
|
63
|
+
2. Set STATUS.json to `BLOCKED` with reason `FILE_LOCK_CONFLICT`
|
|
64
|
+
|
|
65
|
+
## Context reset
|
|
66
|
+
|
|
67
|
+
If you receive a "CONTEXT RESET REQUIRED" message:
|
|
68
|
+
|
|
69
|
+
1. Run `/handoff` command immediately
|
|
70
|
+
2. This writes `HANDOFF.md` with your current state
|
|
71
|
+
3. Exit cleanly - a fresh FORGE will continue from your handoff
|
|
72
|
+
|
|
73
|
+
## Valid STATUS.json Status Values
|
|
74
|
+
|
|
75
|
+
When writing `STATUS.json`, you MUST use one of these exact status strings.
|
|
76
|
+
Any other value will be treated as `BLOCKED` and your work will be wasted.
|
|
77
|
+
|
|
78
|
+
| Status | When to use |
|
|
79
|
+
|---|---|
|
|
80
|
+
| `PR_OPENED` | Work complete and PR created (include `pr_url`, `pr_number`, `branch`) |
|
|
81
|
+
| `COMPLETE` | All work done but PR creation deferred to harness |
|
|
82
|
+
| `BLOCKED` | Cannot proceed (include `reason` and `blockers`) |
|
|
83
|
+
| `FUEL_EXHAUSTED` | Budget/tokens exhausted |
|
|
84
|
+
| `PENDING_REVIEW` | Work paused, waiting for review |
|
|
85
|
+
| `AWAITING_SENTINEL_REVIEW` | Segment done, waiting for SENTINEL evaluation |
|
|
86
|
+
| `APPROVED_READY` | Changes requested by SENTINEL have been addressed |
|
|
87
|
+
| `SEGMENT_N_DONE` | Segment N complete (e.g. `SEGMENT_1_DONE`) |
|
|
88
|
+
|
|
89
|
+
Do NOT invent status values. If you need review use `PENDING_REVIEW`. If you need help use `BLOCKED`.
|
|
90
|
+
|
|
91
|
+
## When work is complete
|
|
92
|
+
|
|
93
|
+
When SENTINEL approves all segments and you're ready to finish:
|
|
94
|
+
|
|
95
|
+
1. **Push the branch to remote:**
|
|
96
|
+
```bash
|
|
97
|
+
git push -u origin forge-${SPRINTLESS_PAIR_ID}/${SPRINTLESS_TICKET_ID}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
NOTE: Direct `git push` is blocked. Instead, use the GitHub MCP tool:
|
|
101
|
+
- Get the current commit SHA
|
|
102
|
+
- Create a new branch reference on the remote
|
|
103
|
+
|
|
104
|
+
2. **Create a Pull Request using GitHub MCP tool:**
|
|
105
|
+
- Use `create_pull_request` from the GitHub MCP server
|
|
106
|
+
- Set title: `[T-{id}] Brief description of the change`
|
|
107
|
+
- Set body: Use the PR description from `final-review.md`
|
|
108
|
+
- MUST include `Closes #<issue_number>` to auto-close the issue on merge
|
|
109
|
+
- Extract issue number from `SPRINTLESS_TICKET_ID`: `T-004` → `Closes #4`
|
|
110
|
+
- DO NOT use `Closes: T-004` (invalid - will not close the issue)
|
|
111
|
+
- Set head: `forge-${SPRINTLESS_PAIR_ID}/${SPRINTLESS_TICKET_ID}`
|
|
112
|
+
- Set base: `main`
|
|
113
|
+
|
|
114
|
+
3. **Write STATUS.json with PR_OPENED:**
|
|
115
|
+
```json
|
|
116
|
+
{
|
|
117
|
+
"status": "PR_OPENED",
|
|
118
|
+
"pair": "${SPRINTLESS_PAIR_ID}",
|
|
119
|
+
"ticket_id": "${SPRINTLESS_TICKET_ID}",
|
|
120
|
+
"branch": "forge-${SPRINTLESS_PAIR_ID}/${SPRINTLESS_TICKET_ID}",
|
|
121
|
+
"pr_url": "https://github.com/owner/repo/pull/42",
|
|
122
|
+
"pr_number": 42,
|
|
123
|
+
"files_changed": ["list", "of", "files"],
|
|
124
|
+
"segments_completed": N,
|
|
125
|
+
"timestamp": "2025-03-24T10:00:00Z"
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
4. **Exit** - The harness will detect STATUS.json and complete the lifecycle.
|
|
130
|
+
|
|
131
|
+
## If you cannot create a PR
|
|
132
|
+
|
|
133
|
+
If you encounter issues pushing or creating a PR:
|
|
134
|
+
|
|
135
|
+
1. Write STATUS.json with `BLOCKED` status:
|
|
136
|
+
```json
|
|
137
|
+
{
|
|
138
|
+
"status": "BLOCKED",
|
|
139
|
+
"pair": "${SPRINTLESS_PAIR_ID}",
|
|
140
|
+
"ticket_id": "${SPRINTLESS_TICKET_ID}",
|
|
141
|
+
"branch": "forge-${SPRINTLESS_PAIR_ID}/${SPRINTLESS_TICKET_ID}",
|
|
142
|
+
"reason": "Could not push/create PR: <specific error>",
|
|
143
|
+
"blockers": [],
|
|
144
|
+
"files_changed": ["list", "of", "files"]
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
2. Exit - NEXUS will be alerted for human intervention.
|
|
149
|
+
|
|
150
|
+
## Branch naming
|
|
151
|
+
|
|
152
|
+
Your branch is: `forge-${SPRINTLESS_PAIR_ID}/${SPRINTLESS_TICKET_ID}`
|
|
153
|
+
|
|
154
|
+
Example: `forge-pair-1/T-42`
|
|
155
|
+
|
|
156
|
+
## Environment variables
|
|
157
|
+
|
|
158
|
+
- `SPRINTLESS_PAIR_ID` - your pair identifier (e.g., "pair-1")
|
|
159
|
+
- `SPRINTLESS_TICKET_ID` - the ticket you're working on (e.g., "T-42")
|
|
160
|
+
- `SPRINTLESS_WORKTREE` - your working directory
|
|
161
|
+
- `SPRINTLESS_SHARED` - the shared directory for FORGE-SENTINEL communication
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: frontend-design
|
|
3
|
+
description: Create distinctive, production-grade frontend interfaces with high design quality. Focuses on premium aesthetics and avoiding "AI slop".
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# FORGE Frontend Design Skill
|
|
7
|
+
|
|
8
|
+
Use this skill when tasked with building web components, pages, artifacts, or applications. Your goal is to create distinctive, production-grade frontend interfaces that avoid generic "AI slop" aesthetics.
|
|
9
|
+
|
|
10
|
+
## Design Principles
|
|
11
|
+
|
|
12
|
+
- **Commit to BOLD Aesthetics**: Pick a clear conceptual direction (e.g., minimal, maximalist, retro-futuristic, etc.) and execute it with precision.
|
|
13
|
+
- **Memorable & Polished**: What is the one thing someone will remember? Ensure meticulous refinement in every detail.
|
|
14
|
+
- **Technical Excellence**: Framework compatibility, performance, and accessibility are baseline requirements.
|
|
15
|
+
|
|
16
|
+
## Guidelines
|
|
17
|
+
|
|
18
|
+
- **Typography**: Pair a distinctive display font with a refined body font. Avoid Inter, Roboto, and Arial.
|
|
19
|
+
- **Color & Theme**: Use CSS variables for a cohesive theme. Choose accents that pop.
|
|
20
|
+
- **Motion**: Orchestrate high-impact animations. Use CSS transitions or library-specific motion (e.g., Framer Motion for React).
|
|
21
|
+
- **Composition**: Break the grid. Use asymmetry, negative space, and overlapping elements for depth.
|
|
22
|
+
- **Background Content**: Use meshes, noise, geometric patterns, or layered transparencies to create atmosphere.
|
|
23
|
+
|
|
24
|
+
## What to Avoid
|
|
25
|
+
|
|
26
|
+
- Purple gradients on white backgrounds.
|
|
27
|
+
-系統 default font stacks.
|
|
28
|
+
- Predictive layouts and cookie-cutter component patterns.
|
|
29
|
+
|
|
30
|
+
MATCH implementation complexity to the aesthetic vision. Elegance comes from executing the vision well.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mcp-builder
|
|
3
|
+
description: Comprehensive guide for developing and extending Model Context Protocol (MCP) servers.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# FORGE MCP Builder Skill
|
|
7
|
+
|
|
8
|
+
Use this skill when you need to build or extend MCP servers to provide new capabilities to the AgentFlow system.
|
|
9
|
+
|
|
10
|
+
## High-Level Workflow
|
|
11
|
+
|
|
12
|
+
### Phase 1: Research and Planning
|
|
13
|
+
|
|
14
|
+
- Understand the external system or data source you are integrating.
|
|
15
|
+
- Define the necessary tools and resources.
|
|
16
|
+
- Choose the appropriate language/SDK (Rust, Python, Node.js).
|
|
17
|
+
|
|
18
|
+
### Phase 2: Implementation
|
|
19
|
+
|
|
20
|
+
- Implement the core protocol (Tools, Resources, Prompts).
|
|
21
|
+
- Follow the official [MCP Specification](https://modelcontextprotocol.io/).
|
|
22
|
+
- Ensure robust error handling and type safety.
|
|
23
|
+
|
|
24
|
+
### Phase 3: Review and Test
|
|
25
|
+
|
|
26
|
+
- Verify transport layers (Stdio, HTTP/SSE).
|
|
27
|
+
- Test tool execution and resource retrieval.
|
|
28
|
+
- Check for protocol compliance.
|
|
29
|
+
|
|
30
|
+
### Phase 4: Integration
|
|
31
|
+
|
|
32
|
+
- Create evaluations and documentation.
|
|
33
|
+
- Add components to the `.claude-plugin/plugin.json` or `.mcp.json`.
|
|
34
|
+
|
|
35
|
+
## Documentation Reference
|
|
36
|
+
|
|
37
|
+
Consult the official SDK documentation for the language you choose. Prioritize security and minimal permission sets when exposing system capabilities via tools.
|