Skip to content

Commit 67117ab

Browse files
authored
Merge pull request #1 from m0n0x41d/2.2.0_release
2.2.0 release
2 parents 848e1c3 + a4db8d4 commit 67117ab

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+15027
-106
lines changed

.github/workflows/build-check.yml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
name: Build Check
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
branches: [main]
8+
9+
jobs:
10+
check-dist-sync:
11+
runs-on: ubuntu-latest
12+
13+
steps:
14+
- name: Checkout
15+
uses: actions/checkout@v4
16+
17+
- name: Run build
18+
run: ./build.sh
19+
20+
- name: Check for uncommitted changes in dist/
21+
run: |
22+
if [[ -n $(git status dist/ --porcelain) ]]; then
23+
echo "::error::dist/ is out of sync with src/commands/"
24+
echo ""
25+
echo "The following files differ after running build.sh:"
26+
git status dist/ --porcelain
27+
echo ""
28+
echo "Please run ./build.sh and commit the changes to dist/"
29+
exit 1
30+
fi
31+
echo "dist/ is in sync with src/commands/"

CHANGELOG.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,49 @@ All notable changes to Crucible Code will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [2.2.0] - 2025-12-14
9+
10+
### Added
11+
12+
#### Multi-Platform Support
13+
14+
- **Four AI coding tools supported**: Claude Code, Cursor, Gemini CLI, Codex CLI
15+
- **Adapter-based build system**: Source commands in `src/commands/`, platform-specific outputs in `dist/`
16+
- **Platform adapters**: Transform markdown to platform-specific formats (TOML for Gemini, etc.)
17+
18+
#### Interactive TUI Installer
19+
20+
- **`curl | bash` one-liner install**: `curl -fsSL https://...install.sh | bash -s -- -g`
21+
- **Interactive platform selection**: Choose which AI tools to install commands for
22+
- **Global and per-project modes**: `-g` flag for global install, default for project-local
23+
- **Vim-style navigation**: Arrow keys and j/k for selection
24+
- **Bash 3.x compatibility**: Works on macOS default shell (no associative arrays)
25+
26+
#### Uninstall Functionality
27+
28+
- **`--uninstall` flag**: Remove installed FPF commands
29+
- **Auto-detection**: Finds commands in both global and local locations
30+
- **Platform-specific cleanup**: Only removes selected platforms
31+
32+
#### CI/CD
33+
34+
- **GitHub Actions workflow**: Verifies `dist/` stays in sync with `src/commands/`
35+
- **Build check on PR/push**: Fails if `./build.sh` produces uncommitted changes
36+
37+
#### Visual Improvements
38+
39+
- **Melted steel gradient**: Red → orange → yellow → white color scheme for ASCII banner
40+
- **SVG banner for GitHub**: `assets/banner.svg` with same gradient colors
41+
- **Cleaner TUI**: Simplified instructions, highlighted keys
42+
43+
### Changed
44+
45+
- **Directory structure**: Commands moved from `commands/` to `src/commands/` (source of truth)
46+
- **Installation targets**: Installer copies from `dist/{platform}/` not source
47+
- **README**: Updated with new install instructions and SVG banner
48+
49+
---
50+
851
## [2.1.0] - 2025-12-13
952

1053
### Added

README.md

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,8 @@
1-
# Crucible Code
1+
<img src="assets/banner.svg" alt="Crucible Code" width="600">
22

3-
```
4-
______ ______ __ __ ______ __ ______ __ ______
5-
/\ ___\ /\ == \ /\ \/\ \ /\ ___\ /\ \ /\ == \ /\ \ /\ ___\
6-
\ \ \____ \ \ __< \ \ \_\ \ \ \ \____ \ \ \ \ \ __< \ \ \____ \ \ __\
7-
\ \_____\ \ \_\ \_\ \ \_____\ \ \_____\ \ \_\ \ \_____\ \ \_____\ \ \_____\
8-
\/_____/ \/_/ /_/ \/_____/ \/_____/ \/_/ \/_____/ \/_____/ \/_____/
9-
10-
______ ______ _____ ______
11-
/\ ___\ /\ __ \ /\ __-. /\ ___\
12-
\ \ \____ \ \ \/\ \ \ \ \/\ \ \ \ __\
13-
\ \_____\ \ \_____\ \ \____- \ \_____\
14-
\/_____/ \/_____/ \/____/ \/_____/
15-
```
3+
**Structured reasoning for AI coding tools** — make better decisions, remember why you made them.
164

17-
**Structured reasoning for Claude Code** — make better decisions, remember why you made them.
5+
**Works Exceptionally Well With Claude Code!**
186

197
## The Problem This Solves
208

@@ -33,18 +21,39 @@ FPF gives you a structured way to think through these decisions with Claude as a
3321

3422
## Quick Start
3523

24+
### One-liner Install
25+
26+
```bash
27+
# Global install (recommended for personal use)
28+
curl -fsSL https://raw.githubusercontent.com/m0n0x41d/crucible-code/main/install.sh | bash -s -- -g
29+
30+
# Per-project install (run from project root)
31+
curl -fsSL https://raw.githubusercontent.com/m0n0x41d/crucible-code/main/install.sh | bash
32+
```
33+
34+
This launches an interactive installer where you select which AI coding tools to install FPF commands for (Claude Code, Cursor, Gemini CLI, Codex CLI).
35+
36+
**Global** installs to `~/.claude/commands/` etc. — available in all projects.
37+
**Per-project** installs to `./.claude/commands/` — commit to repo for team use.
38+
39+
### Manual Install
40+
3641
```bash
37-
# 1. Install
3842
git clone https://github.com/m0n0x41d/crucible-code.git
3943
cd crucible-code
40-
./install.sh /path/to/your/project
44+
./install.sh # Interactive TUI
45+
./install.sh --claude -g # Install Claude Code globally
46+
./install.sh --all # Install all platforms
47+
```
48+
49+
### Initialize in Your Project
4150

42-
# 2. Initialize in your project
51+
```bash
4352
cd /path/to/your/project
44-
# Then in Claude Code:
45-
/fpf-0-init # Claude will scan your repo and ask clarifying questions to build project context.
53+
# Then in your AI coding tool:
54+
/fpf-0-init # Creates .fpf/ structure and scans your repo
4655

47-
# 3. Start reasoning
56+
# Start reasoning
4857
/fpf-1-hypothesize "How should we handle state synchronization across browser tabs?"
4958
```
5059

adapters/claude.sh

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#!/bin/bash
2+
# Adapter: Claude Code
3+
# Format: Markdown (native - no transformation needed)
4+
# Output: dist/claude/
5+
6+
set -e
7+
8+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9+
ROOT_DIR="$(dirname "$SCRIPT_DIR")"
10+
SRC_DIR="$ROOT_DIR/src/commands"
11+
OUT_DIR="$ROOT_DIR/dist/claude"
12+
13+
mkdir -p "$OUT_DIR"
14+
15+
for file in "$SRC_DIR"/*.md; do
16+
filename=$(basename "$file")
17+
cp "$file" "$OUT_DIR/$filename"
18+
done
19+
20+
echo "Claude Code: $(ls "$OUT_DIR" | wc -l | tr -d ' ') commands"

adapters/codex.sh

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#!/bin/bash
2+
# Adapter: OpenAI Codex CLI
3+
# Format: Markdown with optional YAML frontmatter
4+
# Output: dist/codex/
5+
# Note: Codex uses same $ARGUMENTS syntax as Claude Code
6+
7+
set -e
8+
9+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
10+
ROOT_DIR="$(dirname "$SCRIPT_DIR")"
11+
SRC_DIR="$ROOT_DIR/src/commands"
12+
OUT_DIR="$ROOT_DIR/dist/codex"
13+
14+
mkdir -p "$OUT_DIR"
15+
16+
for file in "$SRC_DIR"/*.md; do
17+
filename=$(basename "$file")
18+
name="${filename%.md}"
19+
20+
# Extract first heading as description (remove # prefix)
21+
description=$(head -20 "$file" | grep -m1 "^#" | sed 's/^#* *//' || echo "FPF command: $name")
22+
23+
# Create file with YAML frontmatter
24+
{
25+
echo "---"
26+
echo "description: $description"
27+
echo "argument-hint: (optional)"
28+
echo "---"
29+
echo ""
30+
cat "$file"
31+
} > "$OUT_DIR/$filename"
32+
done
33+
34+
echo "Codex CLI: $(ls "$OUT_DIR" | wc -l | tr -d ' ') commands"

adapters/cursor.sh

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#!/bin/bash
2+
# Adapter: Cursor
3+
# Format: Markdown (same as Claude Code)
4+
# Output: dist/cursor/
5+
6+
set -e
7+
8+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9+
ROOT_DIR="$(dirname "$SCRIPT_DIR")"
10+
SRC_DIR="$ROOT_DIR/src/commands"
11+
OUT_DIR="$ROOT_DIR/dist/cursor"
12+
13+
mkdir -p "$OUT_DIR"
14+
15+
for file in "$SRC_DIR"/*.md; do
16+
filename=$(basename "$file")
17+
cp "$file" "$OUT_DIR/$filename"
18+
done
19+
20+
echo "Cursor: $(ls "$OUT_DIR" | wc -l | tr -d ' ') commands"

adapters/gemini.sh

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#!/bin/bash
2+
# Adapter: Gemini CLI
3+
# Format: TOML
4+
# Output: dist/gemini/
5+
# Transforms: $ARGUMENTS -> {{args}}, Markdown -> TOML wrapper
6+
7+
set -e
8+
9+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
10+
ROOT_DIR="$(dirname "$SCRIPT_DIR")"
11+
SRC_DIR="$ROOT_DIR/src/commands"
12+
OUT_DIR="$ROOT_DIR/dist/gemini"
13+
14+
mkdir -p "$OUT_DIR"
15+
16+
escape_toml() {
17+
# Escape backslashes and quotes for TOML multi-line string
18+
sed 's/\\/\\\\/g' | sed 's/"""/\\"""/g'
19+
}
20+
21+
for file in "$SRC_DIR"/*.md; do
22+
filename=$(basename "$file")
23+
name="${filename%.md}"
24+
toml_file="$OUT_DIR/${name}.toml"
25+
26+
# Extract first heading as description
27+
description=$(head -20 "$file" | grep -m1 "^#" | sed 's/^#* *//' || echo "FPF command: $name")
28+
# Escape quotes in description
29+
description=$(echo "$description" | sed 's/"/\\"/g')
30+
31+
# Read content, transform arguments, escape for TOML
32+
content=$(cat "$file" | sed 's/\$ARGUMENTS/{{args}}/g' | sed 's/\$\([1-9]\)/{{\1}}/g' | escape_toml)
33+
34+
# Write TOML file
35+
{
36+
echo "description = \"$description\""
37+
echo ""
38+
echo "prompt = \"\"\""
39+
echo "$content"
40+
echo "\"\"\""
41+
} > "$toml_file"
42+
done
43+
44+
echo "Gemini CLI: $(ls "$OUT_DIR" | wc -l | tr -d ' ') commands"

assets/banner.svg

Lines changed: 17 additions & 0 deletions
Loading

build.sh

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#!/bin/bash
2+
# Build script: Runs all adapters to generate platform-specific commands
3+
# Output: dist/{platform}/
4+
5+
set -e
6+
7+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
8+
ADAPTERS_DIR="$SCRIPT_DIR/adapters"
9+
10+
echo "Building Crucible Code for all platforms..."
11+
echo ""
12+
13+
# Clean dist
14+
rm -rf "$SCRIPT_DIR/dist"
15+
mkdir -p "$SCRIPT_DIR/dist"
16+
17+
# Run each adapter
18+
for adapter in "$ADAPTERS_DIR"/*.sh; do
19+
bash "$adapter"
20+
done
21+
22+
echo ""
23+
echo "Build complete. Output in dist/"
File renamed without changes.

0 commit comments

Comments
 (0)