future
Navigate and manage the future/ directory — view dependency graphs, filter by arc, find unblocked futures, and identify what to work on next. Use when deciding what to work on, exploring planned work, or checking dependencies between futures.
Best use case
future is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Navigate and manage the future/ directory — view dependency graphs, filter by arc, find unblocked futures, and identify what to work on next. Use when deciding what to work on, exploring planned work, or checking dependencies between futures.
Teams using future should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/future/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How future Compares
| Feature / Agent | future | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Navigate and manage the future/ directory — view dependency graphs, filter by arc, find unblocked futures, and identify what to work on next. Use when deciding what to work on, exploring planned work, or checking dependencies between futures.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Future
The `future/` directory is a knowledge graph of where Plain is headed.
## Structure
```
future/
postgres-first-data-layer/
ARC.md # vision + numbered sequence
models-explicit-create-update.md
...
real-time-server/
ARC.md
server-h2-websockets.md
...
```
- **Arc directories** — narrative groupings, the big stories of where Plain is headed
- **ARC.md** — each arc's vision and numbered sequence of futures
- **Future files** — each one describes a possible future state of the project
Every future must belong to an arc — no top-level orphan files. If a future doesn't fit an existing arc, create a new arc for it.
## Futures
Individual markdown files with optional YAML frontmatter:
```yaml
---
branch: pool
related:
- server-performance
depends_on:
- db-connection-pool
---
# Title
Content...
```
### Frontmatter fields
- `branch` (optional): git branch with work-in-progress for this future. One branch per future — if a future needs multiple branches, split the future.
- `related` (optional): linked futures — conceptual connections (bidirectional)
- `depends_on` (optional): hard dependency — this future is blocked until the dependency is done. Mostly used for cross-arc blocks.
### Naming
- Don't prefix filenames with `plain-` — use `models-cursor-paginator.md` not `plain-models-cursor-paginator.md`
- `related` and `depends_on` reference filenames without `.md`
## Arcs
Arc membership is determined by directory. Each arc directory contains an `ARC.md` with:
1. **Vision** — what Plain looks like at the end of this arc
2. **Sequence** — checklist of linked futures in intended order (place near the top, right after the vision)
Format: `- [ ] [future-name](future-name.md)` — checked when done. The sequence is the editorial ordering — "this is the path we'd like to take." `depends_on` is for hard blocks that can't be reordered. Any deeper context (research, references, industry analysis) goes after the sequence.
Current arcs:
- `migration-rethink` — convergence, migration safety, migration format
- `model-api` — explicit create/persist, PK prevention, default querysets
- `related-fields` — descriptor consolidation, deferred FK loading, N+1 prevention
- `query-api` — typed query interface, cursor pagination
- `postgres-native` — connection pooling, psycopg3, native schema, FTS, DB-level ON DELETE
- `field-api` — field parameter cleanup (choices, max_length, enums)
- `real-time-server` — HTTP/2, websockets, realtime, performance
- `production-hardening` — security, compliance, operational maturity
- `uncategorized` — futures that don't belong to a specific arc yet
## Scripts
Run via `.claude/skills/future/future <command>`:
| Command | Purpose |
| ------------- | ------------------------------------------------------- |
| `next` | Unblocked futures sorted by downstream impact (default) |
| `graph` | Full dependency tree from roots to leaves |
| `list` | All futures with status (root/ready/blocked) |
| `show <name>` | Details for one future (partial match ok) |
| `arcs` | List all arcs with futures in sequence order |
All commands support `--json` for structured output.
### Filters
- `list --arc <term>` — filter by arc (e.g. `postgres`, `server`)
- `list --search <term>` — search titles and filenames
## Presenting results
**Always summarize command output for the user.** The raw terminal output is not visible to them. After running any script command, present the results in your own words using markdown — describe what the data shows, highlight key patterns (blocked items, cross-arc dependencies, what's next), and provide context. Don't just run a command and stop.
## Workflow
When the user asks about priorities or what to do next:
1. Run `arcs` to see the full picture — all arcs with futures in sequence order
2. Run `next` to see unblocked futures ranked by impact
3. Use `show <name>` to dive into a specific future's dependencies and context
4. Read the actual future file for the full content
5. Present a summary to the user — describe each arc, what's blocked and why, and what's actionable
When the user asks to start working on a future:
1. Run `show <name>` to check dependencies and status
2. Read the future file for full context
3. Read the arc's `ARC.md` for the broader vision
4. Read any `related` or `depends_on` futures that provide useful background
5. Proceed with implementation
When a future is completed:
1. Delete the future file
2. If the entire arc is complete (all futures done), delete the arc directory
3. Clean up `related` and `depends_on` references to deleted futures in other files
4. Update the arc list in this skill if an arc was removed
When creating a new future:
1. Place it in an arc directory — every future must belong to an arc. If no arc fits, create a new one.
2. Add it to the arc's `ARC.md` sequence in the right position
3. Add `related` to link conceptually connected futures
4. Add `depends_on` only for hard cross-arc blocksRelated Skills
plainx-release
Releases plainx packages with version suggestions, changelog generation, and git tagging. Use when releasing a package to PyPI.
release
Releases Plain packages with intelligent version suggestions and parallel release notes generation. Use when releasing packages to PyPI.
plain-upgrade
Upgrades Plain packages and applies required migration changes. Use when updating to newer package versions.
plain-postgres-doctor
Check overall database health — schema correctness and operational health. Use when asked to check the database, validate schema, optimize indexes, or diagnose Postgres problems.
plain-portal
Open a remote Python shell on a production machine via encrypted tunnel. Use when you need to inspect production data, debug issues, run queries, or transfer files.
plain-optimize
Captures and analyzes performance traces to identify slow queries and N+1 problems. Use when a page is slow, there are too many queries, or the user asks about performance.
plain-install
Installs Plain packages and guides through setup steps. Use when adding new packages to a project.
plain-guide
Answer questions about the Plain framework by researching docs and source code. Use when asked "how do I...", "does Plain support...", or "how does X work?" questions.
plain-bug
Submit a bug report for the Plain framework. Use when the user wants to report a bug, error, or unexpected behavior. Collects context and creates a GitHub issue.
soft-predict-future
Activate this skill for ANY future-oriented question. Triggers include: "Will [X]?", "Who will win [X]?", "What happens to [X]?", "Can [X] succeed?", "What's the future of X?", foresight analysis, scenario planning, STEEEP analysis, futures cone, prediction requests, or any question about a future outcome. Year is NOT required — the engine infers the horizon. Also activate when the user says "predict", "forecast", "what are the odds", "scenario analysis", or asks about competitive races, technology adoption, geopolitical shifts, or market dominance. REQUIRES web search to be enabled — if web search is unavailable, tell the user before proceeding.
hard-predict-future
Activate this agent for any future-oriented question that requires deep quantitative analysis, historical precedents, and structured scenario planning. Triggers include: "Will [X]?", "Who will win [X]?", "What happens to [X]?", prediction requests with high stakes, foresight analysis, STEEEP scenario planning, futures cone, competitive race analysis, technology adoption curves, geopolitical shifts, or any question about a future outcome that deserves rigorous multi-step analysis. This agent runs a 12-step deterministic pipeline: Claude handles intelligence, Python handles all arithmetic. Year is NOT required — the engine infers the horizon. REQUIRES: Bash tool + Python 3.x. Not compatible with claude.ai web (use Soft Predict Future instead).
compose-multiplatform-patterns
KMP项目中的Compose Multiplatform和Jetpack Compose模式——状态管理、导航、主题化、性能优化和平台特定UI。