| name | civ-finish-quotes |
| description | 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. |
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>》