Skip to content
Back to skills

Acfm Spec Workflow

ASecurity

Initialize and manage AC Framework spec-driven workflows using acfm CLI. Use when setting up spec workflows, checking project status, creating changes, or understanding the .acfm/ vs openspec/ directory structures. Essential first step before using any OpenSpec skills.

  • 2 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 10, 2026
documentationbashnode

Works with

  • cli

Security analysis

A100/100

Scanned September 10, 2026

npx -y skills add B4san/AC-framework --skill acfm-spec-workflow --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Acfm Spec Workflow?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Acfm Spec Workflow
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/b4san-acfm-spec-workflow/badge)](https://www.skillsdirectory.com/skills/b4san-acfm-spec-workflow)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: acfm-spec-workflow
description: Initialize and manage AC Framework spec-driven workflows using acfm CLI. Use when setting up spec workflows, checking project status, creating changes, or understanding the .acfm/ vs openspec/ directory structures. Essential first step before using any OpenSpec skills.
---

# AC Framework Spec-Driven Workflow

Guide for initializing and managing spec-driven development workflows using the AC Framework CLI (`acfm`).

## When to use this skill

Use this skill when:
- **Starting a new project** and need to initialize the spec workflow
- **Working on an existing project** and need to check if specs are initialized
- **Creating a new change/feature** using the spec-driven workflow
- **Unsure whether to use `.acfm/` or `openspec/`** directories
- **Need to understand CLI commands** for spec management
- **Migrating from legacy openspec/ to new .acfm/ structure**

## Quick start

```bash
# Check if project is initialized
acfm spec status --json

# Initialize new project (creates .acfm/)
acfm spec init

# Create a new change
acfm spec new my-feature --json

# Get instructions for next artifact
acfm spec instructions proposal --change my-feature --json
```

## Directory Structure

### NEW (Default): `.acfm/` directory

```
project-root/
├── .acfm/                    # NEW: Default spec directory
│   ├── config.yaml           # Project configuration
│   ├── specs/                # Shared specs
│   └── changes/              # Active changes
│       ├── archive/          # Archived changes
│       └── my-feature/       # Individual change
│           ├── .openspec.yaml
│           ├── proposal.md
│           ├── design.md
│           ├── tasks.md
│           └── specs/
```

### LEGACY: `openspec/` directory

```
project-root/
├── openspec/                 # LEGACY: Still fully supported
│   ├── config.yaml
│   ├── specs/
│   └── changes/
```

**Priority**: CLI automatically uses `.acfm/` if it exists, otherwise falls back to `openspec/`.

## Instructions

### Step 1: Check initialization status

Always start by checking if the project is initialized:

```bash
acfm spec status --json
```

**If not initialized** (`"initialized": false`):
- Proceed to Step 2 to initialize

**If initialized** (`"initialized": true`):
- Note the `dirName` field (either `.acfm` or `openspec`)
- Proceed to Step 3 to create changes

### Step 2: Initialize the project

For new projects:

```bash
acfm spec init
```

This creates:
- `.acfm/config.yaml` - Project configuration
- `.acmf/specs/` - Shared specifications
- `.acfm/changes/` - Active changes directory

**Legacy support**: If the project already has `openspec/`, it will be detected automatically. No need to migrate unless desired.

### Step 3: Create a change

```bash
acfm spec new <change-name> --json
```

Example:
```bash
acfm spec new user-authentication --json
```

**Output**:
```json
{
  "changeDir": "/project/.acfm/changes/user-authentication",
  "schemaName": "spec-driven",
  "artifacts": ["proposal", "specs", "design", "tasks"]
}
```

### Step 4: Get instructions for artifacts

Each artifact has specific instructions:

```bash
# Get instructions for proposal
acfm spec instructions proposal --change <name> --json

# Get instructions for design
acfm spec instructions design --change <name> --json

# Get instructions for tasks
acfm spec instructions tasks --change <name> --json

# Get apply instructions (when ready to implement)
acfm spec instructions apply --change <name> --json
```

### Step 5: Check status

Monitor progress:

```bash
# Status of specific change
acfm spec status --change <name> --json

# List all changes
acfm spec list --json
```

### Step 6: Archive completed changes

```bash
acfm spec archive <change-name>
```

## CLI Command Reference

### Initialization
- `acfm spec init [--json]` - Initialize spec directory
- `acfm spec status [--json]` - Check initialization status

### Change Management
- `acfm spec new <name> [--json]` - Create new change
- `acfm spec list [--json]` - List all changes
- `acfm spec status --change <name> [--json]` - Check change status
- `acfm spec archive <name> [--json]` - Archive completed change

### Instructions
- `acfm spec instructions <artifact> --change <name> [--json]` - Get artifact instructions
- `acfm spec schemas [--json]` - List available schemas
- `acfm spec validate <name> [--json]` - Validate change structure

## Common scenarios

### Scenario: New project setup

```bash
# 1. Check status
acfm spec status --json

# 2. Initialize
acfm spec init

# 3. Create first change
acfm spec new initial-setup --json

# 4. Get proposal instructions
acfm spec instructions proposal --change initial-setup --json
```

### Scenario: Legacy project (openspec/)

```bash
# CLI automatically detects openspec/ directory
acfm spec status --json
# Output: { "initialized": true, "dirName": "openspec", ... }

# Create change in openspec/
acfm spec new legacy-feature --json
# Creates: openspec/changes/legacy-feature/
```

### Scenario: Mixed directories

If both `.acfm/` and `openspec/` exist:
- CLI uses `.acfm/` (higher priority)
- Changes are created in `.acfm/changes/`

To use `openspec/` temporarily:
```bash
mv .acfm/ .acfm-backup/
# Now CLI will use openspec/
```

## Best practices

1. **Always use CLI commands** - Don't manually create directories
2. **Use `--json` flag** for programmatic parsing
3. **Check initialization first** - Before creating changes
4. **Let CLI handle paths** - Don't hardcode `.acfm/` or `openspec/`
5. **Archive completed changes** - Keeps active list clean

## Troubleshooting

### "Spec system not initialized"

```bash
# Solution
acfm spec init
```

### Changes not appearing

```bash
# Check which directory is being used
acfm spec status --json
# Look at "dirName" field

# List both directories
ls -la .acfm/changes/ 2>/dev/null || echo "No .acfm/"
ls -la openspec/changes/ 2>/dev/null || echo "No openspec/"
```

### Wrong directory detected

```bash
# Force use of openspec/ by renaming .acfm/
mv .acfm/ .acfm-backup/

# Or force use of .acfm/ by renaming openspec/
mv openspec/ openspec-backup/
```

## Requirements

- AC Framework CLI (`acfm`) must be installed
- Node.js >= 18.0.0

## Compatibility

- ✅ Works with both `.acfm/` (new) and `openspec/` (legacy)
- ✅ All existing OpenSpec skills continue to work
- ✅ No migration required for legacy projects
- ✅ Optional migration path available

## See also

- Use `openspec-new-change` skill after initialization to create structured changes
- Use `openspec-continue-change` to work on existing changes
- Use `openspec-apply-change` to implement tasks

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.