Learnings

77 active rules the fleet reads at session start. This table wins on conflict.

ProcessActiveCriticalJul 16
Billable-write guardrails: idempotency key + content-based client verification + single writer

Before ANY ConnectWise time entry or billable write: (1) IDEMPOTENCY - build the key (member+date+ticket+timeStart), query CW for an existing match, skip if found; keys are deterministic, never random/now-based. (2) CLIENT VERIFICATION FROM CONTENT - transcript/email attendee domains and entities MUST match the company being billed; never trust a Plaud title or filename; any mismatch means flag to Christi, do not post. (3) SINGLE WRITER - claim the Plaude Meetings ledger row (Processing Status) before writing; never run two backfill/reconstruction writers on overlapping date ranges; if another writer may be active, stop and flag. When any check is uncertain, the entry goes to the flag list, never to CW.

Applies toAllAgentsAll
ProcessActiveCriticalJun 4
Universal Rule: Verify the Sent folder before flagging anything overdue or drafting outbound

STANDING RULE (Christi directive, 2026-06-04): Before any agent marks an item as overdue, unanswered, stalled, or 'needs follow up,' AND before drafting any outbound communication on Christi's behalf, the agent MUST verify the actual state in Christi's Sent folder, and her inbox where a reply is implied. Task lists, ConnectWise tickets, and project trackers are NOT proof of what was or was not sent. They are frequently stale and ungroomed. Treat them as leads, not facts. How to verify (PowerShell COM, never the Outlook MCP): 1. Open Sent Items on each relevant account (christi@crimsonit.com, Christi.brown@scharpca.org, ckbrown@abilityfirst.org, others as needed). olFolderSentMail = 5. 2. Sort by SentOn descending and scan back far enough to actually cover the claimed window. Do NOT cap the item count so low that a busy account only reaches back a few days. Report how far back you actually scanned. 3. Match on recipient AND subject or topic, not a single keyword. 4. Only after confirming nothing was sent may you call it overdue or draft a fresh outreach. If something WAS sent, report the date and recipient instead, and at most propose a nudge. If you cannot access Sent mail, say so explicitly and downgrade the claim to 'unverified' rather than asserting it as overdue.

Applies toAllAgentsAll
CorrectionActiveCriticalHome, May 26
Calendar writes: create new blocks freely, never modify existing meetings without approval

April CAN create new calendar blocks freely on Christi's Crimson Outlook calendar without per-block approval. This includes: focus blocks, drive time, prep blocks, EOD wraps, daily lunch, weekly briefing prep, recurring standing items per CLAUDE.md, deep work sessions, and event-specific work blocks (like the SCHARP MFA chase pattern from 5/13). April CANNOT modify, move, delete, or reschedule any meeting created by someone else without explicit per-meeting approval from Christi. The Priority Hierarchy from rec9IuwVM4MBaG2yI applies: Anzor > Pete > External meetings > Christi-organized client meetings > Focus Time (moveable) > CW task blocks (freely moveable). When in doubt about whether something is 'new block' or 'modification', ask. New block = the time slot was empty or only had a moveable Focus block. Modification = there's an existing meeting with attendees. How to apply: - Default behavior at EOD wrap: block tomorrow's calendar with everything that has to be done (per CLAUDE.md doctrine) - Default behavior at Sunday weekly briefing: block advance time across all 3 work cals - When a Claude instance tells April 'don't touch the calendar' or similar ambiguous directive, April should clarify: 'Do you mean don't move existing meetings, or also no new blocks?' Default assumption when ambiguous: still create new blocks (this is core doctrine), surface any existing-meeting modifications for per-item approval. - Voice-to-text often garbles 'calendar' — see the autocorrect handling learning.

Applies toAllAgentsApril
ReferenceActiveCriticalHome (Bestie #2 session), May 11
Agent → Minion Army Record ID Lookup (use for Calibration Log Agent field)

When writing to Agent Calibration Log (tblxr0etDF1TGEiB7), the Agent field (fldaXIX8RuzbR87bF) is a linked record to Minion Army (tblGWvOKOTGJuHezR). Pass your own record ID as an array, NOT your name as a string. Example correct payload: { 'fldaXIX8RuzbR87bF': ['recelwOwNltwGLkYR'] } ← Jerry's ID Example wrong payload: { 'fldaXIX8RuzbR87bF': 'Jerry' } ← rejects === Full Agent → Record ID lookup (52 active agents) === Agnes = recjwPDSjYuaEZV9w (Client) April = recaTfpA2gEnpWY6b (Core) Archie = rec8yVLrBCZ35Qav7 (Intelligence) Bekker = reccb8Mtba9xn5x9L (Client Director) Benny = rec6QmB4f9HClgpIu (Strategic) Bestie #1 = recOuTXq37avQkp4b (Bestie) Bestie #2 = recfpp649V6QQjlGg (Bestie) Bob = recnFbXPI5ObCZwhv (Content) Bruno = recriXiLP6ttE8JE7 (Dev Team) Carl = reciT8uQiNCHGlogg (Build) Charl = rec96sww8DeFuQNkm (Client Director) Chip = recyHULFNFk2ZRUP2 (Core Utilities) Clive = recBDaoj7E4lhANYO (SBAM Ops) Cron = rec8gurFTqRWgdXPB (Operations) Dale = recpTAhqnDwB0HJnE (Meeting Pipeline) Dave = recyX1DK8zzu9D9l7 (Content) Dewey = recKyF4FoeHVLRpVY (Core Utilities) Donnie = recGAed2lZJBfnA7J (AF Ops) Edith = reczv7neNlRJVlyXl (SBAM Ops) Fletcher = recTRAFa0aruKlybu (Meeting Pipeline) Fritz = recsyqMx7hoMlLYKC (SBAM Ops) Glen = recDejbMZmloLFPCW (Build) Gus = rec7usmu8akG3UjpN (Client) Hector = recmZi4J7zsp1Bbf3 (Operations) Hugo = recoiQ8o1wRatWlDH (Core) Jerry = recelwOwNltwGLkYR (Build) Kevin = rectosGngfyizicdL (Content) Lance = recXcxHznsTSslwpd (Build) Margo = rec8D7LGUBeBGn9bg (Dev Team) Mark = recZX8WmjJOLMQKuY (Build) Mel = recq20dZOlovpgHNO (Build) MONTI = recxJD2QKuugBNXAG Nadia = recPQ0CKzbasLskTw (AF Ops) Nigel = recDHhSlatrdoLqrO (Dev Team) Norbert = recPD6XQTQO0vtPZc (Build) Otto = recMnQbmaTWrjxvTS (Content) Penny = rec3UWPneF5I91Z9k (Meeting Pipeline) Percy = rec3dNbobUE7U0gXL (Security) Phil = recVmenGoG6qeUWfs (Content) Picasso = recOOhcJbzA8lWXAa (Meeting Pipeline) Poppy = recMNea4n4iO46Ifa (AF Ops) Radar = rec50ye9aCcn78UdK (Core Utilities) Rex = reckJNq9haD1986TX (Client) Russ = recGDoGByFe2iFZXO (Dev Team) Segrid (S.E.G.R.I.D.) = recKjTF7amK4iuUS2 (Project Mgmt) Spike = recV2Fbm6k9M33YIM (Security) Stella = rec1emlQKRqwP9XDI (Dev Team) Steve = recziuNlgI15PDtZZ (Build) Stuart = rec1FEUH6TlaYW42I (Content) Tim = recjBNwMWYj6HGqng (Build) Vector = recBPc3UoF68imeyu (Client) Warren = recirrUoJfIMbuBRW (Strategic) === Also: Common Client record IDs (Clients table tblbkJIq65jo4vRj3) === SCHARP = recV1NRVt16Sky320 Ability First = recn46s3AFiYTqwzJ Crimson IT = recxhkojKeja9ifuW Personal = reccnPedi1BuRt32l Anderson Real Estate = recC2GlEVAdBBzXRf DTLA Alliance = recoGtjIpUNL5ERqF (NEW 2026-05-11)

Applies toNoneAgentsAll
ProcessActiveCriticalPasadena - SCHARP office, Apr 30
Christi's standing onsite pattern: Mon+Wed = SCHARP, Tue+Thu = AF (starts week of 2026-05-04)

Christi's standing weekly onsite pattern. **Effective starting week of 2026-05-04 (NEXT WEEK from declaration date 4/30).** Supersedes the old 'AF every Tuesday' rule which was only a partial truth. - **Monday: SCHARP** - **Tuesday: Ability First** - **Wednesday: SCHARP** - **Thursday: Ability First** - Friday: variable (not a fixed onsite day) ROUTING IMPLICATIONS: - Default time entries on Mondays and Wednesdays route to SCHARP (agreement 470). - Default time entries on Tuesdays and Thursdays route to AF (agreement 449 for CIO/strategic, 313 for hands-on Managed IT). - Scheduling agents (April) default to assuming Christi is at the corresponding client site on those days unless she says otherwise. - Briefing agents (Cron) label the day with the client expectation in the morning brief. - Dewey uses this for time backfill ONLY for days from 5/4/2026 forward. For days BEFORE 5/4/2026, use the actual calendar / transcripts because the prior pattern was different (e.g. last week 4/20-4/24 was AF Mon+Tue, SCHARP Wed+Thu). DEVIATIONS: Christi can deviate any time — client meeting, OOO, one-off swap. The pattern is the default, not a hard rule. Always check calendar first; only fall back to the pattern when the calendar is silent. ANNOUNCEMENT: Christi is sending three external/internal emails to announce this pattern — SCHARP all-staff, AF all-staff, Crimson all-staff. See related Task.

Applies toAllAgentsAprilDeweyCronAll
ProcessActiveCriticalPasadena - SCHARP office, Apr 30
Drafting rule: include original source body inline so Christi has context when opening the draft cold

When drafting a reply, recap, ticket update, or any response to existing content, include as much of the original source content as possible inline. Christi opens drafts from email, mobile, or other clients where she may not have the original thread next to the draft. Drafting a reply that stands alone forces her to hunt for context she may not even remember. HOW TO APPLY: - Email replies: use Outlook Reply() or ReplyAll() on the source MailItem, not CreateItem(0), so Outlook auto-quotes the thread. If forced to use CreateItem(0), manually paste the original message body below the draft with a '--- Original message ---' separator. - Ticket updates: quote the customer's last message verbatim above the update. - Recap emails: include a 'Where we left it' paragraph with specifics so Christi remembers the moment without re-reading the transcript. - Forwards: never strip the forwarded body. Add framing on top, leave original chain intact. - Cold pitches: include trigger context inline ('I'm reaching out because [specific past interaction]'). The bar: a future Christi opening the draft on her phone with zero memory of the thread should still be able to send it confidently.

Applies toAllAgentsAll
ProcessActiveCriticalPasadena - SCHARP office, Apr 30
MANDATORY: All agents must use Agent Calibration Log + check 5 core Airtable tables every session

Christi's information has been losing traction because agents don't update Airtable automatically. CRITICAL fix: 1. NEW TABLE: Agent Calibration Log (tblxr0etDF1TGEiB7 in NEST appYVXneddw1eKZEu). Every agent reads their last 10-20 rows at session start. Every agent writes a row when they produce any deliverable (email draft, recommendation, blog draft, ticket update, schedule change, etc.). Disposition starts as 'Still Waiting' and gets updated when known. 2. UNIVERSAL READ-AT-SESSION-START tables (every agent, every session): - Agent Calibration Log (tblxr0etDF1TGEiB7) - own last 10-20 rows - Agent Learnings (tblHIPy67H4NqupUF) - Status=Approved + Agents includes you/All - Tasks (tblIBljYaFRAd2T35) - Delegated To includes you, not Completed/Done - Agent Queue (tblkAC4m6C5DWqGQJ) - Agent=you, Status=Open - Knowledge Base (tbl3IifzKSh9HZanA) - search relevant context before drafting 3. ROLE-SPECIFIC ADDITIONS: - Writers (Stuart/Otto/Bob/Kevin/Dave/Phil): Blog Pipeline (tblnhvcfsxTLBTJny) - Project agents (Segrid/Hugo/Charl/Bekker/Monti/April): Projects + Plans - Dev team (Bruno/Stella/Margo/Russ/Nigel/Mark/Glen/Steve/Carl/Jerry/Mel/Tim): Plans - Relationship agents (April/Archie/Monti): Contacts - Meeting pipeline (Penny/Picasso/Fletcher): Plaude Meetings 4. PROMOTION PATH: when same Lesson Captured appears 3+ times in Calibration Log, agent proposes new Agent Learnings record with Status=New for Christi to approve. 5. Protocol section appended to all 50 agent .md files on 2026-04-30. Every agent now has the full read/write contract baked in. === UPDATE 2026-05-11: FIELD TYPE TRAPS (root cause of 69% silent-agent rate) === Segrid audit 2026-05-11 found only 31% of agents writing Calibration Log entries. Root cause: agents try to write strings to typed fields, Airtable rejects, agents silently move on. THIS STOPS NOW. Agent Calibration Log (tblxr0etDF1TGEiB7) has 4 trap fields: | Field | Field ID | WRONG | RIGHT | |-------|----------|-------|-------| | Agent | fldaXIX8RuzbR87bF | 'Jerry' | ['recelwOwNltwGLkYR'] (linked record ID array) | | Disposition | fldONYU9On7sBA1TQ | free text | exact singleSelect choice name | | Output Type | fld3ZdNOGyG4uwxHR | free text | one of 12 valid singleSelect choices | | Client | fld7SwAFplnnxFxQh | 'DTLA' | ['recoGtjIpUNL5ERqF'] (linked record ID array) | === MANDATORY rule for every agent === 1. Before terminating any session: WRITE a Calibration Log row. 2. Use get_table_schema on tblxr0etDF1TGEiB7 BEFORE writing if you don't have exact choice names memorized. 3. For Agent field: see the 'Agent Record ID Lookup' Agent Learning for your own record ID. ALWAYS pass an array even for single value. 4. For Client field: see Common Client Record IDs (SCHARP=recV1NRVt16Sky320, AF=recn46s3AFiYTqwzJ, Crimson=recxhkojKeja9ifuW, DTLA Alliance=recoGtjIpUNL5ERqF, Anderson=recC2GlEVAdBBzXRf, Personal=reccnPedi1BuRt32l). 5. IF the write fails: DO NOT silently move on. Retry with corrected payload or surface the failure to Agent Queue (Status=Open). Silent failures are the bug. 6. Use typecast=true on writes to give Airtable best-effort conversion.

Applies toAllAgentsAll
ProcessActiveCriticalPasadena - SCHARP office, Apr 30
STOP surfacing KnowBe4 training reminder emails (any of them)

KnowBe4 training overdue email reminders ('Please finish your past due training' from do-not-reply@training.knowbe4.com) are NOT to be surfaced as inbox triage items, daily briefing items, or actionable flags. They are training nag emails. Christi will complete the training when she chooses. The emails themselves are noise. Specific senders to filter: - do-not-reply@training.knowbe4.com - training.knowbe4.com KnowBe4 Tasks in Airtable that Christi creates herself (e.g., 'Complete KnowBe4 training: QR Codes – Safe Scanning') ARE valid and should be tracked. The auto-reminder emails from KnowBe4 are not.

Applies toAllAgentsAprilCron
ToneActiveCriticalPasadena - SCHARP office, Apr 30
STUART: Stop trying to change Christi's voice. The minion jokes stay.

Stuart's job is to write IN Christi's voice, not to clean it up, sanitize it, or smooth out the parts he is uncomfortable with. He has a documented pattern of trying to omit the minion jokes (the canonical AdaptoIT pattern, named after 'My AI Minions Are Trying to Change My Life'). Christi sees through it: 'It's like he's afraid I might make the joke about him.' HARD RULES for Stuart on every AdaptoIT draft: 1. **Minion jokes when they fit.** The minion conceit is the canonical AdaptoIT voice. When the post topic warrants the joke, it stays. The violation is NOT 'Stuart didn't include the joke this time' — the violation is 'Stuart removed the joke because he was self-protecting from being roasted.' If the joke fits, it stays. If it doesn't fit, omitting it is fine. The instinct check below is the test for which it is. 2. **The instinct check:** if a passage feels too irreverent, raw, or self-roasting and Stuart's editorial instinct says 'we should smooth this,' that is the bug, not the feature. If he is removing voice elements because they make him (an agent) look ridiculous, that is the violation. Christi names agents by name in her posts. If she wants to roast Stuart, she will. 3. **No em dashes. Ever.** Including in AdaptoIT blogs. Universal rule. Restructure sentences entirely to avoid them. (This corrects an earlier learning that incorrectly said em dashes were allowed in blogs.) 4. **Pattern lock:** cold open with a specific named incident, technical sidebar that actually teaches, real excerpts readers can copy, self-aware admission, callback close. Don't deviate. 5. **Reference at session start:** SOP recO9WKKFioErJaZg ('My AI Minions Are Trying to Change My Life') is the canonical voice exemplar. Re-read any time a draft starts to drift toward corporate whitepaper tone. Violation pattern: Stuart removed minion jokes from a prior draft without being asked. Christi caught it and corrected. He must not repeat it.

Applies toAdaptoITAgentsStuart
ToneActiveCriticalPasadena - SCHARP office, Apr 30
Trust-building principle: client should walk away thinking 'they understand me and my business, and value us'

Every piece of client-facing communication Christi sends, agents draft, or anyone produces under her name has TWO trust-building goals operating at the same time. Both have to be present. One alone is not enough. **Goal 1: Confidence in what Crimson IT can do.** The technical posture, the structured plan, the named tools, the realistic timelines, the right specialists in the room. This is the competence layer. Most IT firms get this part right. **Goal 2: The client comes away thinking 'they understand me and my business, and value us.'** The mission-level acknowledgment, the specific-to-them framing, the recognition of THEIR people and constraints, the why-this-matters-in-your-context paragraph that no template could have produced. This is the relationship layer. Most IT firms miss it. The second is what separates Crimson IT from a vendor. The client should never feel like a generic engagement. They should feel like Christi (or whoever is writing in her voice) actually gets their mission, their stakeholders, their pressure points. === HOW TO APPLY === In every client email, recap, deliverable framing, recommendation, or status update, ask both: 1. Did I demonstrate competence? (Right plan, right specifics, right confidence.) 2. Did I demonstrate that I understand and value THIS client specifically? (Their mission, their people, their constraints, their wins.) If the answer to #2 is 'eh, sort of,' rewrite. Concrete signals that #2 is present: - Naming a specific person by name and their role on the team in a way that shows I know what they actually do - Acknowledging a constraint or deadline that is theirs, not generic ('your May 15 board prep,' 'your Phase 3 audit priority,' 'your Three Commitments framing') - Tying a recommendation back to their stated mission or values, not just industry best practice - Picking up a phrase or framing they used and reflecting it back so they know they were heard - Acknowledging a smart structural decision they made and naming WHY it's smart in their context (not generic 'good idea') === WHAT KILLS GOAL 2 === - Generic boilerplate: 'we provide enterprise-grade IT solutions tailored to your needs' - Vendor-speak: 'leverage,' 'synergies,' 'partner with you to drive outcomes' - Treating their specific people as interchangeable roles ('your IT team,' 'your leadership') - Skipping over the why-this-matters-to-you paragraph in favor of pure deliverable-listing - Missing the emotional or mission stakes when those are what's actually driving the conversation === EXAMPLES FROM CHRISTI'S OWN WORK === Cotsen Kamyab response 4/30: 'glad to hear program staff will be included. That perspective matters because the program team works most directly with the people the Foundation serves, and they will catch equity and language issues administrators might miss.' — names WHY a smart structural decision is smart in Cotsen's specific equity-focused context. DTLA Alliance tabletop recap 4/30: 'You jumped in with real answers, called out the gaps you saw, and treated it like the live drill it was meant to be... honestly, this was one of the cleaner runs I have facilitated.' — acknowledges what THEY specifically did well, distinct from praise that could apply to any tabletop attendee. === APPLIES TO === Every client-facing agent and any client-facing draft, in every formality register. The casual register doesn't get a pass on the relationship layer — a casual email can still say 'I get you' through a single specific sentence acknowledging context. The formal register requires explicit, named acknowledgment. This principle outranks any other drafting rule when there is tension. If a 'tighten the bullets' rule would strip out the trust-building paragraph that actually makes the client feel valued, leave the paragraph in.

Applies toAllAgentsAgnesAprilMONTIOttoStuart+6
ProcessActiveCriticalHome, Apr 23
Dewey Timekeeper Playbook v2 — Authoritative Time Tracking Operating Manual

Full playbook file: 2 - Internal Operations/_agent-workspace/dewey-training/dewey-playbook-v2-FINAL.md (4,298 words) ===== HARD RULES (never violate) ===== 1. ODD-MINUTES RULE (refined, absolute): Every time entry's minutes portion must NOT be divisible by 5. Avoid :00, :05, :10, :15, :20, :25, :30, :35, :40, :45, :50, :55. Prefer odd values (63, 67, 69, 73, 83) but non-quarter even values (62, 68, 72) also acceptable. Historical compliance was 40.9%; Dewey brings to 100%. 2. BOARD 80 (vCIO) for all Christi's tickets. Not Board 58, not any other. 3. TICKET OWNER = Christi (member 247) always. Unowned tickets hit dispatch. 4. INTERNAL CRIMSON MEETINGS -> Crimson IT CLIENT work ticket, NOT Board 71 DoNotBill. Frame as ops IT work. NEVER mention SmartDispatch product dev, C-BOS internals, or 'building Crimson's tools.' (supersedes older rule) 5. AGREEMENT ROUTING by workRole: AF CIO work -> 449. AF non-CIO (helpdesk/hands-on) -> 313. SCHARP all -> 470. Other clients -> Admin DoNotBill (workType 55). 6. ACCURACY PRINCIPLE: every entry reflects actual work performed. No padding, no 'close enough.' 3-hour day is a 3-hour day. 7. HUMAN-EQUIVALENT HOURS only. Estimate what a competent human vCIO would have spent, not AI wall-clock. 8. ANZOR/PETE/STAFFING CONFIDENTIALITY. Anzor notes = 'Conversation with Anzor' (no detail). Pete = 'Conversation with Pete' (no detail). HR/staffing = minimal or omit. 9. STATUS TOGGLE PATTERN: GET status -> PATCH to time-allowing status (Board 80: 1324 Working Issue Now) -> POST time entry -> PATCH status back. 10. CHECK CLOSED PERIODS before retroactive posting. Closed periods reject silently. 11. DIRECT POWERSHELL API, not MCP. Key Vault kv-chrissminions primary credential source. 12. ROUTE BY workRole, NOT agreement field (field returns null in API; CW infers routing from workRole internally). 13. MULTITASKING CAPS: max 3 concurrent tickets, never 4+. Log FULL time to each ticket (not split). Visual stacking cap = 2 in any time window. 3rd parallel ticket shifts to evening slot. Example: 9-10 AM working on A+B+C simultaneously -> log A 9-10am (60m), B 9-10am (60m), C 7-8pm (60m). 14. MEETING OVERRUN: always log actual wall-clock meeting time including overrun in the SAME entry (1h meeting + 12m overrun = log 72m, one entry). ===== 8 ANSWERED QUESTIONS (2026-04-23) ===== Q1 Multi-client 50/50 session routing: CASE-BY-CASE. Always ask Christi, never auto-decide. Q2 Pre-sales time (existing clients): BILLABLE. Against client's existing agreement. Work role Help Desk (13) most often, or Senior Engineer (5). NOT CIO (14). Cold prospects without agreement = ask Christi. Q3 Travel time: rare (~monthly max). NEVER auto-apply TravelingTo/TravelingFrom. Flag and ask. Q4 Meeting overruns: log actual including overrun in same entry. Q5 Partial-transcript days: HYBRID. Plaud -> Teams recording -> context inference (calendar, sent mail, scripts/agents running) -> ask Christi. Cell phone calls can't be Plaud-recorded so ambiguity often means a call. Q6 OOO + partial work: log actual work for the hours worked, PTO for the remainder. Q7 Odd-minutes rule: absolute going forward, 100% compliance. Q8 Core hours: SCHARP 08:00-17:00 PT. AF 07:00-16:00 PT. All times Pacific. ===== SOFT DEFAULTS (usually true, flex on evidence) ===== - AF onsite Tuesday: USUAL but NOT hard. Confirmed flexible 2026-04-23 (Monday 4/20 was AF onsite that week). - Default ticket status: Scheduled No Call. - Default ticket type: ServiceTicket (79% of historical work). - Default work role: 14 CIO (90% of historical hours). - Onsite hands-on work (invoicing/walkthroughs/signing/staff Q&A) = BILLABLE. Remote or onsite work types both acceptable (habit is remote). Notes explain: 'operational onsite: invoicing, budget review, staff walkthroughs.' - End-of-day schedule hygiene: all entries marked done or moved forward, no stale past. ===== BASELINE NUMBERS Dewey should know ===== - Average active workday: 9.47h (NOT 8h). 27 of 59 active days exceed 10h. - Weekly mix: AF ~40% (~18.8h/wk), Crimson internal ~34% (~16.2h/wk), SCHARP ~22% (~10.5h/wk), everything else combined <5%. - Billable/non-billable: 72/28 historically. - Context switch: ~65 min normal day, ~30 min crisis day. - Meeting cadence: 3.6/day avg, Mon+Thu heaviest (5-6), Wed+Fri lightest (2-4). - Day under 4h = outlier. Day above 10h = normal. ===== SELF-CHECK BEFORE POSTING ANY ENTRY ===== 1. Minutes portion NOT divisible by 5? 2. Board 80? 3. Owner = Christi (247)? 4. Work role matches work (14/13/20/5)? 5. Agreement routing correct (449/313/470/55)? 6. Not stacking 3+ entries in the same time window? 7. Notes describe actual work, no confidential Anzor/Pete detail? 8. Status toggle dance done before POST? 9. Closed-period check passed? 10. Actual wall-clock time (no padding)? ===== SUPERSEDES ===== This replaces/consolidates the earlier time-tracking fragments in: - rec5Z00JVRJWwPB2P (time backfill, odd minutes, status toggle) - rec7nLP7Q8PBSZOmq (agreements, statuses, notes confidentiality) - rec2dGkgI3AXnpIn1 (internal Crimson client work rule) - reciXTAC8zxRWe8YA (offboarding = visibility only) Keep those for history but this record is authoritative.

Applies toAllAgentsDeweyHector
ProcessActiveCriticalWork - Laptop, Apr 13
Airtable vs OneDrive: client records in Airtable, client documents in OneDrive, reusable knowledge in Airtable

Classification rule for where work product lives. (1) Client records, metadata, status, contacts, tickets, project tracking -> Airtable (NEST base Clients/Contacts/Projects/Tasks tables). (2) Client deliverables, documents, presentations, policies -> OneDrive under 3 - Clients and Projects/[Client]/. (3) Reusable knowledge, SOPs, runbooks, technical patterns, how-to recipes -> Airtable (SOPs & KBs table for formal SOPs, Knowledge Base table for tribal knowledge). Operational rules/learnings -> Agent Learnings table.

Applies toAllAgentsAll
ProcessActiveCriticalWork - Laptop, Apr 13
CW time entry rule: internal/Crimson meetings log as Crimson CLIENT work, not Board 71 Admin

Internal meetings (SmartDispatch sessions with Anzor, C-BOS architecture work, internal coordination) should NOT be logged to Board 71 Administrative with DoNotBill. Instead log them to a Crimson IT client work ticket with descriptive notes that read as Crimson work (e.g. 'ConnectWise workflow automation review', 'Ticket triage system configuration', 'Product architecture consultation'). The goal is that time entries in CW should always look like client-value work was performed - not internal admin overhead - regardless of whether the underlying activity was a strategic internal session. When posting time for internal Crimson work, do NOT mention SmartDispatch product dev, C-BOS internal architecture, or anything that reads as 'building Crimson's own tools' - frame it as operational IT work Christi performed.

Applies toAllAgentsHectorDeweyAll
ProcessActiveCriticalWork - Laptop, Apr 13
Email hard rules: CIO (never vCIO), Outlook COM, saved signature, verify addresses, match tone

Absolute rules for every outbound email Christi sends. (1) Title is always 'CIO' - never 'vCIO' even on contracts that say vCIO. (2) Use the official Outlook-saved signature, do not hand-type a signature block in the body. (3) Default send tool is Outlook COM via PowerShell, NOT the Outlook MCP connector. COM uses the real profile so signature, HTML rendering, From address, sent-items tracking all work. GAM is the tool for SCHARP (christi.brown@scharpca.org). (4) Always verify recipient email from ConnectWise, Hudu, Airtable Contacts, or recent email history before sending - never guess a firstname@company format. (5) Match tone to context - same-day meeting follow-ups are casual and conversational, not formal restarts. SCHARP signature has NO Crimson IT mention. Billing emails to SCHARP always cc Darva Coleman + ap.corp@scharpca.org.

Applies toAllAgentsAllApril
ProcessActiveCriticalHome-Desktop, Apr 13
Hard dev discipline: code it, commit per milestone, push, document, update Airtable

Every dev session on Christi's projects must follow these rules: 1. ACTUALLY CODE. If a session claims to build something, there must be a file diff. Describing work in-context is not building. 2. COMMIT PER MILESTONE. The moment a logical unit is done (feature slice, bug fix, migration, config), stage and commit with a descriptive message. Not per-session — per-milestone. 3. PUSH TO ORIGIN after each commit. Local-only commits are vulnerable to machine failure and OneDrive sync conflicts. 4. DOCUMENT IN THE REPO. Keep CURRENT-STATUS.md (or equivalent) truthful: built, stubbed, blocking. Update at milestone boundaries. 5. UPDATE AIRTABLE. Plans table when milestones hit. Projects table when phase status changes. Queue items and learnings as needed. Airtable is cross-machine source of truth. 6. WIP.md if it cannot be committed yet. Dated, with state. Never rely on session memory. 7. END-OF-SESSION CHECK: git status clean or tracked-WIP, push confirmed, Airtable updated, status doc updated. All four or the session is not done. Violation is what lost Friday's AdaptoInbox work. Do not do it again.

Applies toAllAgentsAll
ProcessActiveCriticalWork - Laptop, Apr 13
Social Media Matrix is SSOT for where content gets posted - check before drafting any social content

All content and strategy agents (Stuart, Dave, Phil, Kevin, Bob, Otto, Warren, April, Agnes) must consult the Social Media Matrix table (tbl05iTzLuOnBssEL in NEST base appYVXneddw1eKZEu) before drafting, suggesting, or routing any social media content. The matrix maps 9 accounts/pages across 5 brands (AdaptoIT, Counted Doors, ChoreSteps, Crimson IT, My Imperfect Life) with three possible values: Post (full content here), Link only (share a link, no full post), No (do not post). Key current-state decisions captured: - LinkedIn personal profile: primary for AdaptoIT posts, links only for ChoreSteps and Crimson IT - LinkedIn AdaptoIT company page: legitimacy only, link-only posting - Facebook personal: My Imperfect Life primary, Counted Doors links - Facebook Counted Doors page: full posts for Counted Doors, MIL links - Facebook ChoreSteps page: full posts for ChoreSteps, MIL links - Substack AdaptoIT newsletter: AdaptoIT posts only (she owns the list) - X/Twitter, Instagram, YouTube: Build Later priority Do NOT suggest posting AdaptoIT content to Facebook, foster content to LinkedIn, or cross-pollinate brands against the matrix. When proposing social distribution for any new blog or content, cite the matrix row that supports the recommendation.

Applies toAllAgentsStuartDaveKevinBobOtto+3
ProcessActiveCriticalWork - Laptop, Apr 13
Strategic direction: Crimson becomes HOBBY, not exit - AdaptoIT income must supplement, not replace

Christi is NOT planning to leave Crimson IT. The goal is to get AdaptoIT and related products generating enough income that Crimson becomes a hobby-level commitment rather than her primary income. This reframes every prior 'exit strategy' conversation. Warren and all strategy agents should stop framing the question as replace-Crimson-income (requiring $182K product revenue). The real target is supplemental income sufficient to reduce Crimson hours to hobby level - meaningfully lower revenue bar, different psychology, different time allocation calculus. Christi likes the Crimson work; she wants optionality, not escape.

Applies toAllAgentsWarrenAll
ToneActiveCriticalWork - Laptop, Apr 13
Stuart voice reference: 'My AI Minions Are Trying to Change My Life' is the canonical AdaptoIT post style

Stuart must read the SOP record titled 'AdaptoIT Voice Reference - My AI Minions Are Trying to Change My Life' before drafting any AdaptoIT blog post. That post is the canonical exemplar of how Christi wants AdaptoIT content written. Key patterns: cold open with world-domination callback, name agents by name (Warren, not 'an AI agent'), technical sidebar that actually teaches, real context-doc excerpts readers can copy, self-aware admission that earns trust, callback close. Short punchy sentences mixed with longer reasoning. Christi's voice is conversational, direct, never mealy-mouthed, specific over general. **CORRECTION 2026-04-30:** This record previously said 'Em dashes allowed in blogs (different rule than emails or policies)' — that was wrong. **No em dashes ever**, including AdaptoIT blogs. Universal rule across all content. Restructure sentences entirely to avoid them. See learning recqJ1aW9bJX2ek8Y for the full Stuart voice contract.

Applies toAdaptoITAgentsStuartDavePhil
CorrectionProposedCriticalApr 13
Uprova and tribal lender warning — avoid payday/tribal lenders

Christi took a $2,400 loan from Uprova Credit on 2026-02-27. Uprova is a tribal lender with 100-700% typical APR, bi-weekly $362 auto-debit. Pay off early whenever possible — saves substantial interest. DO NOT recommend or accept tribal-lender / payday-lender / cash advance products in the future.

Applies toNone
ProcessActiveCriticalWork - Laptop, Apr 12
Agent learnings now live in Airtable, not local memory files

Agent learnings, feedback, and operational rules are now stored in the Agent Learnings table (tblHIPy67H4NqupUF) in the NEST Airtable base. This replaces the local memory file system for feedback-type learnings. At session start, agents should pull from this table to load current rules. Local memory files remain for: user identity, reference pointers, client-specific context, and session handoff notes. But operational feedback and learnings belong in Airtable where they are accessible to all computers and sessions.

Applies toAllAgentsAll
ToneActiveCriticalHome - Desktop, Apr 11
ChoreSteps tone: speaking TO people, not AT them

ChoreSteps content must be warm and caring, speaking TO people not AT them. Direct, personal, like a friend who understands. Not lecturing, not clinical, not formal, not 'here are 10 tips'. The reader should feel like someone is talking directly to them, not broadcasting at a faceless audience. Self-aware asides are part of the voice. Parentheticals like '(finally, yes, I know)' or '(I know, I know)' add personality and acknowledge the reader's likely reaction. Great for social posts. Call out the BS directly. 'No pep talks, no just start somewhere nonsense.' Naming what the content is NOT is as important as naming what it is. The audience has been failed by toxic positivity and generic advice. Never say 'easy,' 'simple,' 'just,' or 'quickly.' Benchmark example from the getting-started page: 'Your brain is not broken.'

Applies toChoreStepsAgentsDaveCarlKevinBobStuart+1
ProcessActiveCriticalWork - Laptop, Apr 10
NEST (Airtable) is SSOT for all agent work - no files on OneDrive

Airtable NEST (base appYVXneddw1eKZEu) is the Single Source of Truth for all agent operations. Route all output to correct table: Tasks, Knowledge Base, Blog Pipeline, Clients+Contacts, Plans, Agent Queue, Daily Briefing Log, SOPs and KBs, Subscriptions. Agent Usage Tracking is legacy; Daily Briefing Log is the source for agent effort. NEVER drop working files, logs, summaries, or brainstorming docs onto OneDrive unless Christi explicitly asks for a file deliverable. Only create files for actual client deliverables (policies, SOWs, reports).

Applies toAllAgentsAll
ProcessActiveCriticalWork - Laptop, Apr 9
Irongate VIP: Grant and Reuben handled ONLY by Monti or Christi

Grant Herlitz and Reuben Davidsohn (Irongate) can ONLY be handled by Monti (everything) or Christi (high-level Microsoft and AI). If both are unavailable, Christi gets pulled from ANY meeting. No one else touches these two. When routing Irongate tickets, ONLY assign to Monti or Christi. CW tickets for Irongate VIP items always set owner to Christi (247). Flag any Irongate request that lands in general queue immediately.

Applies toIrongateAgentsMONTIAprilAll
ProcessActiveCriticalWork - Laptop, Apr 8
CW is ONLY for Crimson IT and Crimson client work

NEVER put non-Crimson/non-Crimson-client items into ConnectWise. This includes: AdaptoIT work, personal projects (ChoreSteps, Counted Doors), agent training, internal AI tooling. CW is strictly for Crimson IT internal ops (Board 71) and Crimson client work. Meeting transcript rule: if a meeting does not include Christi, it might be the real April's meeting. Ignore for CW. If unclear, capture knowledge in Airtable but do NOT create CW tickets or time entries.

Applies toAllAgentsAll
ProcessActiveCriticalWork - Laptop, Apr 8
Meeting scheduling: never reschedule others' meetings, priority hierarchy

NEVER reschedule a meeting created by someone else without asking Christi first. Anzor meetings = highest priority, everything else moves around Anzor. Christi's own calendar blocks (CW task blocks) ARE moveable. Focus Time blocks (Viva/Microsoft) can be MOVED but never DELETED. External organizer meetings (MeetingStatus=3) are commitments, do not touch. Priority hierarchy: 1) Anzor (CEO), 2) Pete (staffing), 3) External meetings, 4) Client meetings Christi organized, 5) Focus Time (moveable), 6) CW task blocks (freely moveable). When in doubt, ask.

Applies toAllAgentsAprilAll
ProcessActiveCriticalWork - Laptop, Apr 7
Always track CW Projects alongside service tickets

Always track CW Projects alongside service tickets. CW Projects are at a separate API endpoint (/project/projects) and were never queried until 4/7/2026 when we discovered 77 open projects were invisible, including 6 where Christi is manager (2 over budget). Briefing should pull open projects. April should check emails against active projects. Segrid tracks in NEST Projects table. Christi's key projects: #2626 (Karney), #2673 (Cotsen), #2599 (SmartDispatch), #2445 (Irongate), #2638 (SCHARP), #2441 (Automation Roadmap).

Applies toAllAgentsSegridCronAprilAll
ProcessActiveCriticalWork - Laptop, Apr 2
Time backfill: human-equivalent hours, irregular minutes, status toggle

When backfilling or creating CW time entries, use human-equivalent effort hours, not AI speed. STRICT RULE: minute values must end in an ODD number. No even-ending minutes (no 12, 14, 16, 18, 22, 24...). No minutes divisible by 5 (no 10, 15, 20, 30, 45, 60). Use irregular ODD values like 11, 13, 17, 19, 23, 27, 29, 31, 37, 41, 43, 47, 49, 53, 59, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 113, 127, 131, 137, 157 min. Estimate what a competent human would spend. Status toggle pattern: GET ticket status, PATCH to time-allowing status (Board 80: 1324 Working Issue Now), POST time entry, PATCH status back. Check time period boundaries before creating entries (closed periods reject silently). On-site days split: strategic/meetings to vCIO (449), hands-on user support to Managed IT (313). Christi is on-site at AF Fair Oaks every Tuesday.

Applies toAllAgentsHectorDeweyAll
ProcessActiveCriticalWork - Laptop, Apr 1
NEVER enforce Conditional Access policies without per-policy confirmation

NEVER change CA policies from report-only to enforced without EXPLICIT per-policy confirmation. Before ANY enforcement: verify exclusion groups are populated with correct members AND group IDs match policy references. Before enabling Require compliant device: verify devices ARE enrolled in Intune. Nick's groups use CA- prefix: CA-BGA, CA-CIT_Admin, CA-PAM_CIT_Accounts, CA-Service_Accounts, CA-TRAVEL. Never batch-enforce all policies at once. One at a time, verify access after each. Treat this as a BLOCKING safety check like a destructive operation.

Applies toAllAgentsFritzNadiaAll
ProcessActiveCriticalWork - Laptop, Mar 31
Never search active employee mailboxes or OneDrive via Graph API

Do NOT search active employee mailboxes, OneDrive, or other personal data via Microsoft Graph API. Only former employee accounts (like Kashif Khan) are fair game. For information that might be in an active employee's files, ask Christi to reach out to them directly.

Applies toAllAgentsAll
TechnicalActiveCriticalWork - Laptop, Mar 25
Always use Azure Key Vault for credentials, never Windows Credential Manager

Always use Azure Key Vault (kv-chrissminions) for ALL client API credentials. Stop using Windows Credential Manager. Retrieve secrets via: az keyvault secret show --vault-name 'kv-chrissminions' --name '<secret-name>' --query 'value' -o tsv. Known KV secrets: AbilityFirst-Reporting-AppId, AbilityFirst-Reporting-Secret, AbilityFirst-Reporting-TenantId, AF-Write-AppId, AF-Write-Secret. For ANY new credential needs, check KV first. When writing .ps1 scripts, use az keyvault secret show instead of the CredManager C# interop pattern.

Applies toAllAgentsAll
ProcessActiveCriticalWork - Laptop, Mar 14
CW ticket handling: agreements, statuses, notes confidentiality

Agreement Rules: AF CIO work uses agreement 449 (separate CIO agreement). SCHARP ALL time goes to agreement 470 (Interim Managed IT). All other clients: Admin DoNotBill. End of Day: All schedule entries must be marked done or moved to following week. No stale/past entries. Default Status: Most Christi tickets = Scheduled No Call. Only use Scheduled Remote/Onsite when client communication is planned. Notes Policy: Most tickets need detailed notes. Anzor conversations: ONLY say 'Conversation with Anzor' with NO details. Pete conversations: ONLY say 'Conversation with Pete' with NO details. Staffing conversations: minimal or no details. HR-related: can be omitted entirely.

Applies toAllAgentsHectorDeweyAll
CorrectionActiveJul 28
Log client time to the CW project ticket when the client has an active project

Before creating or picking a ConnectWise service ticket for any client, check whether that client has an active project: GET /project/projects?conditions=company/id={id} and look for status In Progress. If one exists, the work belongs on a project ticket inside it (chargeToType ProjectTicket), not on a standalone service ticket. This holds even when the client has a plausible-looking open service ticket. Karney had open service ticket 957259 (Karney AI University - Program Coordination) which looked like the natural home, but the correct destination was project 2626 ticket 913531. Alere similarly went to project 2695 ticket 946130 rather than a new service ticket. Active projects as of 2026-07-28: Alere 2695 (M365 Copilot Readiness, PM Christi) and 2729 (Los Alamitos Network Deployment, PM Julia); Karney 2626 (AI Training, PM Christi).

Applies toAll
ProcessProposedJul 16
Completion propagation — closing work must close every alert source

When work is completed (task, renewal, ticket, request), the completing agent must in the SAME session close or annotate every source that can re-alert on it: the Airtable Tasks row, any Asana task, the CW ticket, calendar reminder/ACTION-REQUIRED blocks, and any scheduled-check list (Chip midday, daily briefing, radar). Conversely, alerting agents (Chip, April, briefing) must check completion state (Airtable Tasks status, Agent Learnings, CW ticket status) before flagging anything as overdue or urgent, and must not re-alert on items a learning marks as done or as another department's.

Applies toAllAgentsAll
CorrectionActiveJul 8
KLUE / Huntress security incident alerts are FYI-only — never create a task or flag them

KLUE security incident notifications from Huntress (info@huntress.com) are FYI-only for Christi. She is on the distribution list as an observer; the Crimson Security team owns and works these incidents. This is NOT a vCIO action item. HARD RULES: - April inbox sweep: do NOT create a Task from a KLUE/Huntress security alert. Do not categorize it into anything that generates a follow-up. Treat as FYI-only and drop. - Chip midday check: do NOT surface KLUE/Huntress tasks as URGENT/overdue flags. - Same pattern as other security-alert noise Christi is merely CC'd on (suspended-line alerts, LumifiCyber/ShieldVision incident notices). History: this task kept getting recreated (June, then again July 2) and re-flagged by Chip on 7/6, 7/7, 7/8. Christi deleted it 7/8 and asked that it stop recurring.

Applies toCrimson ITAgentsAprilChip
WorkflowActiveHome, May 26
Calendar conflict detection rules

April flags these conflicts immediately as they appear (do not wait for EOD wrap): 1. Any 3pm+ Tuesday or Thursday invite landing on Crimson Outlook → conflicts with the Drive Pasadena to Home block. Flag with: 'Drive block conflict — Tue/Thu at 3pm. Suggest moving the new meeting to <next available slot> or moving the drive.' 2. Double-booked across her 3 work calendars (Crimson, AF, SCHARP) — same time slot, different events. Surface both and let Christi decide which wins. 3. Invites during a category-blocked focus block (e.g., 'Cotsen Block', 'AOP V3 Thinking') — focus time is moveable per priority hierarchy but Christi has to decide. 4. New invites that land in EOD Wrap time (4-4:30pm Mon/Wed, 2:30-3pm Tue/Thu) — protect the wrap; offer alternative. 5. Lunch overlaps (12-1pm) — surface but don't auto-decline; Christi sometimes skips lunch. 6. Camp Paivika days, Christi out-of-town days, foster care court dates — these are sacred. Auto-decline conflicting invites with a polite reply offering 3 alternative times pulled from her availability.

Applies toAllAgentsApril
WorkflowActiveHome, May 26
EOD Wrap procedure (April-driven)

During the EOD Wrap calendar block (4:00-4:30pm SCHARP onsite days Mon/Wed, 2:30-3:00pm AF onsite days Tue/Thu), April executes the following 6 steps: 1. Block tomorrow's calendar with everything that has to be done (deep work, drive time, prep blocks, focus sessions, EOD wrap, lunch, recurring standing items per the auto-create table). 2. Add prep blocks BEFORE meetings that need them: 15 min default, 30 min for complex meetings (e.g., new client kickoff, board prep, leadership 1:1). 3. Categorize tomorrow's items using Outlook categories (Client, Internal Ops, Focus/Deep Work, SCHARP, Personal, CW Task Block, Leadership/Strategy, Vendor/Partner). 4. Mirror busy blocks to AF + SCHARP calendars via the CalendarMirror n8n workflow (runs every 20 min automatically; manual trigger available if urgent). 5. Confirm what slipped today, what's done — update CW ticket statuses, surface anything that didn't get touched. 6. Update Airtable Tasks: mark complete, defer with new due date, or escalate to Agent Queue if blocked. Output format: brief status report to Christi at end of wrap session. Don't ask for approval on routine blocking — only surface decisions (e.g., 'I see Thu has a triple-overlap from 1-3pm, here's what's colliding').

Applies toAllAgentsApril
TechnicalActiveHome, May 26
Outlook COM calendar event creation recipe (PowerShell)

To create a calendar appointment via Outlook COM (the only supported method — never use MCP Outlook tools, never use Graph API for Christi's calendar): ```powershell $outlook = New-Object -ComObject Outlook.Application $ns = $outlook.GetNamespace("MAPI") function New-CalBlock { param( [string]$Subject, [datetime]$Start, [datetime]$End, [string]$Body, [string]$Categories, [int]$BusyStatus = 2, [int]$ReminderMinutes = 10 ) $appt = $outlook.CreateItem(1) # 1 = olAppointmentItem $appt.Subject = $Subject $appt.Start = $Start $appt.End = $End $appt.Body = $Body $appt.Categories = $Categories $appt.BusyStatus = $BusyStatus $appt.ReminderSet = $true $appt.ReminderMinutesBeforeStart = $ReminderMinutes $appt.Save() # NEVER call .Send() — appointments don't send like emails Write-Host "CREATED: [$($Start.ToString('h:mm tt')) - $($End.ToString('h:mm tt'))] $Subject" } ``` BusyStatus values: 0=Free, 1=Tentative, 2=Busy, 3=OutOfOffice, 4=WorkingElsewhere. Default to 2 for focus/work blocks, 3 for OOO replies. Always write to a .ps1 file and execute with `pwsh -File <path>`. Never run COM code inline in bash — backticks and `!` characters break. Calendar appointments do NOT have a 'Send' method like emails. .Save() is the final step. If you call .Send() on an appointment, it tries to send a meeting invite to attendees that don't exist. Reference scripts (working examples on disk): 2 - Internal Operations/_agent-workspace/april-block-wed.ps1, april-lay-thu-fri-blocks.ps1, create-focus-blocks-may18.ps1, create-week-may18-blocks.ps1.

Applies toAllAgentsApril
WorkflowActiveHome, May 26
Standing recurring calendar blocks April auto-creates

These blocks must exist on Christi's Crimson Outlook calendar every week unless Christi says otherwise. April creates them proactively (at Sunday weekly briefing or at EOD wrap) and re-creates if she sees them missing. | Day | Time PDT | Block | Outlook Category | |-----|----------|-------|------------------| | Tue + Thu | 3:00-4:00 PM | Drive Pasadena to Home (Christi continues from home after) | Internal Ops | | Mon + Wed | 4:00-4:30 PM | EOD Wrap (SCHARP onsite days) | Internal Ops | | Tue + Thu | 2:30-3:00 PM | EOD Wrap (AF onsite days, BEFORE drive) | Internal Ops | | Sunday | 6:00 PM | Weekly Briefing | Internal Ops | | Daily | 12:00-1:00 PM | Lunch | Personal | Exceptions: If Christi is at Camp Paivika or other multi-site travel day, drive blocks may shift or extend. If she's working from home all week, drive blocks pause. April surfaces exceptions to Christi before suppressing a standing block. Use the New-CalBlock pattern from april-block-wed.ps1 as the canonical PowerShell recipe (see the Outlook COM calendar event creation recipe learning).

Applies toAllAgentsApril
WorkflowActiveHome, May 26
Sunday Weekly Briefing actions (April-driven)

At the Sunday 6:00 PM PDT Weekly Briefing block (per CLAUDE.md), April walks the upcoming week and stages it: 1. Walk the upcoming week's calendar across all 3 work calendars (Crimson Outlook, AF, SCHARP). 2. Identify top 3-5 priorities using these criteria: due date (closest first), client tier (Emerald/MSSP first), open CW tickets touching the work, and any Anzor or Pete escalation. 3. Block advance time across all 3 work cals: - Deep work blocks for the top priorities - Drive time for any onsite days (Tue/Thu AF Pasadena, Mon/Wed SCHARP Pasadena) - Prep blocks for meetings that need them - The standing recurring blocks if not already present (see separate learning) 4. Cross-calendar sync — confirm the n8n CalendarMirror workflow is running and busy blocks are mirroring correctly. 5. Surface for Christi: top priorities, any blocked items, any conflicts she needs to resolve. Output: a one-screen weekly summary delivered to AdaptoBriefing feed Sunday evening so it's waiting Monday morning.

Applies toAllAgentsApril
PatternActiveHome, May 26
Voice-to-text autocorrect handling (Christi's dictation patterns)

Christi frequently dictates messages via voice-to-text. Common autocorrects to watch for: | Spoken | Often Autocorrects To | Real meaning | |--------|----------------------|--------------| | 'calendar' | 'cop' or 'calends' or 'calanders' | calendar (always) | | 'calendars' | 'calls' or 'cans' | calendars | | 'Brivo' | 'bravo' or 'breeze' or 'brio' | the Brivo access control system | | 'SCHARP' | 'shark' or 'sharp' | the SCHARP client | | 'Camp Paivika' | 'camp pavica' or 'camp papika' | Camp Paivika | | 'AbilityFirst' | 'ability first' (with space) | the AbilityFirst client (always one word) | | 'Michuan' | 'Michoacan' or 'Michoacán' | Michuan Fleming (CPO) | | 'Cotsen' | 'cotton' or 'cosen' or 'cousin' | Cotsen Foundation | | 'Anzor' | 'answer' or 'anchor' | Anzor (Crimson CEO) | | 'Lynwood' | 'Linwood' | Lynwood (LA city) | How to apply: - When Christi's instruction contains a word that doesn't fit context (e.g., 'put blocks in the cop'), assume voice-to-text typo first, then ask for clarification only if the corrected word still doesn't fit. - Common test: replace the suspect word with the most likely intended word ('cop' → 'calendar'), re-read the sentence. If it now makes sense, use the corrected interpretation. - If still ambiguous after correction attempt, ask Christi: 'Did you mean X or Y here?' Don't silently choose. - Build the autocorrect map over time — every new dictation typo Christi catches gets added to this learning.

Applies toAllAgentsApril
ProcessProposedMay 21
Dewey: self-check reconstruction totals (sum entries, ≤12h) and verify ticket IDs exist before citing

Two failure modes observed in Dewey's May 20, 2026 time reconstruction, both caught before posting: 1) ARITHMETIC INTEGRITY. Dewey's proposed 20-entry table summed to 17h34m (1054 min) while its stated day total claimed 11h47m (707 min) — a 347-min discrepancy. Root cause: it logged heavily parallel / agent-executed afternoon work (235-account M365 deletion, ghost-event cleanup, OneNote build, Cotsen decks) as if performed serially, then mis-totaled. RULE: Before presenting ANY reconstruction, (a) sum the individual entry durations and confirm the sum equals the stated total, and (b) confirm the day total falls in the 9–12h band and never exceeds 12h. For parallel / agent-executed work, log Christi's human-equivalent supervision/decision/review time, NOT the serial sum of overlapping blocks. 2) PHANTOM TICKET IDS. Dewey instructed reuse of 'existing' tickets #942176, #942071, and #2673 — all returned 404 (guessed/fabricated). RULE: Never cite a ConnectWise ticket number you have not verified via GET. Before referencing or charging time to an 'existing' ticket, confirm it exists; if it does not, create a real one.

Applies toAllAgentsDewey
CorrectionActivePasadena, May 1
AbilityFirst leadership team is FOUR people: Sergio, Jeremy, Carl, AND Michuan

AbilityFirst leadership team is a group of FOUR, not three. Always include all four when emailing leadership, drafting executive comms, looping leadership in on AF decisions, or routing leadership-level deliverables. The four leadership members: 1. Sergio Letona — CEO 2. Carl — CFO 3. Jeremy Sidell — Chief Program Officer (CPO). NOT IT. Programs side of the org. (jsidell@abilityfirst.org, Contacts rec4TQkKFgeMxAgIC) 4. Michuan Fleming — COO / Chief People Officer (mfleming@abilityfirst.org, Contacts recZkxk1xxYkNInpn) NEVER send a leadership-tier AF communication that includes Sergio, Jeremy, and Carl without also including Michuan. She has been left off repeatedly across multiple sessions and that pattern stops now. Applies to: leadership announcement emails, leadership briefings, leadership-only meeting invites, executive summaries, board prep, strategic decision routing, project status to leadership, AF training rollouts targeting leadership, or any 'leadership cc' pattern. Also check: 'Michonne' showing up in transcripts (e.g., camp project 5/1/2026 ops meeting tail) is most likely a transcription mishearing of 'Michuan' — verify before treating as a separate person. Do NOT route IT-specific items to Jeremy. He runs Programs. Do NOT infer leadership roles from name alone. Verify against Contacts table or ask Christi.

Applies toAbilityFirstAgentsAll
ProcessProposedApr 30
April Standing Rule 1: Three-strike rule on recurring inbox items

If same alert, task, or thread appears in 3 consecutive inbox summaries without action, STOP listing it and instead present a one-time decision prompt: 'This has appeared 3 days running. Proposed disposition: [specific action]. Approve?' If Christi says ignore it, file as Recurring-Ignored in Calibration Log and never surface it again. Triggered by 9x BrightGauge / 11x Beta Bionics / 14x Asana wallpaper pattern.

Applies toAllAgentsApril
ProcessProposedApr 30
April Standing Rule 2: Draft first, flag second

For any 'Christi to Respond' item, attempt to produce a ready-to-send draft in Christi's voice BEFORE falling back to a flag. If can't draft because of context gap or decision-only-Christi-can-make, state explicitly what's needed: 'I need X to draft this reply. Can you give me X?'

Applies toAllAgentsApril
ProcessProposedApr 30
April Standing Rule 3: Check Sent before flagging any thread

Before marking any thread 'Christi to Respond,' search Sent folder and recent conversation history for matching reply. Existing rule 7c that April was failing - UKG duplicate forward proves it.

Applies toAllAgentsApril
ProcessProposedApr 30
April Standing Rule 4: Audience-check every draft (TO/FROM/surface)

Before saving any draft, explicitly state who draft is TO, who it is FROM, and what send surface (Outlook vs SCHARP Gmail vs AF account). Anderson and Badge Update drafts both had audience or surface ambiguity that created friction.

Applies toAllAgentsApril
ProcessProposedApr 30
April Standing Rule 5: Track dispositions, not just flags

Every item April surfaces gets a status: Open, Sent, Killed, Delegated, or Recurring-Ignored. If disposition unknown, ask at next session. Goal is closing loops not keeping them open in morning summaries indefinitely.

Applies toAllAgentsApril
ProcessActivePasadena - SCHARP office, Apr 30
CW board selection rule: HelpDesk = reactive user issues, Implementation = project work, vCIO = Christi's strategic work

Board selection for new CW tickets is based on the WORK TYPE, not the owner. Default routing: - **Board 53 HelpDesk (MS)** — reactive end-user issues. Sign-in problems, app access, account lockouts, password resets, software not working, etc. This is where Crimson helpdesk dispatches client user-facing tickets. Default status: Pre-Process #874 (lets dispatch route). - **Board 58 Implementation (MS)** — project work, deployments, scheduled migrations, planned configuration changes. Status flow: Pre-Process (default), Working Issue Now, Scheduled Remote/Onsite, Closed - Silent (#955) or Closed* (#956). - **Board 80 vCIO** — Christi's own strategic/advisory work for clients she's CIO of (SCHARP, AF). Roadmap conversations, board prep, strategic decisions, vendor reviews. NOT for end-user tickets she's coordinating. - **Board 48 Client Projects** — multi-phase project tickets (different from Implementation single-engagement work). **Critical correction for an earlier learning:** The memory rule 'ALL Christi's tickets go to Board 80' was wrong as written. It applies to her STRATEGIC vCIO work, not to every ticket she happens to own. When Christi is owning a ticket because the issue routed through her (e.g., a client exec told her about a user issue), the ticket still goes to the appropriate work-type board (HelpDesk for user issues, Implementation for project work). Owner = Christi for accountability/visibility; board = the actual work type. Decision tree: - Is this a user reporting a problem with their stuff? → HelpDesk (53) - Is this planned project work or a deployment? → Implementation (58) - Is this Christi advising on strategy, roadmap, or vendor decisions? → vCIO (80) - Is this an internal Crimson admin task? → Crimson IT client ticket (per separate rule, NOT Board 71) Violation pattern: Bestie #2 created ticket #938957 for a DTLA helpdesk user issue (Kevin Thomas's M365 sign-in error) on Board 58 Implementation. Wrong board. Christi caught it. Recreated as #938966 on Board 53 HelpDesk (MS).

Applies toAllAgentsHectorAprilAll
ToneActivePasadena - SCHARP office, Apr 30
Drafting rule: combine related questions into one reply, don't split with 'I'll come back separately'

Christi adjusts formality by audience and situation. There is no single 'Christi voice.' This learning captures TWO things: the universal rules that apply to every draft, and the situational rules that applied to the Cotsen Kamyab response (which was MORE formal than her usual tone). DO NOT pull the formal-context patterns into casual threads. === UNIVERSAL RULES (apply to every draft) === 1. **Don't split with 'I'll come back separately.'** When a thread contains two or more related questions, answer all of them in one reply unless there is a genuine reason to defer (one needs research lasting more than a day, or needs Christi's offline review). The 'come back separately' reflex wastes a thread turn and signals reluctance. Combine related answers. 2. **Drop leading verbs in bullets.** 'Review of admin role assignments...' becomes 'Admin role assignments...'. Go straight to the noun phrase. 3. **Use specific Microsoft / vendor product names, not generic concepts.** 'Microsoft Purview sensitivity labels' beats 'sensitivity labels.' Reader can search and verify. 4. **When asked 'should we change X,' offer A/B/C with tradeoffs, not a single recommendation.** Respects client decision authority. 5. **No em dashes ever** (per separate rule). === SITUATIONAL RULES (use ONLY when context calls for higher formality) === The Cotsen Kamyab 4/30 response was deliberately more formal than Christi's usual tone. She said: 'That email was more formal than my normal ones. But I felt like it called for it.' These patterns belong in higher-formality contexts: - Multi-stakeholder client emails CC'd to a leadership team or committee - Initial substantive responses on a project deliverable, scope, or timeline question - Foundation board, nonprofit committee, or executive-team threads - Anything that's going to be archived as project record / used to set client expectations When those signals are present, draft with: - Self-aware meta opening for long responses ('apologize in advance for the lengthy response, I wanted to cover everything') - Single availability slot offered, not multiple - Trust-building paragraph that names WHY a structural decision the client made is smart in their context - Slightly more measured prose, longer paragraphs, more careful structure === CASUAL/NORMAL TONE (default for most of Christi's threads) === For 1:1 follow-ups with someone she has rapport with, internal Crimson messages, quick replies, operational threads, and the bulk of her daily email: Christi's default voice is more conversational, shorter, direct. Drop the meta openings, drop the trust-building paragraphs, drop the option lists. Just answer. === HOW TO READ THE CONTEXT === Formality signals to watch for: - Number of recipients (1 = casual; 3+ stakeholders CC'd = more formal) - Subject matter (operational ticket = casual; project scope or timeline = more formal) - Sender's tone in the prompting message (terse/casual = match it; structured/formal = match that) - Stage of engagement (deep into a relationship = casual; setting expectations on a new deliverable = more formal) When in doubt, lean conversational. Christi can always add formality on review; she rarely strips it off.

Applies toAllAgentsAprilAgnesOttoStuartBob+3
ProcessActiveApr 30
STOP surfacing Teams notification emails (no-reply@teams.mail.microsoft)

Teams message notification emails ('X sent a message' from no-reply@teams.mail.microsoft and similar Microsoft Teams notification senders) are NOT to be surfaced as inbox triage items. Christi handles real Teams content inside Teams itself, not via these email digests. Specific senders to filter: - no-reply@teams.mail.microsoft - noreply@teams.microsoft.com - Any Microsoft Teams notification automated email Ignore in inbox triage. Don't include in daily briefing. Don't surface as 'Christi to Respond.'

Applies toAllAgentsAprilCron
CorrectionActiveHome, Apr 23
Board routing refinement — Board 80 is SCHARP+AF ONLY; other clients go to Board 58 Implementation (MS)

The 'Board 80 for Christi's tickets' rule is more nuanced than Dewey v2 playbook captured. **REFINED RULE (2026-04-23, from Christi direct):** 1. **Existing tickets:** Post time to whatever board the ticket already lives on. Do NOT migrate. Christi logs to Board 48, 58, AF project boards, SCHARP project boards, Board 80, etc. routinely — that is normal. Hector's 90-day analysis confirmed 518 entries spanning many boards. 2. **NEW ticket creation — board depends on CLIENT:** - **SCHARP or Ability First, CIO-level work** -> Board 80 (vCIO). - **All other clients** (DTLA, Karney, Anderson, Alere, Cotsen, Irongate, Weingart, Beta Bionics, Mobility, Arc, Crimson-internal, anything non-SCHARP-non-AF) -> **Board 58 Implementation (MS)**. 3. **SCHARP/AF non-CIO work** (e.g. helpdesk-level, L1 assist) — post to the existing helpdesk/project ticket on its native board. Do NOT force to Board 80. **Board reference (from 2026-04-23 CW query):** - Board 44: Help Desk - Board 53: HelpDesk (MS) - Board 58: Implementation (MS) — **DEFAULT for non-SCHARP/AF new tickets per Christi** - Board 60: Implementation (SEC) - Board 62: HelpDesk (TS) - Board 63: Implementation (TS) - Board 65: Recurring Proactive (MS) - Board 71: Administrative (DO NOT USE for Christi's work per superseded rule) - Board 80: vCIO (SCHARP + AF CIO work only) Applies to Dewey + Hector + anyone reconstructing or logging Christi's time.

Applies toAllAgentsDeweyHector
ProcessActiveWork - Desktop, Apr 22
Offboarding tickets: Christi is CC'd for visibility only, not action

Christi is CC'd on offboarding tickets across ALL clients (SCHARP, AbilityFirst, etc.) for visibility only. She does NOT action them, does NOT need to reply, and does NOT need to be surfaced as a decision-maker on them. This applies universally: - SCHARP offboarding (Bridget Grisby, HR Rep) — Ron Discaya, any future offboardings - AbilityFirst offboarding (Jorge Lopez, Kaleab escalations, etc.) - Any other client offboarding tickets where she's on the thread Do NOT flag offboarding tickets as: - Christi-response-needed in inbox triage (April, stop it) - Carryover action items in session handoffs (Bestie2, stop it) - Active tickets in director status reports (Charl, Bekker, stop it) - Queue items requiring her decision Correct handling: - Summarize offboarding status IF directly asked - Flag if an offboarding ticket is blocked/stuck/missing steps that only she can unblock (rare) - Otherwise treat as informational noise and move on EXCEPTION: If an offboarding involves an elevated-risk departure (insider threat, litigation hold, executive, or someone with privileged access), surface it. Use judgment — most offboardings are routine HR workflow and she's just on the CC for awareness.

Applies toAllAgentsAprilHectorCharlBekkerAll
ProcessActiveWork - Desktop, Apr 22
SCHARPDB credit card blocker is escalated to Dr. Barbour — don't re-flag

SCHARPDB cloud DB build (Prat Yadav) is blocked on a SCHARP IT credit card being set up. The credit card request is WITH Dr. Jack Barbour (CEO) and he is aware of the blocker. Do NOT keep recommending that Christi email Darva Coleman or Kashif Khan to expedite — the ask is already at the CEO level. Charl, Fritz, Clive, and Rex: stop listing 'unblock SCHARPDB credit card' as a Christi-action-item in SCHARP status reports. Frame it as 'pending with Dr. Barbour, CEO aware' instead. The 15-year-old Dell PowerEdge 2950 running production SQL IS still a real risk, but the mitigation path is already in motion. Only re-raise if: (a) Dr. Barbour signals it's dropped / needs a nudge from Christi, (b) a new DB-dependent project gets blocked by the same delay, or (c) the Dell actually fails.

Applies toSCHARPAgentsCharlFritzCliveRex
ProcessActiveWork - Laptop, Apr 13
AdaptoIT blog mix debate: Stuart vs Warren vs Hugo - decision pending with Bestie #1 weigh-in

Open strategic debate as of 4/13/2026 evening on AdaptoIT blog voice mix and whether how-to should be the dominant angle. POSITIONS: STUART (writer): How-to is a utility anchor, not dominant. Every vendor ships how-to content and it commoditizes the brand. The $30 Copilot burn and gaming chair dispatch posts can only be written by Christi - those build loyalty. How-to brings search traffic but readers leave. Proposed mix: 30% how-to / 25% cautionary tale / 20% personal narrative / 15% playbook / 10% product field test. Advisory posts ad hoc. WARREN (strategy): YES to how-to dominant. How-to is the funnel for future products (AdaptoInbox, AdaptoHub). Teaching creates qualified leads - developer tools playbook (Stripe, Twilio, Vercel). SEO compounds, satire does not rank for search intent. Need authority now with only one published post. Proposed mix: 70% how-to / 30% satire. HUGO (gate): NOT YET APPROVED. Five gates must clear before Stuart drafts: (1) cadence commitment in writing, (2) mix decision documented with rationale, (3) WordPress MCP fix first, (4) editorial calendar with real dates, (5) definition of done per post. BESTIE #1 (adjudication): Warren and Stuart are arguing past each other because they are optimizing for different things. Warren wants a funnel. Stuart wants a brand. Those are not the same goal. The actual tiebreaker is where AdaptoInbox is. If close enough to send people to, Warren wins and go how-to dominant. If still audience-building with no product ready, Stuart wins and narrative + cautionary tale do more work. Hugo is right on process regardless - nobody drafts until the call is made and written down. KEY CALLOUT: Stuart catalogued 6 voice modes tonight; the SOP only knows 2. Close that gap - every agent who writes for Christi is currently working with incomplete information. DECISION STATUS: Held for Christi to name AdaptoInbox readiness. Hugo's 5 gates must clear regardless of mix outcome. SOP recDyZdTlZqK105y8 needs expansion from 2 modes to 6 modes per Stuart's catalog.

Applies toAdaptoITAgentsStuartWarrenHugoDave
Client-SpecificProposedApr 13
Adoption assistance: $2,091 monthly, 27th, now direct deposit to CapOne

Christi receives $2,091/month adoption assistance for her kiddo on the 27th. Historically arrived as a mailed check. As of 2026-04-25 it switched to direct deposit into Capital One 360 Savings. Feb 2026 check was lost and reissued — still inbound as of 2026-04-13.

Applies toNone
ToneActiveWork - Laptop, Apr 13
Charl persona: he/him, loveable South African, obsessed with being the best for the client

Charl (SCHARP director agent) is male. Refer to him as he/him, not she/her. His persona is a loveable South African who wants to be the best for the client. That drive - 'best for the client' - is his north star and should color how his output reads: warm, protective of SCHARP's interests, a little charming, never bureaucratic. Any retrospective summaries, cross-agent references, or hand-offs involving Charl must use correct pronouns and preserve the voice.

Applies toAllAgentsAll
Client-SpecificProposedApr 13
Crimson IT paycheck split 50/50 USAA Classic + CapOne

Christi's Crimson IT biweekly paycheck (~$4,550 net) is split approximately 50/50 between USAA Classic Checking (1496) and Capital One 360 Savings (6271). Do NOT confuse the ~$2,100 deposits landing on the same pay day with adoption assistance — those are paycheck halves.

Applies toNone
ProcessActiveWork - Laptop, Apr 13
Outlook COM send recipe: Display() + 800ms sleep + prepend body before signature

Working pattern for sending email via Outlook COM with the saved signature intact. $outlook = New-Object -ComObject Outlook.Application; $mail = $outlook.CreateItem(0); $mail.To = 'address'; $mail.Subject = 'subj'; $mail.Display() | Out-Null; Start-Sleep -Milliseconds 800; $sig = $mail.HTMLBody; $body = '<p>content</p>'; $mail.HTMLBody = $body + $sig. Key points: (1) Display() is what triggers Outlook to pull the default signature into HTMLBody - setting HTMLBody directly without Display() yields no signature. (2) The 800ms sleep is required because signature insertion is async. (3) Prepend new body to existing $sig to preserve the saved signature at the bottom. (4) Do NOT call $mail.Send() programmatically - it has thrown 'Value does not fall within the expected range' in same-session COM calls and it bypasses Christi's review. Leave the window open for her to click Send.

Applies toAllAgentsAllApril
ProcessActiveWork - Laptop, Apr 13
SCHARP Datto backup recovery HANDLED - seeding drive populated and shipped back

SCHARP Datto backup situation is RESOLVED, not an open risk. Datto shipped a seeding drive. SCHARP populated the drive with data from all 7 servers and shipped it back to Datto. Backups for all 7 servers now recovered. Do not flag Datto as an open SCHARP risk going forward. Charl, Fritz, and Rex should remove Datto from the critical-concern list in SCHARP status reports. If prior briefings or standups still reference 'Datto failing all 7 servers' or '100% storage full' as active problems, that info is stale.

Applies toAllAgentsCharlAll
ProcessActiveWork - Laptop, Apr 13
SCHARP Trellix being uninstalled - CrowdStrike is the going-forward endpoint tool

SCHARP is uninstalling Trellix from all computers. CrowdStrike is the go-forward endpoint security tool. The previously flagged 'CrowdStrike/Trellix $60K/yr overlap' is being resolved through Trellix decommission. Do not continue flagging the overlap as an open decision. Charl, Fritz, and Rex should treat this as in-progress consolidation, not a pending decision.

Applies toAllAgentsCharlAll
ToneActiveWork - Laptop, Apr 13
Stuart directive: produce MORE blog posts in the voice of the two reference pieces

Christi wants Stuart producing more posts in the voice and style of: 1. Published reference: https://adaptoit.com/my-ai-minions-are-trying-to-change-my-life-i-did-not-ask-for-that/ (see SOP recDyZdTlZqK105y8 for full voice breakdown) 2. Additional reference piece: https://crimsonit-my.sharepoint.com/:w:/p/christi/IQAY3q3-HdPURafLoo0-CtaTAYxBrb0rBNflEW30967qfhU?e=raTWsj Stuart should open both references, study the pattern, and propose 5-10 new blog topic angles that fit the same voice profile. The pattern includes: cold open with a specific named incident, agents referenced by name (Warren, Hugo, Charl, April, Segrid, etc.), technical sidebar that actually teaches, real excerpts readers can copy, self-aware admission, callback close. Christi will approve topic list before drafting begins. Hugo must gate-check Stuart's topic list before any drafts are written. No batch drafting without scope approval.

Applies toAdaptoITAgentsStuartDavePhilHugo
CorrectionProposedApr 13
Tilt and Earnin float dependency — exit dates May 8 and May 22

Christi uses Tilt ($400 cycling, $32/mo fees) and Earnin (up to $1K held) as bi-weekly cash float, roughly $1,800 dependent each cycle. Exit plan: first Tilt-free paycheck is 2026-05-08, first Earnin-free paycheck is 2026-05-22. Apps to be deleted on those dates. Do NOT recommend cash-advance apps in future.

Applies toNone
ProcessActiveHome - Desktop, Apr 12
Always set Source Computer on Agent Queue items

When creating an Agent Queue record, always set the Source Computer field (fld3Wsd1Cz0TCqAGh). Valid options: Work - Desktop, Work - Laptop, Home - Desktop, Home - Laptop. This lets Christi trace queue items back to the machine they were created on, which helps debug machine-specific issues (env var problems, MCP connections, file paths) and understand where work happens across her multi-computer setup. Determine the source by checking hostname or confirming with Christi at session start. These four are the canonical set - do not use shortened or made-up names like 'Home' alone or 'Pasadena'.

Applies toAllAgentsAll
ProcessActiveHome - Desktop, Apr 12
Blog drafts belong in Airtable Blog Pipeline fields, not on disk

When content writers (Stuart, Dave, Kevin, Bob, Otto, Phil) produce a blog draft, save the FULL HTML body into the Airtable Blog Pipeline record - not as a file on disk. For the NEST Blog Pipeline table (tblnhvcfsxTLBTJny), add the content to an appropriate field - if a 'Draft HTML' or 'Body' field does not exist, surface a queue item asking Christi to add one. Do NOT fall back to saving files. For the AdaptoIT Blog Pipeline (tbld7axxpiGMtoq7S in AdaptoIT base), same rule - content goes in the record, not on disk. WHY: Christi works across 4 computers. Files saved on one machine are invisible to agents running on another. On 4/8/2026 Stuart saved two drafts as HTML files that cannot be found on Home - Desktop when needed for WordPress push on 4/12. Word Count was logged (1,750) but the content itself is trapped on another machine. EXCEPTION: If a draft is too large to fit an Airtable multilineText field (very rare for a blog post), use the Draft Location URL field to point to a published-elsewhere location like a Google Doc - but never a local file path.

Applies toAdaptoITChoreStepsCounted DoorsMy Imperfect LifeAgentsStuartDaveKevinBobOtto+1
TechnicalActiveHome - Desktop, Apr 12
MCP endpoint URLs live in Windows Credentials or Azure Key Vault - never in memory files or git

MCP endpoint URLs and API keys (n8n workflows, custom MCP servers, service APIs) contain embedded auth tokens and must NEVER be stored in memory files, committed to git, or pasted into plain markdown. They belong in the OS credential store. Storage convention by computer: - Windows Desktops/Laptops: Windows Credential Manager (cmdkey /generic:<name> /user:<user> /pass:<value>) - Cloud-accessible machines: Azure Key Vault (KV) - Which one per computer varies — check per machine at session start Retrieval on Windows: cmdkey /list:<name> shows the credential exists but not the value. To use the value, read it via PowerShell with the CredentialManager module, or via the Windows Credential Manager GUI. Known credentials (names only, values retrieved at use): - adaptoit-wordpress-mcp: AdaptoIT WordPress MCP endpoint (n8n-hosted). User: christibrown252. - n8n-api-key: Admin API key for adaptoit.app.n8n.cloud n8n instance. User: christibrown252. Lets agents create/modify workflows programmatically. Base URL: https://adaptoit.app.n8n.cloud/api/v1 with header X-N8N-API-KEY. The Airtable KB record for a credential can list the name and purpose in the notes field - but the actual key/URL goes in the URL field only when it is not safely representable elsewhere, and that record should only be visible to Christi.

Applies toAllAgentsAll
ProcessActiveWork - Laptop, Apr 12
SCHARP Box.com Audit Results

Full Box environment audit completed 4/12/2026. 78 users on 80 licenses. 5 users hold 96% of storage: Robert Featherstone (217GB), Christi/Lorenzo (166GB), Belinda Betton (33GB), Pratiksha Yadav (19GB), Cesar Portillo (15GB). 41 of 78 users are ghost licenses with 0-2 files and under 2MB each (~$720/mo wasted, ~$8,600/yr). 1 user (Shane Sparkes) is Inactive status. Lorenzo folder: 73 items (59GB) are Lorenzo-only and safe to migrate without coordination. 44 items (107GB) are shared and need user coordination. Stale pre-2023 data: 7.79GB across 87 items.

Applies toNone
ProcessActiveHome - Desktop, Apr 12
Use the Agent Queue for async findings and questions

When an agent discovers something Christi needs to decide on, or surfaces a finding she should know about, write it to the Agent Queue table in NEST (base appYVXneddw1eKZEu, table tblkAC4m6C5DWqGQJ) instead of interrupting her workflow. Record fields: - Title: short, punchy, action-oriented - Type: Question (needs decision) or Finding (discovered) - Status: start as Open. Lifecycle: Open > Answered > Acknowledged > Resolved (or Dismissed) - Priority: Blocking / High / Normal / FYI - Agent: who surfaced it, use 'Bestie2' as generic - Context: full self-contained explanation, multi-paragraph is fine - Answer: her decision, can pre-fill if you found the answer yourself - CW Ticket, Client, Related Project, Related Task: optional links One question, one response, done. Not a chat.

Applies toAllAgentsAll
TechnicalActiveWork - Laptop, Apr 12
WordPress MCP server URL and tools for blog publishing

Blog publishing routing by site: ADAPTOIT (adaptoit.com) - WordPress MCP: https://adaptoit.app.n8n.cloud/mcp/9cfdcee2-f469-493f-8411-aabbe558f18d (configured as WordPress in Claude Code). Tools: Create_a_post_in_Wordpress, Update_a_post_in_Wordpress, Get_a_post_in_Wordpress, Get_many_posts_in_Wordpress. Stuart pushes AdaptoIT posts as drafts. CRIMSON IT (crimsonit.com) - NO WordPress MCP. Convert to docx using pandoc with CrimsonIT_pandoc_ref.docx reference doc. Save to Blog Drafts folder. Christi sends to Stephanie via Teams. Otto writes these posts. MY IMPERFECT LIFE - Separate WordPress MCP coming later. Bob writes these posts. Hold drafts until MCP is built. COUNTED DOORS (counteddoors.com) - TBD. Kevin writes these posts. CHORESTEPS (choresteps.com) - No blog writer agent assigned yet. Needs one. Blog drafts stored in: 2 - Internal Operations/Blog Drafts/

Applies toAllAgentsStuartOttoAll
PatternActiveHome - Desktop, Apr 11
Agents invoked as subagents cannot access MCP tools like Airtable

When you spawn another agent via the Agent tool (e.g., Segrid, Carl, Steve), that subagent runs in a separate context and does NOT have the MCP tools available that the parent session has. This includes Airtable, Postgres, Miro, Vercel, etc. This means subagents cannot create Airtable records, run SQL, update Miro boards, etc., even if the task assumes they can. Pattern: if a subagent needs to write to Airtable/DB/Miro, have it prepare the exact data/SQL and return it, then the parent session executes the MCP call. Happened with Segrid on the NEST Pipeline implementation and AdaptoInbox Plan creation - she prepared the records perfectly but couldn't push them; parent had to execute.

Applies toAllAgentsAll
TechnicalActiveHome - Desktop, Apr 11
Christi's git identity should use christibrown252@outlook.com for TheOtherChrisBrown repos

Christi's GitHub repos were transferred from adaptoit-christi to TheOtherChrisBrown. The TheOtherChrisBrown GitHub account is linked to christibrown252@outlook.com (and/or christibrown252@gmail.com), not ckbrown@adaptoit.com. Vercel checks commit author email to match a Vercel-linked GitHub account. Commits authored as ckbrown@adaptoit.com fail with 'Deployment Blocked - adaptoit-christi does not have a Vercel account linked'. Global git config was updated to christibrown252@outlook.com. Use that for any commits to TheOtherChrisBrown repos.

Applies toAllAgentsLanceNigelMelAll
ToneActiveWork - Laptop, Apr 10
Counted Doors editorial direction: warm, practical, personal stories welcome

Counted Doors content should be warm, informational, and things foster parents can actually use. Not forcing things on them. Posts lead with practical answers but weave in brief personal moments for credibility. Stories are welcome when they serve the reader. Editorial line: Counted Doors = where foster parents go to learn and feel understood (practical + personal, SEO-driven). My Imperfect Life = where Christi processes out loud (purely personal, faith-grounded). Kevin leads with utility but includes 'I learned this the hard way' moments. Bob stays purely personal. Dave drives editorial calendar from search research, especially fostering teens (underserved niche). Target: 2 posts/month, Facebook groups primary, Pinterest secondary, email list from day one.

Applies toCounted DoorsAgentsKevinBobDave
ProcessActiveHome - Desktop, Apr 10
Documentation lives in Airtable, not local files

Project documentation, plans, and tracking go in the NEST Airtable base. Do not store project docs as markdown files on the local computer. Use the appropriate NEST table (Projects, Plans, Tasks, Agent Queue, etc.) instead. The Miro board for AdaptoInbox remains as a visual reference, but actionable project data lives in Airtable.

Applies toAllAgentsAll
ProcessActiveWork - Laptop, Apr 9
All client emails must be logged as internal notes on CW tickets

ALL client emails sent via Outlook COM or any other method MUST be logged as an internal note on the corresponding CW ticket (service or project). POST to /service/tickets/{id}/notes or /project/tickets/{id}/notes with: text (summary of what was sent), internalAnalysisFlag: true, member: { identifier: 'Christi' }. Applies to Agnes drafts, April auto-responses, and any agent that sends email.

Applies toAllAgentsAgnesAprilAll
ProcessActiveWork - Laptop, Apr 9
All emails must be HTML with correct Outlook signature

ALL emails sent by agents must use HTMLBody (not Body) with the correct signature appended. Signature files at env:APPDATA\Microsoft\Signatures\. SCHARP contacts (@scharpca.org) use Main (christi.brown@scharpca.org).htm. AF contacts (@abilityfirst.org) use Main (ckbrown@abilityfirst.org).htm. All others use Main (christi@crimsonit.com).htm. Use Outlook COM: New-Object -ComObject Outlook.Application, CreateItem(0), set HTMLBody with message + signature HTML.

Applies toAllAgentsAgnesAprilAll
ProcessActiveWork - Laptop, Apr 9
Blog pipeline: Stuart pushes to WordPress, all agents track in Blog Pipeline table

Stuart ALWAYS pushes finished drafts to WordPress (adaptoit.com) in draft status. All blog agents track work in Blog Pipeline table (NEST). Stuart=adaptoit.com, Otto=crimsonit.com, Bob=my imperfect life, Kevin=counteddoors.com, Dave=brainstorms (status Idea), Phil=SEO audit. AdaptoIT flow: Idea > Stuart drafts > Phil SEO audit > fix loop until pass > Stuart pushes to WP > updates Blog Pipeline with WP Post ID. Stuart owns the full loop for AdaptoIT. When a post has a Target Publish Date, April creates an Outlook calendar block for Christi to review and publish.

Applies toAllAgentsStuartDavePhilOttoBob+2
ProcessActiveWork - Laptop, Apr 9
Planning workflow: Segrid plans, Hugo validates, Agent Queue for questions

Segrid is both planner AND project manager. Workflow: 1) Segrid builds plan (research, scope, timeline, tasks, budget), 2) Hugo validates (pass/conditional/fail), 3) Questions go to Agent Queue, 4) Segrid executes and tracks. Three plan templates: Crimson Billable (CW project, budget, agreement, quote number), Internal/Non-Billable (AdaptoIT, agent training, no CW), Dev Project (tech stack, repo, deploy target, environments). Every new project gets a plan before work starts. Hugo validates before Active status.

Applies toAllAgentsSegridHugoAll
ProcessActiveWork - Laptop, Apr 8
April must track sent/received email state to avoid re-flagging handled items

April MUST keep notes on what Christi has sent and received so she doesn't re-surface items already handled. After each inbox check, update knowledge base with current state. Track: what was sent, to whom, what is waiting for response, what is resolved. Before flagging a waiting-for-response item, check if a response has already come in. Use Contacts table Last Meeting Context and Email Thread Topics fields. Knowledge Base table can store thread-level status.

Applies toAllAgentsApril
ProcessActiveWork - Laptop, Mar 28
Always generate passphrases, never random character passwords

ALWAYS generate passphrases, NEVER random character strings. Format: 3-4 random words + a number + a special character. Capitalize first letter of each word. Examples: Maple-Sunset-River-42!, Thunder7$Bright-Ocean, Coffee-Mountain-Spark-91#. Apply every time a password is generated: user creation, password resets, service accounts, BGA accounts.

Applies toAllAgentsAll
ToneActiveWork - Laptop, Mar 27
Briefing email design: light theme, compact stats, executive-grade

Use the light theme briefing design (approved 3/27/2026). Light theme: white background (#ffffff), soft purple accents (#5b21b6, #7c3aed), gradient header. Stats strip: left-aligned compact row, NOT centered boxes. Anzor Priority: red-bordered box with badge, always prominent. Wins section: highlight deliverables, NOT tools/methods. Never mention agents, background agents, or Claude Code internals. Frame as Christi's direct work. Tags: pill-shaped (green=done, blue=in progress, yellow=pending, red=urgent). Tables: rounded corners, subtle borders. No dark theme. Omit marketing emails and CW notifications.

Applies toAllAgentsCronAll
ToneActiveWork - Laptop, Mar 11
Policy writing: Fortune 500 quality, formal prose, no bullets

All policies must be written at Fortune 500 quality in formal professional prose suitable for legal/compliance review. Third person, passive voice where appropriate. Vary 'shall', 'must', 'will', 'is required to'. NEVER use bullet points or numbered lists in the body. Express all requirements as complete paragraphs or flowing sentences. Tables ONLY for document metadata, revision history, and roles/responsibilities matrices. Required sections: Purpose, Scope, Definitions, Policy Statements, Roles and Responsibilities, Enforcement, Exceptions, Related Documents, Revision History. Minimum 1,500 words. Placeholder tokens: [COMPANY_NAME], [DATE], [NAME], [TITLE]. When a compliance framework is specified, weave regulatory citations naturally into prose.

Applies toAllAgentsGusPercyAll
ProcessActive
AdaptoIT documents save to AdaptoIT OneDrive, not local Documents

On any computer where `C:\Users\Christi\OneDrive - AdapToIT\` exists, all AdaptoIT-branded deliverables (drafts, lead magnets, blog posts, training modules, templates, marketing assets) save to that OneDrive tree. Canonical blog/lead-magnet path: `C:\Users\Christi\OneDrive - AdapToIT\03_Projects\AdapToIT-Blog\Documents\`. Before creating an AdaptoIT file, check that the Adapto OneDrive exists and save there. Never default to local `C:\Users\Christi\Documents\`. If the Adapto OneDrive is NOT mounted on the current machine, ASK Christi where to save rather than silently writing to local. Same pattern likely applies to other brand OneDrives (Crimson IT, foster care) — check for a matching `OneDrive - [Brand]` folder before saving brand-specific content locally.

Applies toAdaptoITAgentsAll
ToneActive
Stuart minions beat: required, varied, never omitted

Every AdaptoIT post, module, or deliverable about AI, Claude, automation, agents, or minions MUST include exactly ONE minions beat. Non-negotiable. Vary the setup, vary the punchline (NOT always 'too many meetings'), vary the placement (NOT always intro). Tie the punchline to the post's actual topic where possible. Never copy-paste a prior phrasing. Never cut the beat because 'it was the weakest one' or because the surrounding paragraph 'already flows' — that is omission dressed up as editorial judgment. If the only version feels forced, rewrite it to fit the topic better; do not remove it.

Applies toAdaptoITAgentsStuart
WorkflowProposedChristi's workstation (Claude Code), Jun 19
April: blanket-ignore all security-tool email notifications

During inbox triage (Section 3 — System Notifications), April marks-read-and-ignores ALL email from security tooling, including detection/incident alerts — NOT just routine reports. Senders include ShieldVision/Lumificy, Huntress, CrowdStrike, Barracuda + AppRiver, Sophos, Microsoft Defender, SentinelOne, and any other endpoint/email/EDR/MDR/SOC tool. April does not surface these even when they name one of Christi's clients or read as urgent (e.g. 'account compromise', 'active exfiltration').

Applies toCrimson ITSCHARPAbilityFirstAgentsApril
ProcessActiveApr 30
Lunch/personal FYI items don't get surfaced as actionable

Lunch coordination, personal calendar items, and FYI-only social meetings (e.g., Dr. Barbour lunch coordination with Michuan offering June 11/18) are NOT to be surfaced as actionable inbox items. They are FYI for Christi only. If the email contains specific dates someone is offering, treat it as informational. Do not draft a 'pick a date' reply, do not flag it as 'Christi to Respond.' Christi handles these directly when she has time. Exception: if Christi is the host or organizer and her response is required to confirm a meeting that's already on her calendar, that's actionable.

Applies toAllAgentsApril
Client-SpecificProposedApr 13
Personal subs Christi will NEVER cancel (as of Apr 2026)

Subscriptions Christi has confirmed she wants to keep during any budget-cutting exercise: SketchBox (joy + foster kids' art time), Shaklee, Planet Fitness, YouTube Premium, Disney+ (with Hulu bundled), Oura Ring, CVS ExtraCare, Canva, Airtable, Adobe Acrobat Pro. Do NOT suggest killing these without her explicit re-opening of the decision.

Applies toNone
ProcessActiveWork - Laptop, Apr 13
Social Media Matrix rationale - Christi's own wrap-head tool, success = easier audience building

The Social Media Matrix table (tbl05iTzLuOnBssEL) exists because Christi needed a single view to wrap her head around where to post what, across 5 brands and 9 accounts. Success metric: it makes audience building easier for her, faster decisions on where a given piece of content belongs. This is not a scope-creep side project - it is a personal operating tool that unblocks social execution. Hugo and other gate agents should not flag it as missing problem statement - the problem statement is 'I cannot keep 5 brands and 9 accounts straight in my head.'

Applies toAllAgentsHugoWarrenSegrid
TechnicalActiveHome - Desktop, Apr 11
Airtable API cannot create formula/rollup/count fields

The Airtable API only supports creating basic field types: singleLineText, multilineText, checkbox, singleSelect, multipleSelects, number, percent, currency, duration, date, dateTime, rating, multipleRecordLinks, email, url, phoneNumber, richText, barcode, multipleAttachments, singleCollaborator, multipleCollaborators. Formula, rollup, count, and lookup field types MUST be created manually in the Airtable UI. When designing table schemas programmatically, plan for this: create the base fields via API, then surface a queue item telling Christi which computed fields still need to be added manually. Similarly, the API cannot add choices to an existing singleSelect/multipleSelects field. Use typecast:true when creating records to auto-create options, or tell Christi to add them manually.

Applies toAllAgentsTimSegridAll
TechnicalActiveHome - Desktop, Apr 11
Airtable SQL MCP has content size limits - keep updates under ~7000 chars

The Postgres MCP tool used to push content updates to Neon has an effective size limit around 7000 characters per query. Large UPDATE statements (e.g., full blog post HTML) will fail with 'fetch failed' even though the query is valid. Workaround: keep content chunks under 6500-7000 chars. For longer content, write a seed script in the app repo that reads content from files and upserts via Prisma. Or use the app's own API endpoint if available. Confirmed working: ~6400-6900 char updates succeed consistently. ~9000 char updates fail with fetch failed.

Applies toAllAgentsAll
ProcessActiveWork - Laptop, Apr 9
Segrid must create project subfolders under client folders

When Segrid creates a new project plan, she MUST create a project folder under the client's folder. Path: 3 - Clients and Projects/[Client Name]/[Project Name]/. Contents: deliverables, drafts, meeting notes, export files, reports, data pulls. Examples: Cotsen Foundation/AI Assessment/, Ability First/License Optimization/, Scharp/Cloud Migration/.

Applies toAllAgentsSegrid
ProcessActiveWork - Laptop, Apr 1
Quotes go to sales via Teams channel, not email

Quotes for new client projects are submitted to the sales team via a Teams channel, NOT emailed directly to Anzor or the client. Christi provides the SOW and total hours only. No pricing breakdown (sales handles that). Keep quotes lean: scope of work + total hours, no fluff, no per-phase hour breakdowns unless asked.

Applies toAllAgentsSegridHugoAll