Appendix A — core file inventory
Protocol (.familiar/core/): bootstrap.md, _index.md, routes.md, state-schema.md,
extension-contract.md, familiar-behavior.md, file-handling.md, voice.md,
plain-language.md, familiar-voice.md, retrieval-fallback.md, running-scripts.md,
status-format.md, handoff-format.md, check-in.md, ingest.md, deck-rules.md,
deck-build.md, docx-rules.md, calendar-rules.md. capabilities.json and
extension-manifest.schema.json are one level up, in .familiar/ beside the core/ folder.
Agents: lookup.md, web-lookup.md.
Entry files: AGENTS.md (holds the bootstrap text), CLAUDE.md, GEMINI.md (both only reference
AGENTS.md).
Skill scripts. Each is under both .claude/skills/ and .agents/skills/.
| Script | What it does |
|---|---|
draft-document/scripts/build_pptx.py |
Builds and checks a deck (§9.5). |
draft-document/scripts/build_docx.py |
Builds and checks a Word document (§9.5). |
draft-document/scripts/tracked_edit.py |
Tracked changes and comment replies on a Word file that the team owns (§9.5). |
draft-document/scripts/xlsx_check.py |
Lists what a workbook holds and compares two versions. |
draft-document/scripts/office_render.ps1 |
The final check in real Office, on Windows (§9.5). |
ingest/scripts/extract_pdf.py |
Extracts the text of a PDF. |
ingest/scripts/extract_encite.py |
Extracts EndNote citation fields from a Word source. |
ingest/scripts/source_register.py |
Keeps the list of ingested inputs, 3-Knowledge/_source-register.md. Ingest checks it before and records after. |
Project scripts (.familiar/scripts/). All use only the standard library. Each script that
reports has a fallback: if it cannot run, the agent does the step by reading the files, and says so.
| Script | What it does |
|---|---|
project_check.py |
The read-only project health check that check-in runs (check-in.md → 4. Health check). |
timeline_views.py |
Writes 4-Trackers/_views/next-two-weeks.md and gantt.md from timeline.md, stamped with its revision. Lists dependency problems without moving any date. --json prints the overdue, upcoming and problem lists as data and writes nothing. The fleet hub reads that. --json --window N widens “upcoming” to N days for that reader. The views stay at 14 days. |
meetings_view.py |
Does the same for 4-Trackers/meetings.md (optional). It expands each series rule, applies moves, cancellations and extra meetings, and writes _views/meetings-next-weeks.md. --json --window N prints the meetings and problems as data, each meeting with its agenda from the file’s ## Agendas section. |
ref_count.py |
Counts claim tags and citation markers on a page, against its ref_carry_through stamp (ingest step 5). |
index_check.py |
Compares index rows with each page’s front matter (ingest step 6). --sync is its one write: it copies each page’s dates into its existing index row. |
task_frontier.py |
Lists open tasks whose blockers are cleared (Triage, Ongoing, check-in). |
tracker_edit.py |
The one script that writes a single milestone, task or meeting change. See below. |
draft_save.py |
The save path for 2-Drafts/. See below. |
doctor.py |
The preflight for the document toolchain (§9.5). |
update.py |
The updater (§12.1). |
tracker_edit.py writes one change, for example milestone --id M-04 --due ... --reason ... or
task --id T-12 --done. --dry-run previews the change. For each change, it:
- checks the revision and adds one to it
- replaces the file in one step
- adds the status-log entry
- writes the views again
- lists the places (snapshot, tasks, later milestones) that still name the old date
It never deletes a row and never moves another date. The fleet hub uses it for edits across projects.
--title "..." --reason ... renames a milestone or task in place. IDs never change. If a blocker
names the old title in words, the script lists it and does not rewrite it.
tracker_edit.py meeting <add-series|add-oneoff|move|cancel|edit-series|rename|agenda> does the same
for meetings.md:
- A move or cancel changes one date of a series through an exception row, or a single meeting in place. A moved date takes its agenda with it.
edit-serieschanges the series row itself.agenda --id S-01 --date YYYY-MM-DD|standing --items "A; B"sets the topic list for one date or the standing list for a series.--none "reason"records that there is no agenda.
It refuses a change that would leave the file with a problem that it did not have before, and it reports a new overlap.
draft_save.py has four commands: next, register, adopt and migrate. It plans every
move, refuses if a target already exists, and never deletes.
nextprintssource now at:for the current version after its moves.adoptchecks every input before it moves anything.migratefolds an old flat2-Drafts/into one folder per deliverable, after you see a--dry-run.
file-handling.md → Saving under 2-Drafts/ has the same steps for doing it by hand.
No skill ships a scaffold.py, because the workspace is already set up and filled in as far as it can
be.