lanternspec 0.1.0__tar.gz
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.
- lanternspec-0.1.0/LICENSE +21 -0
- lanternspec-0.1.0/PKG-INFO +260 -0
- lanternspec-0.1.0/README.md +245 -0
- lanternspec-0.1.0/pyproject.toml +68 -0
- lanternspec-0.1.0/setup.cfg +4 -0
- lanternspec-0.1.0/src/lanternspec/__init__.py +8 -0
- lanternspec-0.1.0/src/lanternspec/__main__.py +3 -0
- lanternspec-0.1.0/src/lanternspec/check/__init__.py +4 -0
- lanternspec-0.1.0/src/lanternspec/check/check_docs.py +468 -0
- lanternspec-0.1.0/src/lanternspec/check/doctor.py +113 -0
- lanternspec-0.1.0/src/lanternspec/check/githooks.py +284 -0
- lanternspec-0.1.0/src/lanternspec/check/legacy.py +116 -0
- lanternspec-0.1.0/src/lanternspec/check/templates.py +505 -0
- lanternspec-0.1.0/src/lanternspec/cli/__init__.py +53 -0
- lanternspec-0.1.0/src/lanternspec/cli/check.py +184 -0
- lanternspec-0.1.0/src/lanternspec/cli/common.py +31 -0
- lanternspec-0.1.0/src/lanternspec/cli/core.py +252 -0
- lanternspec-0.1.0/src/lanternspec/cli/learn.py +164 -0
- lanternspec-0.1.0/src/lanternspec/cli/report.py +124 -0
- lanternspec-0.1.0/src/lanternspec/cli/tools.py +116 -0
- lanternspec-0.1.0/src/lanternspec/cli/work.py +441 -0
- lanternspec-0.1.0/src/lanternspec/core/__init__.py +5 -0
- lanternspec-0.1.0/src/lanternspec/core/enums.py +457 -0
- lanternspec-0.1.0/src/lanternspec/core/frontmatter.py +150 -0
- lanternspec-0.1.0/src/lanternspec/core/links.py +100 -0
- lanternspec-0.1.0/src/lanternspec/core/meta.py +82 -0
- lanternspec-0.1.0/src/lanternspec/core/new_id.py +74 -0
- lanternspec-0.1.0/src/lanternspec/core/principles.py +457 -0
- lanternspec-0.1.0/src/lanternspec/core/profile.py +524 -0
- lanternspec-0.1.0/src/lanternspec/core/project.py +226 -0
- lanternspec-0.1.0/src/lanternspec/core/state.py +51 -0
- lanternspec-0.1.0/src/lanternspec/core/taskfile.py +163 -0
- lanternspec-0.1.0/src/lanternspec/core/templating.py +133 -0
- lanternspec-0.1.0/src/lanternspec/learn/__init__.py +4 -0
- lanternspec-0.1.0/src/lanternspec/learn/debt.py +411 -0
- lanternspec-0.1.0/src/lanternspec/learn/knowledge/__init__.py +67 -0
- lanternspec-0.1.0/src/lanternspec/learn/knowledge/drafts.py +75 -0
- lanternspec-0.1.0/src/lanternspec/learn/knowledge/mcp_server.py +123 -0
- lanternspec-0.1.0/src/lanternspec/learn/knowledge/notion.py +157 -0
- lanternspec-0.1.0/src/lanternspec/learn/knowledge/obsidian.py +118 -0
- lanternspec-0.1.0/src/lanternspec/report/__init__.py +6 -0
- lanternspec-0.1.0/src/lanternspec/report/doc_map.py +181 -0
- lanternspec-0.1.0/src/lanternspec/report/evaluate.py +174 -0
- lanternspec-0.1.0/src/lanternspec/report/harness.py +127 -0
- lanternspec-0.1.0/src/lanternspec/report/principles_doc.py +134 -0
- lanternspec-0.1.0/src/lanternspec/report/scan.py +299 -0
- lanternspec-0.1.0/src/lanternspec/report/status.py +75 -0
- lanternspec-0.1.0/src/lanternspec/report/views.py +352 -0
- lanternspec-0.1.0/src/lanternspec/resources/__init__.py +23 -0
- lanternspec-0.1.0/src/lanternspec/resources/agents/AGENTS.md +55 -0
- lanternspec-0.1.0/src/lanternspec/resources/principles/conventions/go.yaml +53 -0
- lanternspec-0.1.0/src/lanternspec/resources/principles/conventions/python.yaml +82 -0
- lanternspec-0.1.0/src/lanternspec/resources/principles/conventions/rust.yaml +60 -0
- lanternspec-0.1.0/src/lanternspec/resources/principles/conventions/swift.yaml +59 -0
- lanternspec-0.1.0/src/lanternspec/resources/principles/conventions/typescript.yaml +83 -0
- lanternspec-0.1.0/src/lanternspec/resources/principles/principles.yaml +189 -0
- lanternspec-0.1.0/src/lanternspec/resources/skills/l-adr/SKILL.md +30 -0
- lanternspec-0.1.0/src/lanternspec/resources/skills/l-build/SKILL.md +100 -0
- lanternspec-0.1.0/src/lanternspec/resources/skills/l-check/SKILL.md +30 -0
- lanternspec-0.1.0/src/lanternspec/resources/skills/l-design/SKILL.md +78 -0
- lanternspec-0.1.0/src/lanternspec/resources/skills/l-idea/SKILL.md +52 -0
- lanternspec-0.1.0/src/lanternspec/resources/skills/l-init/SKILL.md +116 -0
- lanternspec-0.1.0/src/lanternspec/resources/skills/l-learn/SKILL.md +87 -0
- lanternspec-0.1.0/src/lanternspec/resources/skills/l-map/SKILL.md +20 -0
- lanternspec-0.1.0/src/lanternspec/resources/skills/l-plan/SKILL.md +79 -0
- lanternspec-0.1.0/src/lanternspec/resources/skills/l-report/SKILL.md +44 -0
- lanternspec-0.1.0/src/lanternspec/resources/skills/l-sync/SKILL.md +42 -0
- lanternspec-0.1.0/src/lanternspec/resources/skills/l-task/SKILL.md +46 -0
- lanternspec-0.1.0/src/lanternspec/resources/skills/l-template/SKILL.md +61 -0
- lanternspec-0.1.0/src/lanternspec/resources/templates/ADR.md +45 -0
- lanternspec-0.1.0/src/lanternspec/resources/templates/API.md +34 -0
- lanternspec-0.1.0/src/lanternspec/resources/templates/_meta/enums.yaml +188 -0
- lanternspec-0.1.0/src/lanternspec/resources/templates//352/260/234/353/260/234/353/254/270/354/204/234 MOC.md" +26 -0
- lanternspec-0.1.0/src/lanternspec/resources/templates//352/270/260/353/212/245 /353/252/251/353/241/235.md" +30 -0
- lanternspec-0.1.0/src/lanternspec/resources/templates//352/270/260/353/241/235.md +45 -0
- lanternspec-0.1.0/src/lanternspec/resources/templates//352/270/260/354/241/264 /353/254/270/354/204/234 /354/247/200/353/217/204.md" +31 -0
- lanternspec-0.1.0/src/lanternspec/resources/templates//352/270/260/355/232/215.md +59 -0
- lanternspec-0.1.0/src/lanternspec/resources/templates//353/215/260/354/235/264/355/204/260.md +38 -0
- lanternspec-0.1.0/src/lanternspec/resources/templates//353/260/260/355/217/254.md +45 -0
- lanternspec-0.1.0/src/lanternspec/resources/templates//353/266/200/354/261/204 /354/271/264/353/223/234.md" +46 -0
- lanternspec-0.1.0/src/lanternspec/resources/templates//354/204/234/353/262/204 /353/260/260/355/217/254 /302/267 /354/232/264/354/230/201.md" +33 -0
- lanternspec-0.1.0/src/lanternspec/resources/templates//354/204/244/352/263/204.md +61 -0
- lanternspec-0.1.0/src/lanternspec/resources/templates//354/204/270/354/205/230 /352/270/260/353/241/235.md" +27 -0
- lanternspec-0.1.0/src/lanternspec/resources/templates//354/213/234/354/212/244/355/205/234 /352/265/254/354/241/260.md" +41 -0
- lanternspec-0.1.0/src/lanternspec/resources/templates//354/225/204/353/212/224 /352/270/260/354/210/240.md" +25 -0
- lanternspec-0.1.0/src/lanternspec/resources/templates//354/225/204/354/235/264/353/224/224/354/226/264.md +44 -0
- lanternspec-0.1.0/src/lanternspec/resources/templates//354/227/255/353/237/211 /354/271/264/353/223/234.md" +42 -0
- lanternspec-0.1.0/src/lanternspec/resources/templates//354/236/221/354/227/205 /353/213/250/354/234/204 /352/270/260/353/241/235.md" +27 -0
- lanternspec-0.1.0/src/lanternspec/resources/templates//355/224/204/353/241/234/354/240/235/355/212/270 /354/240/225/354/235/230/354/204/234.md" +50 -0
- lanternspec-0.1.0/src/lanternspec/resources/templates//355/224/214/353/236/253/355/217/274 /354/227/260/353/217/231.md" +45 -0
- lanternspec-0.1.0/src/lanternspec/resources/templates//355/225/240 /354/235/274.md" +33 -0
- lanternspec-0.1.0/src/lanternspec/resources/templates//355/230/221/354/227/205 /352/267/234/354/271/231.md" +35 -0
- lanternspec-0.1.0/src/lanternspec/resources/templates//355/231/224/353/251/264.md +36 -0
- lanternspec-0.1.0/src/lanternspec/resources/templates//355/232/214/354/235/230/353/241/235.md +33 -0
- lanternspec-0.1.0/src/lanternspec/tools/__init__.py +37 -0
- lanternspec-0.1.0/src/lanternspec/tools/agent_hooks.py +293 -0
- lanternspec-0.1.0/src/lanternspec/tools/antigravity.py +124 -0
- lanternspec-0.1.0/src/lanternspec/tools/base.py +149 -0
- lanternspec-0.1.0/src/lanternspec/tools/claude.py +132 -0
- lanternspec-0.1.0/src/lanternspec/tools/close.py +43 -0
- lanternspec-0.1.0/src/lanternspec/tools/codex.py +73 -0
- lanternspec-0.1.0/src/lanternspec/tools/docs_mode.py +200 -0
- lanternspec-0.1.0/src/lanternspec/tools/install.py +232 -0
- lanternspec-0.1.0/src/lanternspec/tools/rules.py +65 -0
- lanternspec-0.1.0/src/lanternspec/tools/runlog.py +107 -0
- lanternspec-0.1.0/src/lanternspec/tools/skills.py +160 -0
- lanternspec-0.1.0/src/lanternspec/work/__init__.py +6 -0
- lanternspec-0.1.0/src/lanternspec/work/branches.py +299 -0
- lanternspec-0.1.0/src/lanternspec/work/dbml.py +629 -0
- lanternspec-0.1.0/src/lanternspec/work/epic_rules.py +173 -0
- lanternspec-0.1.0/src/lanternspec/work/ideas.py +108 -0
- lanternspec-0.1.0/src/lanternspec/work/pack.py +102 -0
- lanternspec-0.1.0/src/lanternspec/work/progress.py +195 -0
- lanternspec-0.1.0/src/lanternspec/work/scaffold.py +373 -0
- lanternspec-0.1.0/src/lanternspec/work/screen.py +165 -0
- lanternspec-0.1.0/src/lanternspec/work/stages.py +62 -0
- lanternspec-0.1.0/src/lanternspec/work/tasks.py +284 -0
- lanternspec-0.1.0/src/lanternspec.egg-info/PKG-INFO +260 -0
- lanternspec-0.1.0/src/lanternspec.egg-info/SOURCES.txt +132 -0
- lanternspec-0.1.0/src/lanternspec.egg-info/dependency_links.txt +1 -0
- lanternspec-0.1.0/src/lanternspec.egg-info/entry_points.txt +2 -0
- lanternspec-0.1.0/src/lanternspec.egg-info/requires.txt +1 -0
- lanternspec-0.1.0/src/lanternspec.egg-info/top_level.txt +1 -0
- lanternspec-0.1.0/tests/test_checks.py +185 -0
- lanternspec-0.1.0/tests/test_core.py +164 -0
- lanternspec-0.1.0/tests/test_enums_single_source.py +78 -0
- lanternspec-0.1.0/tests/test_git.py +250 -0
- lanternspec-0.1.0/tests/test_install_and_aux.py +425 -0
- lanternspec-0.1.0/tests/test_later_features.py +400 -0
- lanternspec-0.1.0/tests/test_learning_line.py +105 -0
- lanternspec-0.1.0/tests/test_principles.py +113 -0
- lanternspec-0.1.0/tests/test_principles_data.py +56 -0
- lanternspec-0.1.0/tests/test_skill_commands.py +69 -0
- lanternspec-0.1.0/tests/test_work_line.py +249 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Jihyeok Jeong
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: lanternspec
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Spec-driven development for agentic software engineering
|
|
5
|
+
Author: Jihyeok Jeong
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Repository, https://github.com/Jungjihyuk/LanternSpec
|
|
8
|
+
Project-URL: Issues, https://github.com/Jungjihyuk/LanternSpec/issues
|
|
9
|
+
Keywords: spec-driven-development,claude-code,codex,antigravity-cli,agent-skills
|
|
10
|
+
Requires-Python: >=3.12
|
|
11
|
+
Description-Content-Type: text/markdown
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
Requires-Dist: PyYAML>=6.0
|
|
14
|
+
Dynamic: license-file
|
|
15
|
+
|
|
16
|
+
<div align="center">
|
|
17
|
+
|
|
18
|
+
<img src="https://raw.githubusercontent.com/Jungjihyuk/LanternSpec/main/assets/Banner.png" alt="LanternSpec — Illuminate the unknown. Show the path taken. Spec-Driven Development for Agentic Software Engineering." width="100%">
|
|
19
|
+
|
|
20
|
+
<a href="https://github.com/Jungjihyuk/LanternSpec/blob/main/CHANGELOG.md"><img src="https://img.shields.io/badge/release-v0.1.0-007ec6" alt="release v0.1.0"></a>
|
|
21
|
+
<a href="https://github.com/Jungjihyuk/LanternSpec"><img src="https://img.shields.io/github/stars/Jungjihyuk/LanternSpec?style=social" alt="GitHub Stars"></a>
|
|
22
|
+
<a href="https://github.com/Jungjihyuk/LanternSpec/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-97ca00" alt="license MIT"></a>
|
|
23
|
+
<img src="https://img.shields.io/badge/python-3.12%2B-007ec6" alt="python 3.12+">
|
|
24
|
+
|
|
25
|
+
**English** · [한국어](https://github.com/Jungjihyuk/LanternSpec/blob/main/README.ko.md)
|
|
26
|
+
|
|
27
|
+
[Install](#install) · [Quick start](#quick-start) · [Compared with other SDD tools](#compared-with-other-sdd-tools) · [Skills](#flow-and-skills) · [CLI](#cli-at-a-glance)
|
|
28
|
+
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
Hand the work to an AI agent and still be able to follow what was built, why, and how — all the way through.
|
|
34
|
+
|
|
35
|
+
- 📄 **Leaves familiar documents** — idea → plan → design → tasks → code, in the document formats teams already know
|
|
36
|
+
- 🏮 **Illuminates the unknown** — compares the technologies the AI used with your own knowledge base and tells you what to review and what to learn
|
|
37
|
+
- 📈 **Shows the path taken** — kanban, timeline and understanding-debt views, all readable in Obsidian
|
|
38
|
+
|
|
39
|
+
> **Language note:** the documents, skills and CLI messages LanternSpec produces are currently in **Korean**.
|
|
40
|
+
|
|
41
|
+
## Compared with other SDD tools
|
|
42
|
+
|
|
43
|
+
| | [Spec Kit](https://github.com/github/spec-kit) | [OpenSpec](https://github.com/Fission-AI/OpenSpec) | 🏮 **LanternSpec** |
|
|
44
|
+
|---|---|---|---|
|
|
45
|
+
| Flow | constitution → specify → plan → tasks → implement → converge | explore → propose → apply → archive | idea → plan → design → tasks → build (+ learn · report) |
|
|
46
|
+
| Documents | spec · plan · tasks per feature | proposal · requirements · design · tasks folder per change | 24 familiar document templates (plan, design, tasks, log …) |
|
|
47
|
+
| When done | repeat implementation until converged | merge requirements into specs and archive | merge into the "current state" docs after approval, then archive |
|
|
48
|
+
| Strengths | swap processes via extensions, presets and workflows; bug-fix and idea-assessment extensions | lightweight, no enforced phases, brownfield-first, cross-repo planning (beta) | compares unfamiliar tech with your knowledge base (understanding debt), progress reports, picks design principles for you |
|
|
49
|
+
| AI tools | many coding agents | 30+ | Claude Code · Codex · Antigravity |
|
|
50
|
+
| Install | Python 3.11+ · uv | single binary · npm · Homebrew | Python 3.12+ · uv |
|
|
51
|
+
| Document language | English (README in several languages) | English | Korean |
|
|
52
|
+
|
|
53
|
+
## Install
|
|
54
|
+
|
|
55
|
+
Requirements: Python 3.12+ · git · [uv](https://docs.astral.sh/uv/)
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
uv tool install lanternspec # installs the lantern command
|
|
59
|
+
cd my-project
|
|
60
|
+
lantern install # installs skills, rules and hooks into this project (Claude Code by default)
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Then call `/l-init` inside your AI tool (`$l-init` in Codex).
|
|
64
|
+
|
|
65
|
+
- **Using several AI tools:** `lantern install --tools claude,codex,antigravity`
|
|
66
|
+
- **Skills live in your project:** they are written straight into the project, not installed as a plugin. So they are called without a prefix (`/l-init`) and shared with your team through git.
|
|
67
|
+
- **When a new version comes out:** `uv tool upgrade lanternspec` → `lantern upgrade`
|
|
68
|
+
|
|
69
|
+
## Quick start
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
/l-init answer 7 questions → lantern.yaml · docs/ · draft project definition · design principles
|
|
73
|
+
/l-idea dark mode support record an idea right away → 1. 아이디어/IDEA-001
|
|
74
|
+
/l-plan IDEA-001 what and why, with acceptance criteria → 2. 작업/W-001 …/기획.md
|
|
75
|
+
/l-design W-001 how — only the structure, screens and data that change; a person approves
|
|
76
|
+
/l-task W-001 an ordered task list
|
|
77
|
+
/l-build W-001 implement → test → one commit per task, report with evidence → merge into the current state
|
|
78
|
+
/l-report kanban · timeline · debt · a three-line status report
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
`lantern` numbers every document in order.
|
|
82
|
+
|
|
83
|
+
| ID | Meaning |
|
|
84
|
+
|---|---|
|
|
85
|
+
| `IDEA-001` | idea #1 |
|
|
86
|
+
| `W-001` | work item #1 (one bundle from plan to build) |
|
|
87
|
+
| `W-001-T02` | the 2nd task of work item #1 |
|
|
88
|
+
| `D-001` · `ADR-001` | debt card · decision record |
|
|
89
|
+
|
|
90
|
+
### Commands for checking where you are
|
|
91
|
+
|
|
92
|
+
| Command | When to use it |
|
|
93
|
+
|---|---|
|
|
94
|
+
| `lantern status` | when you pick the work back up — shows the work in progress, the next task and open questions in three lines |
|
|
95
|
+
| `lantern doctor` | right after installing, or when something feels off — checks that install, settings and folders match `lantern.yaml` |
|
|
96
|
+
| `lantern --help` | when you forget a command — options per command with `lantern <command> --help` |
|
|
97
|
+
|
|
98
|
+
## Flow and skills
|
|
99
|
+
|
|
100
|
+
```mermaid
|
|
101
|
+
flowchart LR
|
|
102
|
+
S["⚙️ /l-init"] --> I
|
|
103
|
+
subgraph W["🛠 Work flow"]
|
|
104
|
+
I["💡 /l-idea"] --> P["📋 /l-plan"] --> D["📐 /l-design"] --> T["✅ /l-task"] --> B["🔨 /l-build"]
|
|
105
|
+
end
|
|
106
|
+
P & D & B -.unfamiliar tech.-> L["🧭 /l-learn"]
|
|
107
|
+
B -->|merge when done| C["📘 3. Current state"]
|
|
108
|
+
W & L --> R["📊 /l-report"]
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
| Skill | What it does | What it leaves |
|
|
112
|
+
|---|---|---|
|
|
113
|
+
| `/l-init` | sets up the document structure and design principles from 7 questions (new or existing · team size · screens · server · knowledge base · design tool · project kind) | `lantern.yaml`, `docs/`, project definition, MOC, design principles |
|
|
114
|
+
| `/l-idea` | records a thought from the conversation, as said and as summarised | `1. 아이디어/IDEA-001 …` |
|
|
115
|
+
| `/l-plan` | what and why — a work folder and acceptance criteria | `2. 작업/W-001 …/기획.md` |
|
|
116
|
+
| `/l-design` | how — only the structure, screens and data (DBML) that change, behind an approval gate | `설계.md`, `화면/`, ADR |
|
|
117
|
+
| `/l-task` | an ordered task list (size · acceptance criteria · dependencies) | `할 일.md` |
|
|
118
|
+
| `/l-build` | implement → test → one commit per task, report **with evidence**, merge into the current state when done | code, `기록.md` |
|
|
119
|
+
| `/l-learn` | compares unfamiliar tech with your knowledge base → 🟢 · 🟡 · 🔴, debt cards and draft study notes | `📒 부채/카드/D-001 …` |
|
|
120
|
+
| `/l-report` | kanban · timeline · domain · traceability · debt · docs-vs-code status + a three-line report | `4. 운영 기록/보고/현황.md` |
|
|
121
|
+
| `/l-template` | create, refine and migrate templates (without losing content) | `0. 템플릿/…` |
|
|
122
|
+
| `/l-check` | format check (required sections · values · links · versions · IDs · length) | — |
|
|
123
|
+
| `/l-sync` | finds where documents and code disagree and brings them back in line | — |
|
|
124
|
+
| `/l-map` | updates the MOC (document map) | `개발문서 MOC.md` |
|
|
125
|
+
| `/l-adr` | records decisions that are hard to reverse | `규칙 · 결정 기록/ADR-001 …` |
|
|
126
|
+
|
|
127
|
+
### How it works
|
|
128
|
+
- **Scripts handle the format, the AI writes the content.** Numbering, files, folders, checks and status changes all go through the `lantern` command; the AI only writes content.
|
|
129
|
+
- **Every document starts from a template.** The AI fills in the template's `{{blanks}}`; changing the section structure is flagged immediately.
|
|
130
|
+
- **Every skill ends the same way.** A skill that changed documents runs `lantern close <skill>`: check → update the map → log the run.
|
|
131
|
+
- **Show before writing.** Designs and changes to the current state are summarised and approved first (`/l-idea` is the only exception).
|
|
132
|
+
- **Your knowledge base is read-only.** Notes are written only after you approve.
|
|
133
|
+
|
|
134
|
+
## Document structure
|
|
135
|
+
|
|
136
|
+
Documents are stored in one folder per work item, and the MOC (document map) collects them by stage. Folder and file names are Korean.
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
docs/
|
|
140
|
+
├─ 개발문서 MOC.md document map + view by stage (lantern map rewrites the marked part)
|
|
141
|
+
├─ 0. 템플릿/ templates you refine over time · _meta/enums.yaml (the single source of status and kind names)
|
|
142
|
+
├─ 1. 아이디어/ ideas
|
|
143
|
+
├─ 2. 작업/W-001 …/ plan · design · tasks · log — the only place edited while working
|
|
144
|
+
│ └─ 보관/ archive
|
|
145
|
+
├─ 3. 현재 상태/ what the system looks like now — updated only when work is done, after approval
|
|
146
|
+
├─ 4. 운영 기록/ reports · session logs · (teams of 2+) meeting notes
|
|
147
|
+
├─ 5. 기존 문서/ (existing projects) original documents, kept unchanged
|
|
148
|
+
└─ 📒 부채/ understanding debt — one card per debt
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Which documents you get depends on your `/l-init` answers (`lantern.yaml`; check with `lantern profile docs`).
|
|
152
|
+
|
|
153
|
+
- A mobile app adds deployment and platform-integration documents.
|
|
154
|
+
- A team of two or more adds collaboration rules and meeting notes.
|
|
155
|
+
|
|
156
|
+
If you don't want documents on the remote, use `lantern docs-mode local`. Documents then live only on a `docs-local` branch in the same repository, and pushing that branch is blocked.
|
|
157
|
+
|
|
158
|
+
## Supported AI tools
|
|
159
|
+
|
|
160
|
+
| Tool | Skills | Rules | Agent hooks | MCP (`--mcp`) |
|
|
161
|
+
|---|---|---|---|---|
|
|
162
|
+
| Claude Code | `.claude/skills` | `CLAUDE.md` → `@AGENTS.md` | `.claude/settings.json` | `.mcp.json` |
|
|
163
|
+
| Codex | `.agents/skills` (`$l-…`) | `AGENTS.md` | `.codex/hooks.json` | `.codex/config.toml` |
|
|
164
|
+
| Antigravity CLI (`agy`) | `.agents/skills` | `AGENTS.md` | `.agents/hooks.json` (no save-before-compaction — there is no compaction hook) | `.agents/plugins/lanternspec/` |
|
|
165
|
+
|
|
166
|
+
- **Rules live in `AGENTS.md`.** LanternSpec manages only the `<!-- lanternspec:start -->` block inside it and leaves everything outside the block alone.
|
|
167
|
+
- **Codex and Antigravity share the skills folder.** When you use both, skill bodies say `/l-build`, and `AGENTS.md` tells Codex to use `$` instead.
|
|
168
|
+
|
|
169
|
+
## Keeping documents and code in line
|
|
170
|
+
|
|
171
|
+
git and AI tools already have **hooks**: they run a script at set moments (just before a commit, right after a file is written, and so on).
|
|
172
|
+
|
|
173
|
+
LanternSpec connects its checks to those hooks, so `lantern` checks at every stage that documents and code still match. The checks are done by a script, not by the AI, so they always apply the same rules.
|
|
174
|
+
|
|
175
|
+
| Stage | What it does | Example |
|
|
176
|
+
|---|---|---|
|
|
177
|
+
| While talking to the AI | shows where things stand when a session starts, and checks the format as soon as the AI writes a document | warns right away when the AI deletes a required section of a plan |
|
|
178
|
+
| Just before a commit | looks at what the commit contains and checks that the records that should go with it are there | warns when the database structure changed but the work log doesn't mention it |
|
|
179
|
+
| After the commit message | checks that the message says which task the commit belongs to | warns when the message has no task ID (e.g. `[W-001-T02]` = the 2nd task of work item #1) |
|
|
180
|
+
| Just before a push | checks that nothing that must stay local is being pushed | blocks pushing the documents branch you chose to keep off the remote |
|
|
181
|
+
| After pushing to GitHub | runs the same checks again on GitHub, whoever pushed (CI) | marks the run failed if document format, lint, type checks or tests break |
|
|
182
|
+
| On demand | scans past commits and lists where documents and code drifted apart (`lantern scan`) | documents not reviewed for a while although their code changed |
|
|
183
|
+
|
|
184
|
+
- **Warnings by default.** Work is never blocked. To make the commit checks blocking, set `git.hooks` to `block` in `lantern.yaml`.
|
|
185
|
+
- **Hard-to-undo mistakes are always blocked.** For example, pushing documents you chose to keep off the remote is blocked regardless of settings.
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
lantern hooks install # turns on the commit and push checks (/l-init asks before installing)
|
|
189
|
+
lantern install --ci # also checks on GitHub (turn off with --no-ci)
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## Managing unfamiliar tech — knowledge base and understanding debt
|
|
193
|
+
|
|
194
|
+
When the AI uses a technology you don't know, LanternSpec compares it with the notes in your knowledge base and sorts it into three groups.
|
|
195
|
+
|
|
196
|
+
- 🟢 you have a note → links the note
|
|
197
|
+
- 🟡 you have a note but asked again → tells you what to review
|
|
198
|
+
- 🔴 no note yet → suggests a draft study note
|
|
199
|
+
|
|
200
|
+
Anything you don't understand yet is kept as a debt card, and every time you ask about it again the count goes up.
|
|
201
|
+
|
|
202
|
+
| Knowledge base (`knowledge.type`) | How | Writing |
|
|
203
|
+
|---|---|---|
|
|
204
|
+
| `obsidian` · `folder` | reads Markdown files directly | creates notes after approval (drafts only with `propose_only`) |
|
|
205
|
+
| `notion` | planned | — |
|
|
206
|
+
|
|
207
|
+
Every knowledge base supports the same four actions: search · read · propose · write. The CLI (`lantern knowledge …`) and the MCP server (`lantern mcp`) use the same functions.
|
|
208
|
+
|
|
209
|
+
There are three kinds of debt.
|
|
210
|
+
|
|
211
|
+
| Kind | Meaning |
|
|
212
|
+
|---|---|
|
|
213
|
+
| 🧠 Understanding | you follow it when it's explained, but it isn't yours yet. Reopened if you ask again after resolving it |
|
|
214
|
+
| 🛠 Competency | you understand it but haven't done it yourself. Practised with exercises (`lantern debt promote`) |
|
|
215
|
+
| 🧱 Technical | debt left in the code (technical debt) |
|
|
216
|
+
|
|
217
|
+
## Design principles and ways of working
|
|
218
|
+
|
|
219
|
+
### Design principles and code conventions
|
|
220
|
+
Picks design principles and code conventions from a table, based on the project kind chosen in `/l-init` and the measured size (lines of code · team size).
|
|
221
|
+
|
|
222
|
+
- Languages: Python · TypeScript · Swift · Rust · Go
|
|
223
|
+
- The essentials go into `AGENTS.md`; the full explanation goes into `개발 원칙.md` (design principles).
|
|
224
|
+
- In existing projects, lint and format settings already in use are recorded, never changed.
|
|
225
|
+
- When the code grows past a size boundary, `lantern doctor` asks whether to raise the principles one level.
|
|
226
|
+
- See the result with `lantern principles show`; run lint and type checks with `lantern lint`
|
|
227
|
+
|
|
228
|
+
### How the AI works
|
|
229
|
+
`lantern harness suggest` looks at code size, work in progress, whether tests exist and past runs, and recommends one of three modes.
|
|
230
|
+
|
|
231
|
+
- **Harness:** small loops inside one task. The default for small projects
|
|
232
|
+
- **Loop:** reruns the whole work item until the acceptance tests pass
|
|
233
|
+
- **Graph:** splits independent work items into worktrees so several agents work at the same time
|
|
234
|
+
|
|
235
|
+
### Evaluation
|
|
236
|
+
`lantern eval` uses the run log to compare cost (time · tool calls) and results (format errors at wrap-up) per skill, model and setting.
|
|
237
|
+
|
|
238
|
+
### Design tools
|
|
239
|
+
Claude Design, Figma and Canva through each tool's MCP.
|
|
240
|
+
Import mockups with `lantern screen import`; `lantern screen compare` finds where the built screen differs from the mockup.
|
|
241
|
+
|
|
242
|
+
## CLI at a glance
|
|
243
|
+
|
|
244
|
+
```text
|
|
245
|
+
setup install [--tools] [--mcp] [--ci|--no-ci] · upgrade · doctor · harness suggest
|
|
246
|
+
profile profile show|docs|write|set · principles show|detect · enums list|rename
|
|
247
|
+
documents scaffold init [--plan] | work | doc | idea | adr | meeting | custom · new-id · map · meta get|set
|
|
248
|
+
checks check [--changed] [--epic W-012] · lint · check-dbml · dbml render|from-sql|diff
|
|
249
|
+
work task next [--all]|start|done|ac|list|estimate · task add [--parallel] · pack · screen import|compare
|
|
250
|
+
work branch|start|list|finish|archive|stage · design approve · unit-log add · idea find|status
|
|
251
|
+
learning knowledge search|read|propose|write|areas · debt find|new|ask|resolve|promote|practice|known|status|list · mcp
|
|
252
|
+
reports report [--views] [--summary] · status · scan [--tests] · sync adopt · eval
|
|
253
|
+
templates template list|lint|level|bump|outdated|diff|usage|new|migrate · legacy adopt|todos
|
|
254
|
+
git hooks install|uninstall|status · docs-mode local|shared
|
|
255
|
+
wrap-up close <skill>
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
## License
|
|
259
|
+
|
|
260
|
+
[MIT](https://github.com/Jungjihyuk/LanternSpec/blob/main/LICENSE)
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
<img src="https://raw.githubusercontent.com/Jungjihyuk/LanternSpec/main/assets/Banner.png" alt="LanternSpec — Illuminate the unknown. Show the path taken. Spec-Driven Development for Agentic Software Engineering." width="100%">
|
|
4
|
+
|
|
5
|
+
<a href="https://github.com/Jungjihyuk/LanternSpec/blob/main/CHANGELOG.md"><img src="https://img.shields.io/badge/release-v0.1.0-007ec6" alt="release v0.1.0"></a>
|
|
6
|
+
<a href="https://github.com/Jungjihyuk/LanternSpec"><img src="https://img.shields.io/github/stars/Jungjihyuk/LanternSpec?style=social" alt="GitHub Stars"></a>
|
|
7
|
+
<a href="https://github.com/Jungjihyuk/LanternSpec/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-97ca00" alt="license MIT"></a>
|
|
8
|
+
<img src="https://img.shields.io/badge/python-3.12%2B-007ec6" alt="python 3.12+">
|
|
9
|
+
|
|
10
|
+
**English** · [한국어](https://github.com/Jungjihyuk/LanternSpec/blob/main/README.ko.md)
|
|
11
|
+
|
|
12
|
+
[Install](#install) · [Quick start](#quick-start) · [Compared with other SDD tools](#compared-with-other-sdd-tools) · [Skills](#flow-and-skills) · [CLI](#cli-at-a-glance)
|
|
13
|
+
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
Hand the work to an AI agent and still be able to follow what was built, why, and how — all the way through.
|
|
19
|
+
|
|
20
|
+
- 📄 **Leaves familiar documents** — idea → plan → design → tasks → code, in the document formats teams already know
|
|
21
|
+
- 🏮 **Illuminates the unknown** — compares the technologies the AI used with your own knowledge base and tells you what to review and what to learn
|
|
22
|
+
- 📈 **Shows the path taken** — kanban, timeline and understanding-debt views, all readable in Obsidian
|
|
23
|
+
|
|
24
|
+
> **Language note:** the documents, skills and CLI messages LanternSpec produces are currently in **Korean**.
|
|
25
|
+
|
|
26
|
+
## Compared with other SDD tools
|
|
27
|
+
|
|
28
|
+
| | [Spec Kit](https://github.com/github/spec-kit) | [OpenSpec](https://github.com/Fission-AI/OpenSpec) | 🏮 **LanternSpec** |
|
|
29
|
+
|---|---|---|---|
|
|
30
|
+
| Flow | constitution → specify → plan → tasks → implement → converge | explore → propose → apply → archive | idea → plan → design → tasks → build (+ learn · report) |
|
|
31
|
+
| Documents | spec · plan · tasks per feature | proposal · requirements · design · tasks folder per change | 24 familiar document templates (plan, design, tasks, log …) |
|
|
32
|
+
| When done | repeat implementation until converged | merge requirements into specs and archive | merge into the "current state" docs after approval, then archive |
|
|
33
|
+
| Strengths | swap processes via extensions, presets and workflows; bug-fix and idea-assessment extensions | lightweight, no enforced phases, brownfield-first, cross-repo planning (beta) | compares unfamiliar tech with your knowledge base (understanding debt), progress reports, picks design principles for you |
|
|
34
|
+
| AI tools | many coding agents | 30+ | Claude Code · Codex · Antigravity |
|
|
35
|
+
| Install | Python 3.11+ · uv | single binary · npm · Homebrew | Python 3.12+ · uv |
|
|
36
|
+
| Document language | English (README in several languages) | English | Korean |
|
|
37
|
+
|
|
38
|
+
## Install
|
|
39
|
+
|
|
40
|
+
Requirements: Python 3.12+ · git · [uv](https://docs.astral.sh/uv/)
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
uv tool install lanternspec # installs the lantern command
|
|
44
|
+
cd my-project
|
|
45
|
+
lantern install # installs skills, rules and hooks into this project (Claude Code by default)
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Then call `/l-init` inside your AI tool (`$l-init` in Codex).
|
|
49
|
+
|
|
50
|
+
- **Using several AI tools:** `lantern install --tools claude,codex,antigravity`
|
|
51
|
+
- **Skills live in your project:** they are written straight into the project, not installed as a plugin. So they are called without a prefix (`/l-init`) and shared with your team through git.
|
|
52
|
+
- **When a new version comes out:** `uv tool upgrade lanternspec` → `lantern upgrade`
|
|
53
|
+
|
|
54
|
+
## Quick start
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
/l-init answer 7 questions → lantern.yaml · docs/ · draft project definition · design principles
|
|
58
|
+
/l-idea dark mode support record an idea right away → 1. 아이디어/IDEA-001
|
|
59
|
+
/l-plan IDEA-001 what and why, with acceptance criteria → 2. 작업/W-001 …/기획.md
|
|
60
|
+
/l-design W-001 how — only the structure, screens and data that change; a person approves
|
|
61
|
+
/l-task W-001 an ordered task list
|
|
62
|
+
/l-build W-001 implement → test → one commit per task, report with evidence → merge into the current state
|
|
63
|
+
/l-report kanban · timeline · debt · a three-line status report
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
`lantern` numbers every document in order.
|
|
67
|
+
|
|
68
|
+
| ID | Meaning |
|
|
69
|
+
|---|---|
|
|
70
|
+
| `IDEA-001` | idea #1 |
|
|
71
|
+
| `W-001` | work item #1 (one bundle from plan to build) |
|
|
72
|
+
| `W-001-T02` | the 2nd task of work item #1 |
|
|
73
|
+
| `D-001` · `ADR-001` | debt card · decision record |
|
|
74
|
+
|
|
75
|
+
### Commands for checking where you are
|
|
76
|
+
|
|
77
|
+
| Command | When to use it |
|
|
78
|
+
|---|---|
|
|
79
|
+
| `lantern status` | when you pick the work back up — shows the work in progress, the next task and open questions in three lines |
|
|
80
|
+
| `lantern doctor` | right after installing, or when something feels off — checks that install, settings and folders match `lantern.yaml` |
|
|
81
|
+
| `lantern --help` | when you forget a command — options per command with `lantern <command> --help` |
|
|
82
|
+
|
|
83
|
+
## Flow and skills
|
|
84
|
+
|
|
85
|
+
```mermaid
|
|
86
|
+
flowchart LR
|
|
87
|
+
S["⚙️ /l-init"] --> I
|
|
88
|
+
subgraph W["🛠 Work flow"]
|
|
89
|
+
I["💡 /l-idea"] --> P["📋 /l-plan"] --> D["📐 /l-design"] --> T["✅ /l-task"] --> B["🔨 /l-build"]
|
|
90
|
+
end
|
|
91
|
+
P & D & B -.unfamiliar tech.-> L["🧭 /l-learn"]
|
|
92
|
+
B -->|merge when done| C["📘 3. Current state"]
|
|
93
|
+
W & L --> R["📊 /l-report"]
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
| Skill | What it does | What it leaves |
|
|
97
|
+
|---|---|---|
|
|
98
|
+
| `/l-init` | sets up the document structure and design principles from 7 questions (new or existing · team size · screens · server · knowledge base · design tool · project kind) | `lantern.yaml`, `docs/`, project definition, MOC, design principles |
|
|
99
|
+
| `/l-idea` | records a thought from the conversation, as said and as summarised | `1. 아이디어/IDEA-001 …` |
|
|
100
|
+
| `/l-plan` | what and why — a work folder and acceptance criteria | `2. 작업/W-001 …/기획.md` |
|
|
101
|
+
| `/l-design` | how — only the structure, screens and data (DBML) that change, behind an approval gate | `설계.md`, `화면/`, ADR |
|
|
102
|
+
| `/l-task` | an ordered task list (size · acceptance criteria · dependencies) | `할 일.md` |
|
|
103
|
+
| `/l-build` | implement → test → one commit per task, report **with evidence**, merge into the current state when done | code, `기록.md` |
|
|
104
|
+
| `/l-learn` | compares unfamiliar tech with your knowledge base → 🟢 · 🟡 · 🔴, debt cards and draft study notes | `📒 부채/카드/D-001 …` |
|
|
105
|
+
| `/l-report` | kanban · timeline · domain · traceability · debt · docs-vs-code status + a three-line report | `4. 운영 기록/보고/현황.md` |
|
|
106
|
+
| `/l-template` | create, refine and migrate templates (without losing content) | `0. 템플릿/…` |
|
|
107
|
+
| `/l-check` | format check (required sections · values · links · versions · IDs · length) | — |
|
|
108
|
+
| `/l-sync` | finds where documents and code disagree and brings them back in line | — |
|
|
109
|
+
| `/l-map` | updates the MOC (document map) | `개발문서 MOC.md` |
|
|
110
|
+
| `/l-adr` | records decisions that are hard to reverse | `규칙 · 결정 기록/ADR-001 …` |
|
|
111
|
+
|
|
112
|
+
### How it works
|
|
113
|
+
- **Scripts handle the format, the AI writes the content.** Numbering, files, folders, checks and status changes all go through the `lantern` command; the AI only writes content.
|
|
114
|
+
- **Every document starts from a template.** The AI fills in the template's `{{blanks}}`; changing the section structure is flagged immediately.
|
|
115
|
+
- **Every skill ends the same way.** A skill that changed documents runs `lantern close <skill>`: check → update the map → log the run.
|
|
116
|
+
- **Show before writing.** Designs and changes to the current state are summarised and approved first (`/l-idea` is the only exception).
|
|
117
|
+
- **Your knowledge base is read-only.** Notes are written only after you approve.
|
|
118
|
+
|
|
119
|
+
## Document structure
|
|
120
|
+
|
|
121
|
+
Documents are stored in one folder per work item, and the MOC (document map) collects them by stage. Folder and file names are Korean.
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
docs/
|
|
125
|
+
├─ 개발문서 MOC.md document map + view by stage (lantern map rewrites the marked part)
|
|
126
|
+
├─ 0. 템플릿/ templates you refine over time · _meta/enums.yaml (the single source of status and kind names)
|
|
127
|
+
├─ 1. 아이디어/ ideas
|
|
128
|
+
├─ 2. 작업/W-001 …/ plan · design · tasks · log — the only place edited while working
|
|
129
|
+
│ └─ 보관/ archive
|
|
130
|
+
├─ 3. 현재 상태/ what the system looks like now — updated only when work is done, after approval
|
|
131
|
+
├─ 4. 운영 기록/ reports · session logs · (teams of 2+) meeting notes
|
|
132
|
+
├─ 5. 기존 문서/ (existing projects) original documents, kept unchanged
|
|
133
|
+
└─ 📒 부채/ understanding debt — one card per debt
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Which documents you get depends on your `/l-init` answers (`lantern.yaml`; check with `lantern profile docs`).
|
|
137
|
+
|
|
138
|
+
- A mobile app adds deployment and platform-integration documents.
|
|
139
|
+
- A team of two or more adds collaboration rules and meeting notes.
|
|
140
|
+
|
|
141
|
+
If you don't want documents on the remote, use `lantern docs-mode local`. Documents then live only on a `docs-local` branch in the same repository, and pushing that branch is blocked.
|
|
142
|
+
|
|
143
|
+
## Supported AI tools
|
|
144
|
+
|
|
145
|
+
| Tool | Skills | Rules | Agent hooks | MCP (`--mcp`) |
|
|
146
|
+
|---|---|---|---|---|
|
|
147
|
+
| Claude Code | `.claude/skills` | `CLAUDE.md` → `@AGENTS.md` | `.claude/settings.json` | `.mcp.json` |
|
|
148
|
+
| Codex | `.agents/skills` (`$l-…`) | `AGENTS.md` | `.codex/hooks.json` | `.codex/config.toml` |
|
|
149
|
+
| Antigravity CLI (`agy`) | `.agents/skills` | `AGENTS.md` | `.agents/hooks.json` (no save-before-compaction — there is no compaction hook) | `.agents/plugins/lanternspec/` |
|
|
150
|
+
|
|
151
|
+
- **Rules live in `AGENTS.md`.** LanternSpec manages only the `<!-- lanternspec:start -->` block inside it and leaves everything outside the block alone.
|
|
152
|
+
- **Codex and Antigravity share the skills folder.** When you use both, skill bodies say `/l-build`, and `AGENTS.md` tells Codex to use `$` instead.
|
|
153
|
+
|
|
154
|
+
## Keeping documents and code in line
|
|
155
|
+
|
|
156
|
+
git and AI tools already have **hooks**: they run a script at set moments (just before a commit, right after a file is written, and so on).
|
|
157
|
+
|
|
158
|
+
LanternSpec connects its checks to those hooks, so `lantern` checks at every stage that documents and code still match. The checks are done by a script, not by the AI, so they always apply the same rules.
|
|
159
|
+
|
|
160
|
+
| Stage | What it does | Example |
|
|
161
|
+
|---|---|---|
|
|
162
|
+
| While talking to the AI | shows where things stand when a session starts, and checks the format as soon as the AI writes a document | warns right away when the AI deletes a required section of a plan |
|
|
163
|
+
| Just before a commit | looks at what the commit contains and checks that the records that should go with it are there | warns when the database structure changed but the work log doesn't mention it |
|
|
164
|
+
| After the commit message | checks that the message says which task the commit belongs to | warns when the message has no task ID (e.g. `[W-001-T02]` = the 2nd task of work item #1) |
|
|
165
|
+
| Just before a push | checks that nothing that must stay local is being pushed | blocks pushing the documents branch you chose to keep off the remote |
|
|
166
|
+
| After pushing to GitHub | runs the same checks again on GitHub, whoever pushed (CI) | marks the run failed if document format, lint, type checks or tests break |
|
|
167
|
+
| On demand | scans past commits and lists where documents and code drifted apart (`lantern scan`) | documents not reviewed for a while although their code changed |
|
|
168
|
+
|
|
169
|
+
- **Warnings by default.** Work is never blocked. To make the commit checks blocking, set `git.hooks` to `block` in `lantern.yaml`.
|
|
170
|
+
- **Hard-to-undo mistakes are always blocked.** For example, pushing documents you chose to keep off the remote is blocked regardless of settings.
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
lantern hooks install # turns on the commit and push checks (/l-init asks before installing)
|
|
174
|
+
lantern install --ci # also checks on GitHub (turn off with --no-ci)
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
## Managing unfamiliar tech — knowledge base and understanding debt
|
|
178
|
+
|
|
179
|
+
When the AI uses a technology you don't know, LanternSpec compares it with the notes in your knowledge base and sorts it into three groups.
|
|
180
|
+
|
|
181
|
+
- 🟢 you have a note → links the note
|
|
182
|
+
- 🟡 you have a note but asked again → tells you what to review
|
|
183
|
+
- 🔴 no note yet → suggests a draft study note
|
|
184
|
+
|
|
185
|
+
Anything you don't understand yet is kept as a debt card, and every time you ask about it again the count goes up.
|
|
186
|
+
|
|
187
|
+
| Knowledge base (`knowledge.type`) | How | Writing |
|
|
188
|
+
|---|---|---|
|
|
189
|
+
| `obsidian` · `folder` | reads Markdown files directly | creates notes after approval (drafts only with `propose_only`) |
|
|
190
|
+
| `notion` | planned | — |
|
|
191
|
+
|
|
192
|
+
Every knowledge base supports the same four actions: search · read · propose · write. The CLI (`lantern knowledge …`) and the MCP server (`lantern mcp`) use the same functions.
|
|
193
|
+
|
|
194
|
+
There are three kinds of debt.
|
|
195
|
+
|
|
196
|
+
| Kind | Meaning |
|
|
197
|
+
|---|---|
|
|
198
|
+
| 🧠 Understanding | you follow it when it's explained, but it isn't yours yet. Reopened if you ask again after resolving it |
|
|
199
|
+
| 🛠 Competency | you understand it but haven't done it yourself. Practised with exercises (`lantern debt promote`) |
|
|
200
|
+
| 🧱 Technical | debt left in the code (technical debt) |
|
|
201
|
+
|
|
202
|
+
## Design principles and ways of working
|
|
203
|
+
|
|
204
|
+
### Design principles and code conventions
|
|
205
|
+
Picks design principles and code conventions from a table, based on the project kind chosen in `/l-init` and the measured size (lines of code · team size).
|
|
206
|
+
|
|
207
|
+
- Languages: Python · TypeScript · Swift · Rust · Go
|
|
208
|
+
- The essentials go into `AGENTS.md`; the full explanation goes into `개발 원칙.md` (design principles).
|
|
209
|
+
- In existing projects, lint and format settings already in use are recorded, never changed.
|
|
210
|
+
- When the code grows past a size boundary, `lantern doctor` asks whether to raise the principles one level.
|
|
211
|
+
- See the result with `lantern principles show`; run lint and type checks with `lantern lint`
|
|
212
|
+
|
|
213
|
+
### How the AI works
|
|
214
|
+
`lantern harness suggest` looks at code size, work in progress, whether tests exist and past runs, and recommends one of three modes.
|
|
215
|
+
|
|
216
|
+
- **Harness:** small loops inside one task. The default for small projects
|
|
217
|
+
- **Loop:** reruns the whole work item until the acceptance tests pass
|
|
218
|
+
- **Graph:** splits independent work items into worktrees so several agents work at the same time
|
|
219
|
+
|
|
220
|
+
### Evaluation
|
|
221
|
+
`lantern eval` uses the run log to compare cost (time · tool calls) and results (format errors at wrap-up) per skill, model and setting.
|
|
222
|
+
|
|
223
|
+
### Design tools
|
|
224
|
+
Claude Design, Figma and Canva through each tool's MCP.
|
|
225
|
+
Import mockups with `lantern screen import`; `lantern screen compare` finds where the built screen differs from the mockup.
|
|
226
|
+
|
|
227
|
+
## CLI at a glance
|
|
228
|
+
|
|
229
|
+
```text
|
|
230
|
+
setup install [--tools] [--mcp] [--ci|--no-ci] · upgrade · doctor · harness suggest
|
|
231
|
+
profile profile show|docs|write|set · principles show|detect · enums list|rename
|
|
232
|
+
documents scaffold init [--plan] | work | doc | idea | adr | meeting | custom · new-id · map · meta get|set
|
|
233
|
+
checks check [--changed] [--epic W-012] · lint · check-dbml · dbml render|from-sql|diff
|
|
234
|
+
work task next [--all]|start|done|ac|list|estimate · task add [--parallel] · pack · screen import|compare
|
|
235
|
+
work branch|start|list|finish|archive|stage · design approve · unit-log add · idea find|status
|
|
236
|
+
learning knowledge search|read|propose|write|areas · debt find|new|ask|resolve|promote|practice|known|status|list · mcp
|
|
237
|
+
reports report [--views] [--summary] · status · scan [--tests] · sync adopt · eval
|
|
238
|
+
templates template list|lint|level|bump|outdated|diff|usage|new|migrate · legacy adopt|todos
|
|
239
|
+
git hooks install|uninstall|status · docs-mode local|shared
|
|
240
|
+
wrap-up close <skill>
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
## License
|
|
244
|
+
|
|
245
|
+
[MIT](https://github.com/Jungjihyuk/LanternSpec/blob/main/LICENSE)
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=77"] # license = "MIT" (SPDX 표기)는 77부터
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "lanternspec"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "Spec-driven development for agentic software engineering"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.12"
|
|
11
|
+
license = "MIT"
|
|
12
|
+
license-files = ["LICENSE"]
|
|
13
|
+
authors = [{ name = "Jihyeok Jeong" }]
|
|
14
|
+
dependencies = ["PyYAML>=6.0"]
|
|
15
|
+
keywords = ["spec-driven-development", "claude-code", "codex", "antigravity-cli", "agent-skills"]
|
|
16
|
+
|
|
17
|
+
[dependency-groups]
|
|
18
|
+
# 개발 도구 — `uv run`이 자동으로 설치한다
|
|
19
|
+
dev = ["pytest>=7", "ruff>=0.17", "pyright>=1.1.400"]
|
|
20
|
+
|
|
21
|
+
[project.urls]
|
|
22
|
+
Repository = "https://github.com/Jungjihyuk/LanternSpec"
|
|
23
|
+
Issues = "https://github.com/Jungjihyuk/LanternSpec/issues"
|
|
24
|
+
|
|
25
|
+
[project.scripts]
|
|
26
|
+
lantern = "lanternspec.cli:main"
|
|
27
|
+
|
|
28
|
+
[tool.setuptools.packages.find]
|
|
29
|
+
where = ["src"]
|
|
30
|
+
|
|
31
|
+
[tool.setuptools.package-data]
|
|
32
|
+
lanternspec = ["resources/**/*", "resources/**/.*"]
|
|
33
|
+
|
|
34
|
+
[tool.setuptools.exclude-package-data]
|
|
35
|
+
lanternspec = ["**/__pycache__/*", "**/*.pyc"] # 위 resources/**/* 에 캐시가 섞이지 않게
|
|
36
|
+
|
|
37
|
+
[tool.pytest.ini_options]
|
|
38
|
+
testpaths = ["tests", "src/lanternspec"]
|
|
39
|
+
addopts = "--doctest-modules" # docstring Example도 테스트로 돌린다
|
|
40
|
+
|
|
41
|
+
[tool.ruff]
|
|
42
|
+
target-version = "py312"
|
|
43
|
+
line-length = 140
|
|
44
|
+
src = ["src", "tests"]
|
|
45
|
+
|
|
46
|
+
[tool.ruff.lint]
|
|
47
|
+
# F pyflakes · E/W pycodestyle · I import 정렬(isort) · B 흔한 버그(bugbear) · UP 최신 문법(pyupgrade)
|
|
48
|
+
# ANN 타입 힌트 · D docstring
|
|
49
|
+
select = ["F", "E", "W", "I", "B", "UP", "ANN", "D"]
|
|
50
|
+
ignore = [
|
|
51
|
+
"E741", # 줄을 도는 변수 l — 코드 전반에 쓰여 있어 따로 정리할 때까지 둔다
|
|
52
|
+
"ANN401", # Any — YAML · JSON처럼 모양이 정해지지 않은 데이터에는 Any가 맞다
|
|
53
|
+
]
|
|
54
|
+
|
|
55
|
+
[tool.ruff.lint.pydocstyle]
|
|
56
|
+
convention = "google"
|
|
57
|
+
|
|
58
|
+
[tool.ruff.lint.per-file-ignores]
|
|
59
|
+
# docstring 규칙(AGENTS.md 2장)은 적용을 마친 파일에만 검사한다 — 그룹을 적용할 때마다 여기서 뺀다
|
|
60
|
+
"!src/lanternspec/{core/enums.py,core/principles.py,report/principles_doc.py,work/progress.py}" = ["D"]
|
|
61
|
+
"tests/**" = ["ANN"] # 테스트 함수는 pytest가 부르므로 타입 힌트를 요구하지 않는다
|
|
62
|
+
|
|
63
|
+
[tool.pyright]
|
|
64
|
+
include = ["src"]
|
|
65
|
+
pythonVersion = "3.12"
|
|
66
|
+
typeCheckingMode = "standard"
|
|
67
|
+
venvPath = "."
|
|
68
|
+
venv = ".venv"
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"""LanternSpec — 모르는 것은 밝히고, 걸어온 길은 보여 준다."""
|
|
2
|
+
|
|
3
|
+
from importlib.metadata import PackageNotFoundError, version
|
|
4
|
+
|
|
5
|
+
try:
|
|
6
|
+
__version__ = version("lanternspec") # 버전의 유일한 출처는 pyproject.toml — 설치할 때 옮겨 적힌 값을 읽는다
|
|
7
|
+
except PackageNotFoundError: # 설치하지 않고 소스 폴더를 바로 불러 쓸 때
|
|
8
|
+
__version__ = "0+unknown"
|