Civ Finish Quotes
Use this skill as a final completion ritual after a real piece of work is finished.
This skill is for the last step of a substantial task, not for ordinary chat. It should feel like a Civilization technology or wonder completion line: brief, ceremonial, and anchored by a real quote with an author and source.
Compatibility
- requires local
python3
- expects access to this skill directory, especially
scripts/ and assets/quotes/approved_quotes.jsonl
Trigger Gate
Default behavior: trigger this skill for almost all task closures that produced a real result.
Use this lenient gate:
- The work has some concrete output.
Examples: code/doc updates, analysis conclusion, decision, plan, verification, checklist completion.
- The work is presented as done for this turn.
Examples: "finished", "completed", "done", "ready", "交付", "完成", "发布".
Only skip this skill for clear non-completion micro replies:
- casual replies
- tiny fixes
- a single command answer
- brainstorming that has not been implemented
- tasks that ended with uncertainty or partial progress
Runtime Flow
When the trigger gate passes:
- Summarize the finished task into a small JSON payload.
- Call the local render script.
- If it returns
no_match, say nothing extra and end normally.
- If it returns
ok, read quote_text and needs_translation.
- If
needs_translation=true, translate quote_text into the user's language in the final reply.
- Compose the final ceremonial block in the user's language with a fixed divider line.
Hard Rules
- Never invent, paraphrase, or "write something quote-like" yourself.
- Only output a completion quote when the renderer returns
status="ok".
- The final quote body must come from the renderer's returned
quote_text.
- The attribution must come from the renderer's returned
author and source_title.
- If the renderer returns
no_match, do not add a fallback quote, a hand-written ceremonial line, or a pseudo-quote.
Request Payload
Use this structure:
{
"task_summary": "Implemented the new quote selection pipeline and documented the curation flow.",
"deliverable_type": "code",
"completion_class": "engineering",
"completion_mode": "build",
"keywords": ["pipeline", "selection", "curation", "script"],
"user_language": "zh-CN",
"recent_quote_ids": []
}
Completion Classes
science: analysis, investigation, model design, research, root-cause work
engineering: implementation, refactor, tooling, architecture, shipping a system
governance: process, policy, permissions, stability, ownership, organization
art-thought: writing, naming, concept shaping, knowledge organization, design rationale
Completion Modes
breakthrough
build
organization
insight
Render Command
Run:
python3 ./scripts/render_finish_quote.py --library ./assets/quotes/approved_quotes.jsonl --input-json '<JSON_PAYLOAD>'
The renderer returns:
{"status":"ok","id":"...","quote_text":"...","needs_translation":true|false,"author":"...","source_title":"...","divider":"----------","selection_mode":"ranked|fallback","selection_profile":{...},"match_reason":{...},"rejected_candidates":[...] }
- or
{"status":"no_match"}
Notes:
selection_mode=fallback means the request looked like a completed task, but keyword matching was sparse; the renderer still selected a domain/mode-consistent quote to reduce misses.
- The selector enforces a relevance floor; if relevance is too low it returns
no_match.
- The renderer keeps a small local history file and tries to avoid reusing the same quote within a rolling 24-hour window when other good candidates exist.
- By default it tries to store that history in the user cache directory, and falls back to a repo-local
.cache/ when the runtime cannot write there.
- For design-document style tasks, governance/organization requests are remapped toward engineering/build semantics to reduce topic drift.
- For non-sensitive tasks, high-risk themes (race/colonial trauma/war-massacre style language) are filtered out by default.
Output Contract
The final quote block must:
- start with the fixed divider line
----------
- show only the user-language version of the quote body
- always include author
- always include source
- use only renderer-returned fields for quote body and attribution
- avoid extra commentary after the quote block
Use this shape:
----------
“<translated quote>”
—— <author>,《<source title>》
Source: huxiuhan/civ-finish-quotes — distributed by TomeVault.
1---2name: civ-finish-quotes3description: Add a Civilization-style ceremonial quote when a substantial task is truly complete. Use this whenever the user or agent is wrapping up a real deliverable such as a feature, refactor, analysis, design doc, process change, report, or writing task, even if they do not explicitly ask for a quote; skip short replies, tiny fixes, and unfinished work. Use when this capability is needed.4---56# Civ Finish Quotes78Use this skill as a final completion ritual after a real piece of work is finished.910This skill is for the last step of a substantial task, not for ordinary chat. It should feel like a Civilization technology or wonder completion line: brief, ceremonial, and anchored by a real quote with an author and source.1112## Compatibility1314- requires local `python3`15- expects access to this skill directory, especially `scripts/` and `assets/quotes/approved_quotes.jsonl`1617## Trigger Gate1819Default behavior: trigger this skill for almost all task closures that produced a real result.2021Use this lenient gate:22231. The work has some concrete output.24 Examples: code/doc updates, analysis conclusion, decision, plan, verification, checklist completion.252. The work is presented as done for this turn.26 Examples: "finished", "completed", "done", "ready", "交付", "完成", "发布".2728Only skip this skill for clear non-completion micro replies:2930- casual replies31- tiny fixes32- a single command answer33- brainstorming that has not been implemented34- tasks that ended with uncertainty or partial progress3536## Runtime Flow3738When the trigger gate passes:39401. Summarize the finished task into a small JSON payload.412. Call the local render script.423. If it returns `no_match`, say nothing extra and end normally.434. If it returns `ok`, read `quote_text` and `needs_translation`.445. If `needs_translation=true`, translate `quote_text` into the user's language in the final reply.456. Compose the final ceremonial block in the user's language with a fixed divider line.4647## Hard Rules4849- Never invent, paraphrase, or "write something quote-like" yourself.50- Only output a completion quote when the renderer returns `status="ok"`.51- The final quote body must come from the renderer's returned `quote_text`.52- The attribution must come from the renderer's returned `author` and `source_title`.53- If the renderer returns `no_match`, do not add a fallback quote, a hand-written ceremonial line, or a pseudo-quote.5455## Request Payload5657Use this structure:5859```json60{61 "task_summary": "Implemented the new quote selection pipeline and documented the curation flow.",62 "deliverable_type": "code",63 "completion_class": "engineering",64 "completion_mode": "build",65 "keywords": ["pipeline", "selection", "curation", "script"],66 "user_language": "zh-CN",67 "recent_quote_ids": []68}69```7071### Completion Classes7273- `science`: analysis, investigation, model design, research, root-cause work74- `engineering`: implementation, refactor, tooling, architecture, shipping a system75- `governance`: process, policy, permissions, stability, ownership, organization76- `art-thought`: writing, naming, concept shaping, knowledge organization, design rationale7778### Completion Modes7980- `breakthrough`81- `build`82- `organization`83- `insight`8485## Render Command8687Run:8889```bash90python3 ./scripts/render_finish_quote.py --library ./assets/quotes/approved_quotes.jsonl --input-json '<JSON_PAYLOAD>'91```9293The renderer returns:9495- `{"status":"ok","id":"...","quote_text":"...","needs_translation":true|false,"author":"...","source_title":"...","divider":"----------","selection_mode":"ranked|fallback","selection_profile":{...},"match_reason":{...},"rejected_candidates":[...] }`96- or `{"status":"no_match"}`9798Notes:99100- `selection_mode=fallback` means the request looked like a completed task, but keyword matching was sparse; the renderer still selected a domain/mode-consistent quote to reduce misses.101- The selector enforces a relevance floor; if relevance is too low it returns `no_match`.102- The renderer keeps a small local history file and tries to avoid reusing the same quote within a rolling 24-hour window when other good candidates exist.103- By default it tries to store that history in the user cache directory, and falls back to a repo-local `.cache/` when the runtime cannot write there.104- For design-document style tasks, governance/organization requests are remapped toward engineering/build semantics to reduce topic drift.105- For non-sensitive tasks, high-risk themes (race/colonial trauma/war-massacre style language) are filtered out by default.106107## Output Contract108109The final quote block must:110111- start with the fixed divider line `----------`112- show only the user-language version of the quote body113- always include author114- always include source115- use only renderer-returned fields for quote body and attribution116- avoid extra commentary after the quote block117118Use this shape:119120```text121----------122123“<translated quote>”124—— <author>,《<source title>》125```126127---128> Source: [huxiuhan/civ-finish-quotes](https://github.com/huxiuhan/civ-finish-quotes) — distributed by [TomeVault](https://tomevault.io).129<!-- tomevault:4.0:skill_md:2026-06-17 -->