@forwardimpact/outpost 3.3.4 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/LICENSE +21 -201
  2. package/config/skill-postures.json +28 -0
  3. package/package.json +2 -4
  4. package/src/agent-path.js +42 -0
  5. package/src/agent-runner.js +60 -17
  6. package/src/kb-manager.js +5 -7
  7. package/src/outpost.js +43 -1
  8. package/src/posture.js +77 -0
  9. package/src/socket-server.js +15 -6
  10. package/src/spawn-env.js +62 -0
  11. package/src/state-manager.js +17 -2
  12. package/templates/.claude/agents/chief-of-staff.md +24 -9
  13. package/templates/.claude/agents/concierge.md +14 -0
  14. package/templates/.claude/agents/head-hunter.md +14 -0
  15. package/templates/.claude/agents/librarian.md +19 -7
  16. package/templates/.claude/agents/postman.md +14 -0
  17. package/templates/.claude/agents/recruiter.md +21 -12
  18. package/templates/.claude/settings.json +4 -0
  19. package/templates/.claude/skills/anarlog-follow/SKILL.md +7 -7
  20. package/templates/.claude/skills/anarlog-process/SKILL.md +15 -16
  21. package/templates/.claude/skills/anarlog-process/references/extraction.md +5 -5
  22. package/templates/.claude/skills/candidate-report/SKILL.md +9 -9
  23. package/templates/.claude/skills/deck-create/SKILL.md +2 -2
  24. package/templates/.claude/skills/deck-summarize/SKILL.md +2 -2
  25. package/templates/.claude/skills/deck-summarize/references/brief-template.md +1 -1
  26. package/templates/.claude/skills/doc-collab/SKILL.md +8 -8
  27. package/templates/.claude/skills/doc-create/SKILL.md +3 -3
  28. package/templates/.claude/skills/draft-emails/SKILL.md +19 -19
  29. package/templates/.claude/skills/draft-emails/references/template.md +1 -1
  30. package/templates/.claude/skills/draft-emails/scripts/scan-emails.mjs +4 -4
  31. package/templates/.claude/skills/draft-emails/scripts/send-email.mjs +2 -2
  32. package/templates/.claude/skills/extract-entities/SKILL.md +16 -17
  33. package/templates/.claude/skills/extract-entities/references/TEMPLATES.md +2 -2
  34. package/templates/.claude/skills/extract-entities/references/conditions.md +4 -4
  35. package/templates/.claude/skills/extract-entities/references/links.md +3 -18
  36. package/templates/.claude/skills/extract-entities/references/recruitment.md +8 -8
  37. package/templates/.claude/skills/extract-entities/references/resolution.md +3 -5
  38. package/templates/.claude/skills/extract-entities/references/sources.md +1 -1
  39. package/templates/.claude/skills/extract-entities/references/templates-conditions.md +2 -2
  40. package/templates/.claude/skills/extract-entities/references/templates-priorities.md +32 -0
  41. package/templates/.claude/skills/extract-entities/references/templates-projects-topics.md +2 -2
  42. package/templates/.claude/skills/meeting-prep/SKILL.md +18 -19
  43. package/templates/.claude/skills/req-assess/SKILL.md +11 -11
  44. package/templates/.claude/skills/req-assess/references/interview-template.md +1 -1
  45. package/templates/.claude/skills/req-assess/references/panel-template.md +1 -1
  46. package/templates/.claude/skills/req-decide/SKILL.md +17 -17
  47. package/templates/.claude/skills/req-decide/references/template.md +1 -1
  48. package/templates/.claude/skills/req-forget/SKILL.md +8 -8
  49. package/templates/.claude/skills/req-forget/references/classify.md +4 -4
  50. package/templates/.claude/skills/req-forget/references/locations.md +10 -10
  51. package/templates/.claude/skills/req-forget/references/report-template.md +8 -8
  52. package/templates/.claude/skills/req-scan/SKILL.md +3 -3
  53. package/templates/.claude/skills/req-scan/references/template.md +1 -1
  54. package/templates/.claude/skills/req-screen/SKILL.md +9 -9
  55. package/templates/.claude/skills/req-screen/references/template.md +1 -1
  56. package/templates/.claude/skills/req-track/SKILL.md +17 -17
  57. package/templates/.claude/skills/req-track/references/fields.md +8 -8
  58. package/templates/.claude/skills/req-track/references/signals.md +2 -2
  59. package/templates/.claude/skills/req-track/references/templates.md +1 -1
  60. package/templates/.claude/skills/req-workday/SKILL.md +12 -12
  61. package/templates/.claude/skills/req-workday/references/templates.md +3 -3
  62. package/templates/.claude/skills/send-chat/SKILL.md +4 -4
  63. package/templates/.claude/skills/upstream-instructions/SKILL.md +154 -0
  64. package/templates/.claude/skills/upstream-instructions/references/examples.md +97 -0
  65. package/templates/CLAUDE.md +47 -53
  66. package/templates/.claude/skills/extract-entities/references/templates-goals-priorities.md +0 -63
  67. package/templates/.claude/skills/upstream-skill/SKILL.md +0 -130
  68. package/templates/.claude/skills/upstream-skill/references/examples.md +0 -80
  69. package/templates/knowledge/Briefings/.gitkeep +0 -0
@@ -1,7 +1,7 @@
1
1
  # Engineering Brief Template
2
2
 
3
3
  Reference template for `deck-summarize` Step 8. Save the assembled brief to
4
- `knowledge/Projects/{Project Name} - Engineering Brief.md`.
4
+ `Knowledge/Projects/{Project Name} - Engineering Brief.md`.
5
5
 
6
6
  ```markdown
7
7
  ---
@@ -20,12 +20,12 @@ Run when the user asks to create, edit, review, or collaborate on a document.
20
20
  ## Inputs
21
21
 
22
22
  - User's editing instructions
23
- - `knowledge/` — existing notes and documents
23
+ - `Knowledge/` — existing notes and documents
24
24
  - Document to edit (user-specified or searched)
25
25
 
26
26
  ## Outputs
27
27
 
28
- - Created or modified documents in `knowledge/` or user-specified location
28
+ - Created or modified documents in `Knowledge/` or user-specified location
29
29
 
30
30
  ---
31
31
 
@@ -54,8 +54,8 @@ Follow their choice for the entire session.
54
54
  Search thoroughly before saying a document doesn't exist:
55
55
 
56
56
  ```bash
57
- rg -l -i "roadmap" knowledge/
58
- find knowledge/ -iname "*roadmap*" 2>/dev/null
57
+ rg -l -i "roadmap" Knowledge/
58
+ find Knowledge/ -iname "*roadmap*" 2>/dev/null
59
59
  ```
60
60
 
61
61
  **If found:** Read it and proceed. **If NOT found:** Ask "I couldn't find
@@ -63,7 +63,7 @@ find knowledge/ -iname "*roadmap*" 2>/dev/null
63
63
 
64
64
  **Creating new documents:**
65
65
 
66
- 1. Ask: "Shall I create knowledge/[name].md?"
66
+ 1. Ask: "Shall I create Knowledge/[name].md?"
67
67
  2. Create with just a title — don't pre-populate with structure
68
68
  3. Ask: "What would you like in this?"
69
69
 
@@ -97,9 +97,9 @@ don't reorganize unless asked.
97
97
  When the user mentions people, companies, or projects:
98
98
 
99
99
  ```bash
100
- rg -l "Name" knowledge/
101
- cat "knowledge/People/Person.md"
102
- cat "knowledge/Organizations/Company.md"
100
+ rg -l "Name" Knowledge/
101
+ cat "Knowledge/People/Person.md"
102
+ cat "Knowledge/Organizations/Company.md"
103
103
  ```
104
104
 
105
105
  Use `[[wiki-links]]` to connect to other notes. Only link to notes that exist.
@@ -23,18 +23,18 @@ submission, brief, or any multi-page PDF that is not a slide deck.
23
23
  ## Inputs
24
24
 
25
25
  - User's description of the document
26
- - `knowledge/` — optional context about company, product, team, projects
26
+ - `Knowledge/` — optional context about company, product, team, projects
27
27
 
28
28
  ## Outputs
29
29
 
30
30
  - An HTML file and a PDF rendered from it, placed where the user specifies
31
- (default: `knowledge/Projects/`)
31
+ (default: `Knowledge/Projects/`)
32
32
 
33
33
  ---
34
34
 
35
35
  ## Workflow
36
36
 
37
- 1. Check `knowledge/` for relevant context about the company, product, team,
37
+ 1. Check `Knowledge/` for relevant context about the company, product, team,
38
38
  projects, or people mentioned.
39
39
  2. Ensure Playwright is installed:
40
40
  `bun install playwright && bunx playwright install chromium`
@@ -22,13 +22,13 @@ The user asks to draft, reply to, respond to, or send an email.
22
22
 
23
23
  | Data | Location |
24
24
  | --------------- | -------------------------------------------- |
25
- | People | `knowledge/People/*.md` |
26
- | Organizations | `knowledge/Organizations/*.md` |
25
+ | People | `Knowledge/People/*.md` |
26
+ | Organizations | `Knowledge/Organizations/*.md` |
27
27
  | Email threads | `~/.cache/fit/outpost/apple_mail/*.md` |
28
28
  | Calendar events | `~/.cache/fit/outpost/apple_calendar/*.json` |
29
- | Handled IDs | `drafts/handled` (one ID per line) |
30
- | Ignored IDs | `drafts/ignored` (one ID per line) |
31
- | Draft files | `drafts/{email_id}_draft.md` |
29
+ | Handled IDs | `Drafts/handled` (one ID per line) |
30
+ | Ignored IDs | `Drafts/ignored` (one ID per line) |
31
+ | Draft files | `Drafts/{email_id}_draft.md` |
32
32
 
33
33
  `handled` and `ignored` both exclude threads from `scan-emails.mjs`. Use
34
34
  `handled` for resolved threads (sent here, replied manually, resolved via DM);
@@ -37,7 +37,7 @@ reply).
37
37
 
38
38
  <do_confirm_checklist goal="Verify a draft is safe and ready before sending">
39
39
 
40
- - [ ] Sender and organization were looked up in `knowledge/` before drafting.
40
+ - [ ] Sender and organization were looked up in `Knowledge/` before drafting.
41
41
  - [ ] Draft is a single email (not multiple variants) and matches the incoming
42
42
  tone.
43
43
  - [ ] Body has no sign-off / name / "Best" — Apple Mail signature handles it.
@@ -45,7 +45,7 @@ reply).
45
45
  direct-to-candidate draft is flagged `⚠️ RECRUITER ONLY`.
46
46
  - [ ] No sensitive personal data (health, politics, etc.) was included.
47
47
  - [ ] User has explicitly approved the draft before any send.
48
- - [ ] Send used `--draft <path>` so cleanup and `drafts/handled` happen
48
+ - [ ] Send used `--draft <path>` so cleanup and `Drafts/handled` happen
49
49
  automatically.
50
50
 
51
51
  </do_confirm_checklist>
@@ -59,11 +59,11 @@ node scripts/scan-emails.mjs
59
59
  ```
60
60
 
61
61
  Outputs `email_id<TAB>subject` for unprocessed emails (those not in
62
- `drafts/handled` or `drafts/ignored`).
62
+ `Drafts/handled` or `Drafts/ignored`).
63
63
 
64
64
  ### 2. Classify
65
65
 
66
- **Ignore** (append ID to `drafts/ignored`): newsletters, marketing, automated
66
+ **Ignore** (append ID to `Drafts/ignored`): newsletters, marketing, automated
67
67
  notifications, spam, outbound with no reply.
68
68
 
69
69
  **Draft a response**: meeting requests, personal mail from known contacts,
@@ -73,12 +73,12 @@ Be conservative with ignore — when in doubt, draft.
73
73
 
74
74
  ### 3. Gather context
75
75
 
76
- Before drafting, look up the sender and organization in `knowledge/`:
76
+ Before drafting, look up the sender and organization in `Knowledge/`:
77
77
 
78
78
  ```bash
79
- rg -l "sender_name" knowledge/
80
- cat "knowledge/People/Sender Name.md"
81
- cat "knowledge/Organizations/Company Name.md"
79
+ rg -l "sender_name" Knowledge/
80
+ cat "Knowledge/People/Sender Name.md"
81
+ cat "Knowledge/Organizations/Company Name.md"
82
82
  ```
83
83
 
84
84
  For scheduling emails, also read the relevant calendar event:
@@ -93,7 +93,7 @@ unclear or the person has multiple contexts, **ask** rather than guess.
93
93
 
94
94
  ### 4. Write the draft
95
95
 
96
- Save to `drafts/{email_id}_draft.md` using the template in
96
+ Save to `Drafts/{email_id}_draft.md` using the template in
97
97
  [references/template.md](references/template.md). Reference past interactions
98
98
  naturally; for scheduling, propose specific times from calendar availability.
99
99
 
@@ -101,7 +101,7 @@ naturally; for scheduling, propose specific times from calendar availability.
101
101
 
102
102
  Candidates **must never** be copied on internal threads about them.
103
103
 
104
- - Identify the candidate from the thread and `knowledge/Candidates/`.
104
+ - Identify the candidate from the thread and `Knowledge/Candidates/`.
105
105
  - Strip the candidate from To/CC; draft to internal stakeholders only.
106
106
  - Direct-to-candidate emails carry the warning header
107
107
  `⚠️ RECRUITER ONLY — This email goes directly to the candidate.`
@@ -124,18 +124,18 @@ node scripts/send-email.mjs \
124
124
  --cc "other@example.com" \
125
125
  --subject "Re: Subject" \
126
126
  --body "Plain text body" \
127
- --draft "drafts/12345_draft.md"
127
+ --draft "Drafts/12345_draft.md"
128
128
  ```
129
129
 
130
130
  Required: `--to`, `--subject`, `--body` (plain text). Optional: `--cc`, `--bcc`,
131
131
  `--draft`. With `--draft`, the draft file is deleted and the email ID is
132
- appended to `drafts/handled` automatically.
132
+ appended to `Drafts/handled` automatically.
133
133
 
134
134
  ### 8. Mark handled without sending
135
135
 
136
136
  When a thread is resolved through other channels:
137
137
 
138
138
  ```bash
139
- echo "$EMAIL_ID" >> drafts/handled
140
- rm -f "drafts/${EMAIL_ID}_draft.md"
139
+ echo "$EMAIL_ID" >> Drafts/handled
140
+ rm -f "Drafts/${EMAIL_ID}_draft.md"
141
141
  ```
@@ -1,6 +1,6 @@
1
1
  # Draft File Template
2
2
 
3
- Save each draft to `drafts/{email_id}_draft.md` using this layout:
3
+ Save each draft to `Drafts/{email_id}_draft.md` using this layout:
4
4
 
5
5
  ```markdown
6
6
  # Draft Response
@@ -3,7 +3,7 @@
3
3
  * Scan for unprocessed emails and output their IDs and subjects.
4
4
  *
5
5
  * Checks ~/.cache/fit/outpost/apple_mail/ for email thread markdown files not
6
- * yet listed in drafts/handled or drafts/ignored. Outputs one tab-separated
6
+ * yet listed in Drafts/handled or Drafts/ignored. Outputs one tab-separated
7
7
  * line per unprocessed thread: email_id<TAB>subject. Used by the draft-emails
8
8
  * skill to identify threads that need a reply.
9
9
  */
@@ -17,7 +17,7 @@ const HELP = `scan-emails — list unprocessed email threads
17
17
  Usage: node scripts/scan-emails.mjs [-h|--help]
18
18
 
19
19
  Scans ~/.cache/fit/outpost/apple_mail/ for .md thread files not yet
20
- recorded in drafts/handled or drafts/ignored. Outputs one line per
20
+ recorded in Drafts/handled or Drafts/ignored. Outputs one line per
21
21
  unprocessed thread as: email_id<TAB>subject`;
22
22
 
23
23
  if (process.argv.includes("-h") || process.argv.includes("--help")) {
@@ -49,8 +49,8 @@ function extractSubject(filePath) {
49
49
  function main() {
50
50
  if (!existsSync(MAIL_DIR)) return;
51
51
 
52
- const handled = loadIdSet("drafts/handled");
53
- const ignored = loadIdSet("drafts/ignored");
52
+ const handled = loadIdSet("Drafts/handled");
53
+ const ignored = loadIdSet("Drafts/ignored");
54
54
 
55
55
  for (const name of readdirSync(MAIL_DIR).sort()) {
56
56
  if (!name.endsWith(".md")) continue;
@@ -30,7 +30,7 @@ Options:
30
30
  --bcc <addrs> Comma-separated BCC recipients
31
31
  --subject <subj> Email subject line (required)
32
32
  --body <text> Plain-text email body (required)
33
- --draft <path> Draft file — deleted after send, ID appended to drafts/handled
33
+ --draft <path> Draft file — deleted after send, ID appended to Drafts/handled
34
34
  -h, --help Show this help message and exit
35
35
 
36
36
  Mail.app must be running. No signature or sign-off needed — Apple Mail appends it.`;
@@ -113,7 +113,7 @@ function handleDraftCleanup(draft) {
113
113
  const draftBasename = basename(draft, ".md");
114
114
  const emailId = draftBasename.replace(/_draft$/, "");
115
115
  if (emailId) {
116
- appendFileSync("drafts/handled", emailId + "\n");
116
+ appendFileSync("Drafts/handled", emailId + "\n");
117
117
  console.log(`Marked as handled: ${emailId}`);
118
118
  }
119
119
  }
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  name: extract-entities
3
- description: Process synced email/calendar files from ~/.cache/fit/outpost/ and ad-hoc document files (e.g. from ~/Desktop/ or ~/Downloads/) to extract structured knowledge into knowledge/ as Obsidian-compatible markdown notes. Use on a schedule, when the user asks to process/extract entities, or when invoked by another skill (e.g. organize-files). Builds the core knowledge graph from raw data.
3
+ description: Process synced email/calendar files from ~/.cache/fit/outpost/ and ad-hoc document files (e.g. from ~/Desktop/ or ~/Downloads/) to extract structured knowledge into Knowledge/ as Obsidian-compatible markdown notes. Use on a schedule, when the user asks to process/extract entities, or when invoked by another skill (e.g. organize-files). Builds the core knowledge graph from raw data.
4
4
  ---
5
5
 
6
6
  # Extract Entities
7
7
 
8
8
  Process synced email and calendar files from `~/.cache/fit/outpost/`, plus
9
9
  ad-hoc documents passed by other skills, into Obsidian-compatible markdown notes
10
- under `knowledge/`. The core knowledge-graph builder.
10
+ under `Knowledge/`. The core knowledge-graph builder.
11
11
 
12
12
  ## Trigger
13
13
 
@@ -35,13 +35,13 @@ under `knowledge/`. The core knowledge-graph builder.
35
35
 
36
36
  ## Outputs
37
37
 
38
- - `knowledge/People/`, `knowledge/Organizations/`, `knowledge/Projects/`,
39
- `knowledge/Topics/` — created or updated.
40
- - `knowledge/Goals/`, `knowledge/Priorities/` — **updated only**, never
38
+ - `Knowledge/People/`, `Knowledge/Organizations/`, `Knowledge/Projects/`,
39
+ `Knowledge/Topics/` — created or updated.
40
+ - `Knowledge/Priorities/` — **updated only**, never
41
41
  auto-created.
42
- - `knowledge/Conditions/` — created when cross-cutting patterns are detected, or
42
+ - `Knowledge/Conditions/` — created when cross-cutting patterns are detected, or
43
43
  updated.
44
- - `knowledge/Roles/`, `knowledge/Candidates/*/brief.md` — enriched with inferred
44
+ - `Knowledge/Roles/`, `Knowledge/Candidates/*/brief.md` — enriched with inferred
45
45
  metadata.
46
46
  - `~/.cache/fit/outpost/state/graph_processed` — updated.
47
47
 
@@ -55,10 +55,10 @@ well-grounded notes">
55
55
  a substantive `## Summary`, calendar-only attendees routed to Organization
56
56
  `## Contacts`.
57
57
  - [ ] All links use absolute paths `[[Folder/Name]]`; bidirectional links
58
- consistent (incl. GoalProject, Priority ↔ Goal).
58
+ consistent (incl. Project ↔ Priority).
59
59
  - [ ] Summaries describe relationship, not communication method; key facts are
60
60
  substantive; open items are commitments.
61
- - [ ] State changes logged with `[Field → value]`; no Goal or Priority entities
61
+ - [ ] State changes logged with `[Field → value]`; no Priority entities
62
62
  auto-created.
63
63
  - [ ] Conditions created only when ≥ 3 entities reference the same cross-cutting
64
64
  state; resolution detected when evidence supports.
@@ -89,13 +89,13 @@ instead of scanning `~/.cache/fit/outpost/` — still check each against
89
89
  ### 1. Build the knowledge index
90
90
 
91
91
  ```bash
92
- find knowledge/People knowledge/Organizations knowledge/Projects \
93
- knowledge/Topics knowledge/Goals knowledge/Priorities \
94
- knowledge/Conditions -name "*.md" 2>/dev/null
92
+ find Knowledge/People Knowledge/Organizations Knowledge/Projects \
93
+ Knowledge/Topics Knowledge/Priorities \
94
+ Knowledge/Conditions -name "*.md" 2>/dev/null
95
95
  ```
96
96
 
97
97
  For each note, `head -20` to capture key fields. Build a mental index of People,
98
- Organizations, Projects, Goals, Priorities, Topics by name, email, organization,
98
+ Organizations, Projects, Priorities, Topics by name, email, organization,
99
99
  role, status, and aliases.
100
100
 
101
101
  ### 2. Classify the source
@@ -123,7 +123,7 @@ Collect every name variant per
123
123
  For each variant, search the knowledge index. Apply the
124
124
  [matching table](references/resolution.md#matching) and the
125
125
  [disambiguation priority](references/resolution.md#disambiguation-priority).
126
- Goals and Priorities are
126
+ Priorities are
127
127
  [never auto-created](references/resolution.md#never-auto-create) — link to
128
128
  existing entries only.
129
129
 
@@ -150,9 +150,8 @@ filler or meta-commentary.
150
150
  - **Recruitment** (Req-number detection, hiring-manager / recruiter /
151
151
  domain-lead inference):
152
152
  [references/recruitment.md](references/recruitment.md).
153
- - **Goal & Priority links** (Step 7c): rules in
154
- [references/links.md](references/links.md#goals-step-7c) and
155
- [Priorities](references/links.md#priorities-step-7c). **Never auto-create.**
153
+ - **Priority links** (Step 7c): rules in
154
+ [references/links.md](references/links.md#priorities-step-7c). **Never auto-create.**
156
155
  - **Conditions** (cross-cutting states affecting ≥ 3 entities):
157
156
  [references/conditions.md](references/conditions.md).
158
157
 
@@ -7,8 +7,8 @@ index.
7
7
  - [templates-people-orgs.md](templates-people-orgs.md) — People, Organizations.
8
8
  - [templates-projects-topics.md](templates-projects-topics.md) — Projects,
9
9
  Topics.
10
- - [templates-goals-priorities.md](templates-goals-priorities.md) — Goals,
11
- Priorities. **Never auto-created** by `extract-entities` or `anarlog-process`
10
+ - [templates-priorities.md](templates-priorities.md) — Priorities.
11
+ **Never auto-created** by `extract-entities` or `anarlog-process`
12
12
  — set by the user.
13
13
  - [templates-conditions.md](templates-conditions.md) — Conditions (time-bound
14
14
  cross-cutting states).
@@ -20,7 +20,7 @@ same constraint or state, suspect a Condition.
20
20
 
21
21
  ## Creating a Condition
22
22
 
23
- 1. Check existing: `ls knowledge/Conditions/ 2>/dev/null`.
23
+ 1. Check existing: `ls Knowledge/Conditions/ 2>/dev/null`.
24
24
  2. **No match:** create a new Condition note using
25
25
  [templates-conditions.md](templates-conditions.md). Name descriptively
26
26
  ("Hiring Freeze Q2", "Division Reorg").
@@ -31,8 +31,8 @@ same constraint or state, suspect a Condition.
31
31
 
32
32
  When a Condition is created or updated:
33
33
 
34
- 1. Add `[[Conditions/{Condition}]]` to the `## Blockers` section of affected
35
- Goals.
34
+ 1. Add `[[Conditions/{Condition}]]` to the `## Affects` section of affected
35
+ Priorities.
36
36
  2. Add `[Status → on hold]` state changes to affected Projects where
37
37
  appropriate.
38
38
  3. Add a `## Blockers` entry to affected Role files if recruitment is frozen.
@@ -45,7 +45,7 @@ Source content indicates the Condition has ended: "approved", "freeze lifted",
45
45
  "reorg complete", "back on track".
46
46
 
47
47
  - Set `**Status:** resolved`, `**Resolved:** {date}`.
48
- - Remove `[[Conditions/{Condition}]]` from affected Goal `## Blockers`.
48
+ - Remove `[[Conditions/{Condition}]]` from affected Priority `## Affects`.
49
49
  - Log with `[Status → resolved]`.
50
50
 
51
51
  ## Conservatism
@@ -1,6 +1,6 @@
1
1
  # Bidirectional Links
2
2
 
3
- Reference for `extract-entities` Step 10 and Step 7c (Goals / Priorities).
3
+ Reference for `extract-entities` Step 10 and Step 7c (Priorities).
4
4
 
5
5
  ## Bidirectional link rules
6
6
 
@@ -11,28 +11,13 @@ After writing, verify each link goes both ways.
11
11
  | Person → Organization | Organization → Person (in People section) |
12
12
  | Person → Project | Project → Person (in People section) |
13
13
  | Project → Organization | Organization → Project (in Projects section) |
14
- | Project → Goal | Goal → Project (in Projects section) |
15
- | Goal → Priority | Priority → Goal (in Goals section) |
16
14
  | Project → Priority | Priority → Project (in Projects section) |
17
- | Condition → Goal | Goal → Condition (in Blockers section) |
18
15
  | Condition → Project | Project → Condition (in Related section) |
19
16
  | Condition → Role | Role → Condition (notes or status field) |
20
17
 
21
18
  Use absolute paths everywhere: `[[People/Sarah Chen]]`,
22
19
  `[[Organizations/Acme Corp]]`, `[[Projects/Acme Integration]]`,
23
- `[[Goals/Goal Name]]`, `[[Priorities/Priority Name]]`,
24
- `[[Conditions/Condition Name]]`.
25
-
26
- ## Goals (Step 7c)
27
-
28
- When source content references an existing `knowledge/Goals/*.md`:
29
-
30
- - Add a `[[Goals/{Goal}]]` link to the relevant Project or Topic activity entry.
31
- - Add a progress entry to the Goal's `## Progress` section.
32
- - If evidence suggests a status change ("we won't hit the Q3 target"), update
33
- `**Status:**` and log `[Status → value]`.
34
-
35
- **Never auto-create Goals.**
20
+ `[[Priorities/Priority Name]]`, `[[Conditions/Condition Name]]`.
36
21
 
37
22
  ## Priorities (Step 7c)
38
23
 
@@ -44,5 +29,5 @@ Match source themes against priority names and descriptions.
44
29
  serves it.
45
30
 
46
31
  **Never auto-create Priorities.** Don't over-link — a project that already links
47
- to a Goal which links to a Priority doesn't need a redundant direct Priority
32
+ to a Priority through a related Topic doesn't need a redundant direct Priority
48
33
  link.
@@ -1,16 +1,16 @@
1
1
  # Recruitment Inference
2
2
 
3
- Reference for `extract-entities` Step 7b. Enrich `knowledge/Roles/` and
4
- `knowledge/Candidates/` with metadata that no single source carries.
3
+ Reference for `extract-entities` Step 7b. Enrich `Knowledge/Roles/` and
4
+ `Knowledge/Candidates/` with metadata that no single source carries.
5
5
 
6
6
  ## Requisition number detection
7
7
 
8
8
  Scan email subjects and bodies for requisition numbers (e.g. 7-digit Workday
9
9
  IDs).
10
10
 
11
- 1. `ls knowledge/Roles/ | grep "{req_number}"` — does a Role file exist?
11
+ 1. `ls Knowledge/Roles/ | grep "{req_number}"` — does a Role file exist?
12
12
  2. **No file:** create a stub using the Role-stub template in `req-track` Step
13
- 0b. Search `rg "{req_number}" knowledge/` for context to enrich it.
13
+ 0b. Search `rg "{req_number}" Knowledge/` for context to enrich it.
14
14
  3. **File exists:** check whether the email provides new metadata (hiring
15
15
  manager, recruiter, locations) and update the Role file.
16
16
 
@@ -20,11 +20,11 @@ When a calendar event title matches an interview pattern — "Interview",
20
20
  "Screening", "Screen", "Decomposition", "Panel", "Technical Assessment",
21
21
  "Candidate" — combined with a person name:
22
22
 
23
- 1. Cross-reference the candidate against `knowledge/Candidates/`.
23
+ 1. Cross-reference the candidate against `Knowledge/Candidates/`.
24
24
  2. Extract the **organizer**. If the organizer isn't the user (per
25
25
  `~/.cache/fit/outpost/state/identity.md`),
26
26
  they are likely the hiring manager.
27
- 3. Confirm: look up the organizer in `knowledge/People/` for a manager/HM role
27
+ 3. Confirm: look up the organizer in `Knowledge/People/` for a manager/HM role
28
28
  indication.
29
29
  4. Check the candidate's `brief.md` for a `Req` field; if known, set the
30
30
  matching Role file's `Hiring manager` (only if currently `—`).
@@ -33,9 +33,9 @@ When a calendar event title matches an interview pattern — "Interview",
33
33
  ## Recruiter — email-thread inference
34
34
 
35
35
  When a thread references candidates (name match against
36
- `knowledge/Candidates/`):
36
+ `Knowledge/Candidates/`):
37
37
 
38
- 1. Cross-reference To/CC against `knowledge/People/`.
38
+ 1. Cross-reference To/CC against `Knowledge/People/`.
39
39
  2. If a CC'd person's note mentions "recruiter", "talent acquisition", or a
40
40
  similar role, they are likely the internal recruiter.
41
41
  3. Update the candidate's `brief.md` recruiter field and the matching Role file
@@ -11,10 +11,8 @@ Extract every way each entity is referenced.
11
11
  - **Organizations:** full names, short names, abbreviations, email domains.
12
12
  - **Projects:** explicit names, descriptive references ("the pilot", "the
13
13
  deal").
14
- - **Goals:** references to time-bound targets, OKRs, or measurable outcomes that
15
- match `knowledge/Goals/` entries.
16
- - **Priorities:** references to strategic directions that match
17
- `knowledge/Priorities/` entries.
14
+ - **Priorities:** references to strategic directions, time-bound targets, or
15
+ measurable outcomes that match `Knowledge/Priorities/` entries.
18
16
 
19
17
  ## Matching
20
18
 
@@ -82,5 +80,5 @@ Format: `**Role:** Product Lead (inferred from evaluation discussions)`.
82
80
 
83
81
  ## Never auto-create
84
82
 
85
- `Goals/` and `Priorities/`. Link to existing entries when referenced; update
83
+ `Priorities/`. Link to existing entries when referenced; update
86
84
  progress / backlinks; never create new ones from extracted content.
@@ -40,7 +40,7 @@ write a placeholder profile; see the
40
40
 
41
41
  ## Process — update existing notes only
42
42
 
43
- - Emails from people already in `knowledge/People/`.
43
+ - Emails from people already in `Knowledge/People/`.
44
44
  - Emails referencing existing projects or organizations.
45
45
 
46
46
  ## Process — can create new notes
@@ -16,8 +16,8 @@ are detected, or manually created by the user. Lifecycle: active → resolved.
16
16
  **Resolution signal:** {What would indicate this condition has ended}
17
17
 
18
18
  ## Affects
19
- {Goals, Projects, Roles, and People impacted by this condition}
20
- - [[Goals/{Goal}]] — {how it's affected}
19
+ {Priorities, Projects, Roles, and People impacted by this condition}
20
+ - [[Priorities/{Priority}]] — {how it's affected}
21
21
  - [[Projects/{Project}]] — {how it's affected}
22
22
  - [[Roles/{Role}]] — {how it's affected}
23
23
 
@@ -0,0 +1,32 @@
1
+ # Priority Templates
2
+
3
+ Priorities are **never auto-created** by `extract-entities`. They are set
4
+ deliberately by the user. This template is for manual creation only —
5
+ `extract-entities` and `anarlog-process` only **link to** and **update progress
6
+ on** existing notes.
7
+
8
+ ## Priorities
9
+
10
+ ```markdown
11
+ # {Priority Name}
12
+
13
+ ## About
14
+ {2-3 sentences: what this strategic direction means and why it matters}
15
+
16
+ **Status:** {active|paused|retired}
17
+ **Owner:** [[People/{Person}]]
18
+ **Set:** {YYYY-MM-DD}
19
+
20
+ ## What this means
21
+ {Bullet list of concrete implications — what does pursuing this priority look like?}
22
+
23
+ ## Actions
24
+ {Concrete, time-bound actions that ladder to this priority. Targets live inline
25
+ here — there is no separate Goals entity.}
26
+
27
+ ## Projects
28
+ - [[Projects/{Project}]] — {relationship}
29
+
30
+ ## Key facts
31
+ {substantive facts only — leave empty if none}
32
+ ```
@@ -14,8 +14,8 @@
14
14
  ## Summary
15
15
  {2-3 sentences}
16
16
 
17
- ## Goals
18
- - [[Goals/{Goal}]] — {how this project contributes}
17
+ ## Priorities
18
+ - [[Priorities/{Priority}]] — {how this project contributes}
19
19
 
20
20
  ## People
21
21
  - [[People/{Person}]] — {role}
@@ -22,13 +22,12 @@ meetings.
22
22
  ## Inputs
23
23
 
24
24
  - `~/.cache/fit/outpost/apple_calendar/*.json` — calendar events
25
- - `knowledge/People/*.md` — attendee context
26
- - `knowledge/Organizations/*.md` — company context
27
- - `knowledge/Projects/*.md` — project context
28
- - `knowledge/Goals/*.md` — active goals relevant to the meeting topic
29
- - `knowledge/Priorities/*.md` — strategic context for framing
30
- - `knowledge/Candidates/*/brief.md` — candidate context (for interview meetings)
31
- - `knowledge/Roles/*.md` — role/requisition context (for interview meetings)
25
+ - `Knowledge/People/*.md` — attendee context
26
+ - `Knowledge/Organizations/*.md` — company context
27
+ - `Knowledge/Projects/*.md` — project context
28
+ - `Knowledge/Priorities/*.md` — active priorities and strategic context for framing
29
+ - `Knowledge/Candidates/*/brief.md` — candidate context (for interview meetings)
30
+ - `Knowledge/Roles/*.md` — role/requisition context (for interview meetings)
32
31
 
33
32
  ## Outputs
34
33
 
@@ -44,8 +43,8 @@ knowledge base.**
44
43
  When the user asks to prep for a meeting:
45
44
 
46
45
  1. **STOP** — Do not create a generic brief
47
- 2. **SEARCH** — Look up each attendee: `rg -l "Attendee Name" knowledge/`
48
- 3. **READ** — Read their notes: `cat "knowledge/People/Attendee Name.md"`
46
+ 2. **SEARCH** — Look up each attendee: `rg -l "Attendee Name" Knowledge/`
47
+ 3. **READ** — Read their notes: `cat "Knowledge/People/Attendee Name.md"`
49
48
  4. **UNDERSTAND** — Extract role, organization, history, open items
50
49
  5. **THEN BRIEF** — Create the meeting brief using this context
51
50
 
@@ -92,18 +91,18 @@ Extract: summary, start/end time, attendees (names and emails), description.
92
91
  For each attendee:
93
92
 
94
93
  ```bash
95
- rg -l "attendee_name" knowledge/People/
96
- rg -l "attendee_email" knowledge/People/
97
- cat "knowledge/People/Attendee Name.md"
98
- cat "knowledge/Organizations/Their Company.md"
99
- rg -l "attendee_name" knowledge/Projects/
94
+ rg -l "attendee_name" Knowledge/People/
95
+ rg -l "attendee_email" Knowledge/People/
96
+ cat "Knowledge/People/Attendee Name.md"
97
+ cat "Knowledge/Organizations/Their Company.md"
98
+ rg -l "attendee_name" Knowledge/Projects/
100
99
  ```
101
100
 
102
101
  Extract: role/title, company, key facts, previous interactions, open items.
103
102
 
104
- Also check `knowledge/Goals/` and `knowledge/Priorities/` for context relevant
103
+ Also check `Knowledge/Priorities/` for context relevant
105
104
  to the meeting topic — e.g. if the meeting is about hiring, surface the relevant
106
- hiring Goal's status and progress.
105
+ hiring Priority's status and progress.
107
106
 
108
107
  ### Step 4: Create Meeting Brief
109
108
 
@@ -141,11 +140,11 @@ Suggested Talking Points
141
140
  ### Interview Meeting Context
142
141
 
143
142
  When preparing for interview meetings (title contains "Interview", "Screening",
144
- "Decomposition", "Panel", or a candidate name from `knowledge/Candidates/`):
143
+ "Decomposition", "Panel", or a candidate name from `Knowledge/Candidates/`):
145
144
 
146
- 1. **Read the candidate brief:** `knowledge/Candidates/{Name}/brief.md`
145
+ 1. **Read the candidate brief:** `Knowledge/Candidates/{Name}/brief.md`
147
146
  2. **Read the Role file:** Look up the `Req` field and read the corresponding
148
- `knowledge/Roles/*.md` file.
147
+ `Knowledge/Roles/*.md` file.
149
148
  3. **Include in the briefing:**
150
149
  - Candidate's current status, skills, and screening recommendation
151
150
  - Role context: hiring manager, domain lead, remaining positions