Skip to content

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-series changes 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.

  • next prints source now at: for the current version after its moves.
  • adopt checks every input before it moves anything.
  • migrate folds an old flat 2-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.