Installation

pip install licit-ai-cli

Or from source:

git clone https://github.com/Diego303/licit-cli.git
cd licit-cli
pip install -e ".[dev]"

Invocation

# As an installed command
licit [options] <command> [arguments]

# As a Python module
python -m licit [options] <command> [arguments]

Global options

OptionDescription
--versionShows the licit version
--config PATHPath to a specific .licit.yaml file
-v, --verboseEnables detailed logging (DEBUG level)
--helpShows help
licit --version
# licit, version 0.3.0

licit --verbose status
# Shows debug logs during execution

Commands

licit init

Initializes licit in the current project. Automatically detects project characteristics and generates the configuration.

licit init [--framework {eu-ai-act|owasp|all}]

Options:

OptionDefaultDescription
--frameworkallRegulatory framework to enable

What it does:

  1. Runs ProjectDetector to detect languages, frameworks, CI/CD, AI agents, etc.
  2. Generates .licit.yaml with configuration adapted to the project.
  3. Creates the .licit/ directory for internal data.
  4. If it detects architect or vigil, it automatically enables their connectors.

Example:

$ cd my-fastapi-project/
$ licit init

Initialized licit in my-fastapi-project
  Languages: python
  Frameworks: fastapi
  Agent configs: CLAUDE.md
  CI/CD: github-actions
  Config saved to .licit.yaml

Example with specific framework:

$ licit init --framework eu-ai-act
# Only enables EU AI Act, disables OWASP

licit status

Shows the current state of licit and connected data sources.

licit status

What it shows:

Example:

$ licit status

Project: my-fastapi-project
  Root: /home/user/my-fastapi-project
  Languages: python
  Frameworks: fastapi
  Git: 142 commits, 3 contributors

Config: .licit.yaml (loaded)

Frameworks:
  EU AI Act: enabled
  OWASP Agentic: enabled

Data sources:
  Provenance: not collected
  FRIA: not found
  Annex IV: not found
  Changelog: not found

Connectors:
  architect: disabled
  vigil: disabled

Agent configs:
  CLAUDE.md (claude-code)
  .cursorrules (cursor)

licit connect

Configures optional connectors to integrate external data sources.

licit connect {architect|vigil} [--enable|--disable]

Arguments:

ArgumentDescription
architectConnector for Architect (reports and audit logs)
vigilConnector for Vigil (SARIF security findings)

Options:

OptionDefaultDescription
--enable(default)Enables the connector
--disableDisables the connector

Example:

$ licit connect architect
# Enables the architect connector

$ licit connect vigil --enable
# Enables the vigil connector

$ licit connect architect --disable
# Disables the architect connector

licit trace

Tracks code provenance — identifies what was written by AI and what by humans.

Status: Functional (Phase 2 completed).

licit trace [--since DATE|TAG] [--report] [--stats]

Options:

OptionDescription
--sinceAnalyzes commits from a date (YYYY-MM-DD) or git tag
--reportGenerates provenance report file at .licit/reports/provenance.md
--statsShows statistics in terminal

What it does:

  1. Runs GitAnalyzer to analyze commits with 6 heuristics (author, message, volume, co-authors, file patterns, time).
  2. Optionally reads agent session logs (Claude Code).
  3. Classifies each file as ai (score >= 0.7), mixed (>= 0.5), or human (< 0.5).
  4. Stores results in .licit/provenance.jsonl (append-only).
  5. If sign: true, signs each record with HMAC-SHA256.

Example:

$ licit trace --since 2026-01-01 --stats

  Analyzing git history...
  Records: 45 files analyzed
  AI-generated: 18 (40.0%)
  Human-written: 22 (48.9%)
  Mixed: 5 (11.1%)

  AI tools detected: claude-code (15), cursor (3)
  Models detected: claude-sonnet-4 (12), claude-opus-4 (3), gpt-4o (3)

  Stored in .licit/provenance.jsonl

Example with report:

$ licit trace --report
# Generates .licit/reports/provenance.md with detailed per-file table

Heuristics used:

#HeuristicWeightWhat it detects
H1Author pattern3.0AI author names (claude, copilot, cursor, bot, etc.)
H2Message pattern1.5Commit patterns (conventional commits, “implement”, [ai])
H3Bulk changes2.0Bulk changes (>20 files + >500 lines)
H4Co-author3.0Co-authored-by: with AI keywords
H5File patterns1.0All files are test files
H6Time pattern0.5Commits between 1am-5am

Only heuristics that produce a signal (score > 0) contribute to the weighted average.


licit changelog

Generates a changelog of changes in AI agent configurations with semantic diffing and severity classification.

Status: Functional (Phase 3 completed).

licit changelog [--since DATE|TAG] [--format {markdown|json}]

Options:

OptionDefaultDescription
--since(all)Changes since date or tag
--formatmarkdownOutput format: markdown or json

What it does:

  1. Runs ConfigWatcher to retrieve the git history of monitored files.
  2. Applies diff_configs() (semantic differ) between consecutive versions of each file.
  3. Classifies each change with ChangeClassifier (MAJOR/MINOR/PATCH).
  4. Renders the changelog with ChangelogRenderer (Markdown or JSON).
  5. Displays the output in terminal and saves it to output_path.

Monitored files (by default):

Example:

$ licit changelog

# Agent Config Changelog

> 3 change(s) detected across 2 file(s): **1** major, **1** minor, **1** patch

## .architect/config.yaml

- **[MAJOR]** Changed: model from claude-sonnet-4 to claude-opus-4 (`a1b2c3d4`) — 2026-03-12
- **[PATCH]** Changed: budget.max_cost_usd from 5.0 to 10.0 (`a1b2c3d4`) — 2026-03-12

## CLAUDE.md

- **[MINOR]** Changed: section:Rules from 5 lines to 8 lines (+3/-0) (`e5f6g7h8`) — 2026-03-11

  Changelog saved to .licit/changelog.md

JSON example:

$ licit changelog --format json --since 2026-03-01
# Generates JSON with "changes" array and saves to .licit/changelog.md

Severity classification:

SeverityTriggerExamples
MAJORModel/provider change, or deletion of a MINOR fieldmodel: gpt-4 -> gpt-5, deleting guardrails
MINORChange to prompt, guardrails, tools, rules, Markdown sectionsEditing system_prompt, adding blocked_commands
PATCHEverything elseParameter adjustments, formatting

Supported diff formats:

FormatExtensionsStrategy
YAML.yaml, .ymlRecursive key-value diff
JSON.jsonRecursive key-value diff
Markdown.mdDiff by sections (headings)
Plain textOthersFull content diff

For detailed documentation of the changelog system, see Changelog.


licit fria

Completes the Fundamental Rights Impact Assessment (EU AI Act Article 27).

Status: Registered in CLI. Functional from Phase 4.

licit fria [--update]

Options:

OptionDescription
--updateUpdates an existing FRIA instead of creating a new one

Generated files:


licit annex-iv

Generates the Annex IV Technical Documentation (EU AI Act).

Status: Registered in CLI. Functional from Phase 4.

licit annex-iv [--organization NAME] [--product NAME]

Options:

OptionDescription
--organizationOrganization name
--productProduct name

Generated file:


licit report

Generates a unified compliance report.

Status: Registered in CLI. Functional from Phase 6.

licit report [--framework {eu-ai-act|owasp|all}] [--format {markdown|json|html}] [--output PATH]

Options:

OptionDefaultDescription
--frameworkallFramework to evaluate
--formatmarkdownOutput format
-o, --output.licit/reports/compliance-report.{ext}Output file path

licit gaps

Identifies compliance gaps with actionable recommendations.

Status: Registered in CLI. Functional from Phase 6.

licit gaps [--framework {eu-ai-act|owasp|all}]

Options:

OptionDefaultDescription
--frameworkallFramework to analyze

Future example:

$ licit gaps --framework eu-ai-act

EU AI Act Compliance Gaps:

[HIGH] ART-9-1: Risk Management System
  Gap: No FRIA document found
  Action: Run 'licit fria' to complete the assessment
  Effort: medium

[MEDIUM] ART-13-1: Transparency
  Gap: No provenance tracking configured
  Action: Run 'licit trace' to analyze code provenance
  Effort: low

licit verify

Verifies compliance and returns an exit code for CI/CD.

Status: Registered in CLI. Functional from Phase 6.

licit verify [--framework {eu-ai-act|owasp|all}]

Exit codes:

CodeMeaning
0COMPLIANT — All critical requirements met
1NON_COMPLIANT — Some critical requirement not met
2PARTIAL — Some requirement partially met

Usage in CI/CD (GitHub Actions):

- name: Compliance check
  run: licit verify
  # The pipeline fails if exit code != 0

Command summary table

CommandPhaseStatusShort description
init1FunctionalInitializes licit in the project
status1FunctionalShows status and connected sources
connect1FunctionalConfigures connectors
trace2FunctionalProvenance traceability
changelog3FunctionalAgent config changelog
fria4SkeletonFRIA (EU AI Act Art. 27)
annex-iv4SkeletonAnnex IV technical documentation
report6SkeletonUnified compliance report
gaps6SkeletonCompliance gaps
verify6SkeletonCI/CD gate