Guide · from my real practice

How I use Claude Code
for non-programming tasks

A breakdown of my real practice: what tasks I solve with Claude beyond code, how my "data lake" is built, how memory works across sessions, what skills and automations I've built, and which techniques make it all work. Everything below is reconstructed from my files, scripts, memory and reports in ~/dev/claude/data.

00The core idea

I use Claude not as a chat, but as an agent-employee with access to a local copy of the entire company — it both answers questions and does the work itself.

All the correspondence, tasks, sales and calls are pulled into one folder on disk. Claude gets access to it through ordinary file tools (Grep, Read, agents) — and so it can answer questions like "what's on fire with clients this week", "how long will feature X really take", "which partners actually bring in money" — citing specific quotes and numbers rather than making it up. And it's not just analytics: with that same access it does the work — it creates and tracks tasks in Notion, answers the team's questions, writes messages on my behalf, works in our CRM, changes settings in systems and runs automations.

Pull data locally Claude reads/greps it itself Analysis — or action Report, Notion task, answer — wherever the team works

Three things make this powerful: (1) data is local — I don't depend on API limits and can instantly search the entire mass of correspondence; (2) memory survives sessions — Claude remembers my rules and past conclusions; (3) the result goes where the team works — a report flies straight into the chat instead of staying in the terminal.

1 Mental models 2 What tasks I solve 3 Data lake: data structure 4 Syncing the sources 5 Three levels of memory 6 Custom skills 7 Automation without me 8 Techniques and tricks 9 Quality control 10 Output format: HTML reports 11 New-task checklist 12 What could be improved

01Mental models: how I think about this

The architecture below is a consequence. These are the principles it rests on. Most of them I voiced while explaining the system to another founder; I've gathered the most important here.

Rebuild yourself first, not the tool

The main constraint isn't the model — it's the speed at which your brain adapts. You can't outrun it. So the first goal is simply to spend as many hours with it as possible, until your habits rewire and the new way of working becomes reflex. Everything else in this guide is about what you start doing once that rewiring is underway.

"You can't outrun the speed at which your brain adapts. It's impossible. So the first goal I saw was — to sit with it as much as possible, to rewire."— from a conversation about the system, June 2026

① Describe WHAT, not HOW

The main mental shift. You describe the desired state, not the way to reach it. I don't even know where my script that downloads chats lives or which cron entry runs it — and that's fine: I described the result ("so the chats are always downloaded"), not the plumbing.

"You don't need to figure out how to do it. You need to figure out what you want."

② The model gives you the average — the 95/5 rule

Any LLM is a statistical model: it gives you the average of what it has read. For 95% of tasks the average is enough — the result is no worse than what an employee would do. But for the 5% (strategy, marketing, creative) the average isn't enough — there you need to add your own context: your framing, your logic, what matters specifically to you.

③ Don't expect a strategist

A corollary of 95/5. Where you need to come up with something good — that's still expert work. An example from code: how authorization is implemented in the CRM — I don't care, "it's there somehow and it works." But the architectural relationship between entities — that's mine, that's where I add context and think for myself. This isn't "not for strategy": with your framing and context it works through strategic memos beautifully (examples are in the "What tasks" section) — you just set the direction, not it on its own.

④ Treat it like a capable colleague with no context

It's not dumb — but out of the box it doesn't know you or your business. Explain things the way you'd explain them to a sharp new hire. You don't need to write tiny over-specific rules "for every little thing" — you need clearly delivered context.

⑤ The whole game is context

When I wrote my own agent from scratch, it became obvious: 90% of the result is giving the model the right context and the right tools it can use to enrich that context itself. The data lake, memory and skills below are all machinery aimed at one goal: deliver the right context at the right moment.

⑥ Don't do the routine — automate it

Repetitive things shouldn't be done on request — ask it to write a script and put it in cron. Then the data is always fresh, without burning tokens, and at work time the agent just takes what's ready.

"Don't ask it to download messages. Ask it to write a script and drop it into cron — so it's always there, no tokens."

Where the real leverage is: ×100, not ×5

Bolting neural nets onto an existing process is a crutch, it gives ×3–×5 to productivity. Reinventing the process from scratch, now that everything is different, gives ×100. So the biggest chunks of value are born not in "optimizing what was" but in "what would this look like if we built it anew."

For techies: write your own agent loop

If you program even a little, spend a day and write the simplest agent yourself. Any modern agent is a loop: a request to the LLM → a tool call → the next request to the LLM, and so on until the task is solved. Once you write it by hand, you'll understand far more deeply what to expect from an agent in different situations.

02What tasks I solve

The range is almost the entire non-technical management of the company. Below it's grouped by type of work, with real examples from data/reports/.

CategoryWhat Claude doesReal artifacts
Actions in systems, not just readingNot just an analyst: creates and tracks tasks in Notion, answers the team's questions, works in our CRM, changes settings in admin panels and systems, writes and sends messages — does the work, not just reports on itskills notion-tasks, write-as-me + telegram-send, project-setup
Parsing correspondence → conflictsScans client chats, finds escalations, bugs, churn threats, "stuck" items; cross-references with the client's GMV and prioritizesdaily/*.txt, <client>_chat_analysis, <client>_conflict_analysis
Estimating dev tasksReads repository code and produces a spec + an estimate in days, looking for the cheapest path through existing mechanisms. A bridge between business and devskill estimate-task, client integration estimates, starter_blocks_roadmap
Sales and revenue analyticsPulls Redash/AmoCRM, computes GMV, manager commissions, cohorts, dynamics by countrysales_analytics, sales_deep_analytics, sales/redash/*
Partner programStitches together 3 incompatible accounting systems (Notion ∪ Telegram ∪ Amo), computes the real top partners, conversion, deal cyclepartner_program_analysis, partner_analysis/union.json (all partners as one dataset)
Team and processesSummary overviews of workflows and workload, prep for 1-1 meetings and retrospectivesinternal team summaries
Product and prioritiesConsolidates client wishes, hypotheses, tickets, the roadmap of paid improvementsproduct_priorities, autopilot_wishes, notion/bugs_features/*
Launches and processesAnalysis of the client onboarding process, empathy in launch chats, automating the routinelaunch_process_analysis_2026, launch_empathy_automation_2026
Strategy and researchStrategic memos (the AI era, software commoditization), chronologies of product decisionsstrategy_ai_era, software_commoditization_starter_2026, "Cabinet timeline"
Testing the AI autopilotRunning the bot's test scenarios, a 3-way comparison of answers on real quotestestbot_3way_comparison, testbot_real_quotes_*
Calls → knowledgeAuto-collecting recordings from all sources → compression → Google Drive → manual upload into NotebookLMsync_recordings.py, the calls/ folder
Communication on my behalfDrafting and sending messages in my voice, with register tuned to the recipientskills write-as-me + telegram-send
Task managementTakes tasks from the Notion kanban, tracks statuses, closes them — including in an autonomous loopskill notion-tasks

Plus personal tasks outside work — Claude is used beyond Starter too (separate folders per project and client). The principle is the same: pull context locally → analyze → get a report.

03Data lake: how the structure is organized

Everything lives in one folder, ~/dev/claude/data — the "Starter Data Lake." A single README.md describes what's where and how to update it. This is the heart of the system.

Sources (incoming data)

  • telegram/ — hundreds of work chats, each as a flat grep-friendly chat.txt (and where available, the raw messages.json alongside)
  • pachca/ — the internal messenger: channels by department + _users.json (employee registry = source of truth for names)
  • notion/ — database exports: wishes, tickets, paid improvements, hypotheses, sprints, meeting minutes (2021–2026)
  • sales/amo/ (leads, contacts, funnels) + redash/ (GMV, commissions, cohorts in JSON)
  • calls/ — call recordings (audio + transcripts)

Processing and output

  • scripts/ — syncers and utilities (Telegram, Pachca, Notion, Amo)
  • insights/ — a fact-extraction pipeline into SQLite (insights.db)
  • reports/ — finished HTML reports + daily/ (daily summaries)
  • research/, sales/, <client>/ — materials on specific topics
  • .secrets/ — a separate protected folder for tokens, outside the code

Why this works

  1. Flat .txt next to .json. Each chat is saved both as structured JSON (for scripts) and as a human-readable chat.txt in the format [date] Author: text — the latter greps perfectly. The daily script literally does grep -E "^\[($DAY0|$DAY1)" across all chats.
  2. One README.md as a map. Notion database IDs, paths to tokens, sync commands — all in one place, so both I and Claude find things without digging.
  3. The source of truth is documented. For example, names are taken only from pachca/_users.json, not guessed from a handle — and that's written both in the README and in memory.

Why just files and grep, not RAG / a vector DB

A deliberate choice. The model already searches "like code": it finds a line, looks for its occurrences elsewhere, builds up its own context — and it does the same with any text. RAG only gets in the way here: the search runs many times, and when you pull in a document at a time (one, then another, then a third), it slows things down a lot. Flat .txt + grep is faster and more predictable. The one mandatory condition is to convert everything to text: calls → transcript (Whisper, locally, free), rather than stockpiling screenshots that would "eat infinite tokens."

04Syncing: the data is always fresh

The data lake isn't static. Scripts in scripts/ regularly pull in the new stuff so Claude always works with an up-to-date picture:

ScriptWhat it pullsHow often
telegram_sync.py / telegram/New messages from work Telegram chats (its own sync_telegram.sh + a lock — slow FloodWait catch-ups don't block the other syncs)every ~15 min
pachca_sync.pyPachca channels and DMs + the employee registryregularly
amocrm_sync.pyLeads, contacts, notes, funnels from Amoregularly
redash_sync.pyAnalytics snapshots from Redash (GMV, commissions, cohorts) — a cache of saved queries, with no load on prodonce a day
notion_*.pyWhole Notion databases + inbox + launcher errorson request/script
sync_recordings.pyCall recordings → ffmpeg compression → Google Driveevery 3h (launchd)
sync_all.shAn orchestrator of the fast syncs (pachca, amoCRM, redash) under a shared lock and timeoutscron every 15 min

The key principle: mirror the data locally first, then analyze. This removes the dependency on API rate limits during the analysis itself and lets me grep everything instantly.

05Three levels of memory

So Claude doesn't start from scratch every session or repeat mistakes, I have three different memory mechanisms — for different horizons.

level 1

claude-mem — a chronicle of the work

A plugin that automatically records "observations" about every session (what was explored, what was decided, what was done) into a searchable database. Currently 513k tokens of past work; recall saves ~95% of tokens versus re-reading.

Types: 🔵 discovery · 🟣 feature · ⚖️ decision · 🔴 bugfix. Access via mem-search or get_observations([ID]).

level 2

File-memory — rules and facts

A memory/ folder with a MEMORY.md index and one file per fact. Four types: user (who I am), feedback (how I want it to work), project (current projects), reference (external resources).

This is where my corrections land, so they don't recur. Loaded into the context of every session.

level 3

insights.db — structured facts

A SQLite database where an LLM pipeline (insights/extract/) extracts typed facts from correspondence: problems, complaints, by client tier and date. The query is query.py top-problems --tier 1 --months 3.

For analytics where you need SQL over the "soft" data of correspondence.

How I train Claude through feedback-memory

The most valuable technique. When Claude makes a mistake, the correction isn't lost — it becomes a memory file with sections Why (what exactly went wrong, with a date and a fact) and How to apply (a concrete checklist). Examples from my memory:

The effect: the same rakes don't get stepped on twice, and Claude gradually picks up my model of the business and my quality standards.

06Custom skills — my reusable workflows

A skill = a process written down once that Claude picks up by a trigger phrase. I've built 13 of them. This turns "explain it again every time" into "take the next task."

SkillTriggerWhat it does
write-as-me communication"write as me", "reply to X"A draft in my voice: brief, sentence-case, register tuned to the recipient (client/team/close circle), no swearing or bureaucratese, with the smiley )
telegram-send communication"drop it in Telegram", "find a chat"Reading/searching/sending via Telegram. Actual sending, not a draft
estimate-task product↔dev"estimate the task", "how long will it take"Deep code research → an HTML spec with a baseline, path A/B, a table of files and an estimate in days; separately hunts for the periphery (design, CRM, localization)
notion-tasks tasks"take the next task"A CLI over the Notion kanban: list / claim / comment / complete. Works in an autonomous loop too
notion-download datayou give a Notion linkDownloads the page (+ nested ones) as Markdown for analysis
starter-redash analytics"give me GMV / churn / revenue"Queries Redash for metrics by project and month
do-it-nicely quality"do it properly", auto on hard tasksForces it not to grab the first solution: gather context → 2-3 candidates with trade-offs → pick the maintainable one
deploy-to-our-server infra"deploy to our server"Deploys projects to my infrastructure (k3s)
add-domain-to-our-server infra"bind a domain"Binds a subdomain to a process (ingress-nginx + cert-manager)
add-project-to-starter-ai infra"connect a client to the autopilot"Sets up a new client project in my Telegram bot
+ karpathy-guidelines, solid, playwright-core — for technical work.

Why a skill beats a long prompt every time

07Automation: Claude works while I'm away

The most advanced layer. Claude runs without me on a schedule via claude -p (headless) and carries the work all the way through to posting it in a chat.

Case: a daily conflicts summary → auto-posting to Pachca

Every morning at 10:00 (GMT+7) launchd runs daily_conflicts_report.sh:

grep the last 3 days
across client chats
+ revenue.json
(client GMV)
claude -p with agents
finds conflicts
sort by GMV
🔴🟡🟢
POST to Pachca
from a service bot

The fine points that make this reliable:

Case: call recordings → NotebookLM

sync_recordings.py (launchd, every 3h) collects recordings from Yandex.Disk (Telemost), ~/Downloads and Pachca attachments, compresses them with ffmpeg (video → 480p, audio → 64k mono), renames them to DATE_TIME_source_context and drops them into Google Drive. Then I manually add them as sources into NotebookLM (it has no API). Smart filters cut out my own messages and non-recordings.

And for local capture I built my own open-source tool — MemorAI (a menu-bar app for macOS): it records calls and the screen itself and transcribes locally via whisper.cpp, no cloud. Also part of this "second brain."

Case: an autonomous task loop

The notion-tasks skill + /loop let Claude run in a loop: take the highest-priority task from the Todo column → move it to In Progress → do it → close it with a result → take the next one. Risky things go to Review for me to check, blocked ones go to Blocked with a reason.

Case: an agent-"OS" for launching client projects — already team-wide, not just mine

The most advanced of my agents serves not me but the team. Launching a new restaurant client means dozens of design settings (palette, fonts, logos, pages, corner radii) in our CMS. A designer used to do this by hand. Now they message the bot in Telegram in plain words and drop in files, and the agent applies the changes itself. Telegram became the admin panel, Claude the executor, there's no cloud infrastructure: it all runs on the operator's laptop.

designer writes in TG:
"here's the brand book, round the buttons"
the bot puts it
in a queue (inbox)
the agent takes a batch
of requests, loads context
sends a plan,
applies it, verifies
report in TG +
a record in the history

What's interesting about it — techniques that carry over to any process of the "intake → batch → apply → report back" kind:

08Techniques and tricks

Standalone techniques that recur in my work and pay off disproportionately.

① Mirror the data, then analyze

Don't hit APIs during analysis. Sync into flat files first, then Claude greps locally — fast and without limits.

② Sub-agents for wide scanning

When you need to comb through dozens of chats/files, Claude spins up parallel agents, each reading its own slice, and the results are merged. The daily report is built on this.

③ Facts separate from interpretations

In reports about people there are two levels: "what happened (quote + date)" and, separately, "what it might mean — needs checking." Don't mix them. Especially before publishing for a manager.

④ Look for the cheap path (for estimates)

The first pass always overestimates, assuming greenfield. The rule: for each task, write out separately "MVP through reuse" — is there a ready-made method/field/UI block that covers 80% of the work.

⑤ Source of truth, not guesses

Names — only from _users.json. Don't guess a name from email/handle. A partner — only if there's a chat. These rules are moved into memory to keep things factual.

⑥ Clone your voice

write-as-me holds my style with real examples and a register tuned to the recipient. Outgoing messages sound like me, not like a "polite assistant."

⑦ The result goes where they work

A report doesn't stay in the terminal: it flies into the right Telegram/Pachca chat. By the rule "I ask you to send — send it right away, then copy me so I can catch the error."

⑧ A snapshot in time

Big analyses (partners) are saved as a dated snapshot (union.json + a README with the methodology). Next time I compare the dynamics instead of reinventing the logic.

⑨ Configuration as code

Judgments that need to be stable go out of the agent into a human-vetted rule file (a dictionary "phrase → exact field/value"). Then the agent doesn't guess, it applies deterministically and identically everywhere.

⑩ Intake → batch → apply → report back

Reduce team processes to one loop: requests drop into a queue → the agent takes them in a batch (everything accumulated at once) with full context → applies them → verifies against the source of truth → reports and logs. Keep the transport (bot/form) thin.

My feedback loop (how all this improves)

Claude does the task I catch the error "at a glance" Correction → a memory file (Why + How) Next time it doesn't recur

It's exactly this loop that gradually turns Claude from "smart but naive" into "knows my business." Most of the feedback files in memory were born exactly this way.

09Quality control — the main job

When the model does 95% of the work, your job shifts to one point — checking. It's not a side activity, it's the main one.

"The single most important job is quality control."— from a conversation about the system, June 2026

Self-checking before the word "done"

The agent isn't allowed to say "done" until it has confirmed it itself. For interfaces, run end-to-end in the browser (via Playwright): click through what it drew, take screenshots, compare against the requirements, check there are no JS errors and that the data was saved. The working pattern:

build the
functionality
write scenarios
for it
from the scenarios —
e2e tests
run them yourself only then
come back to me
"Then it doesn't come and tell you it's all done — and then you open it and there's garbage."

Review — in a separate session

Non-obvious but important. Decisions made inside a session land in its context and are taken as fact — it won't re-check itself. So I move the quality check into a fresh session: each task gets a separate spec written to a file, and a separate agent compares the changes against that spec — without knowing how we got there — and hunts for the excess and the bad.

It generalizes beyond code too: a reviewer who sees only the spec and the result (not the author's reasoning) catches more than the same author "with fresh eyes."

What I don't believe in: roles within one session

"You're an experienced architect, evaluate this as an architect" within one session doesn't work: what fires isn't naming the role but structural isolation. First, in the main session, the agent gets things to a working state itself (pokes at it, checks it). And real quality control is a separate session with a clean context and only the spec on input. Separation through context, not through role prompts.

10Output format: self-contained HTML reports

My default result format is a single .html file with a dark theme, metric cards, tables and color statuses (🔴🟡🟢). Why it works well:

The principle: the output format is chosen to match the consumption channel. HTML — for reading and forwarding; plain text — for the messenger; Markdown — for Notion.

11Checklist: how to give Claude a new non-programming task

  1. Is the data in place? If the source is new — sync it into the data lake first (or ask Claude to write the syncer), then analyze.
  2. Is there a rule in memory? Check whether there's already a feedback/reference relevant to the task (definitions, sources of truth).
  3. Is this one-off or repeatable? Repeatable — make it a skill, not a one-off prompt.
  4. Need facts — name the source of truth. "Names from _users.json", "partners from Telegram folders" — so it doesn't guess.
  5. For reports about people — ask it to separate facts and interpretations and to flag what needs checking.
  6. Choose the format and the recipient. HTML for me / plain text into Pachca / a draft via write-as-me. Say "send" and it sends right away.
  7. Big analysis — ask it to save a snapshot (the dataset + the methodology), so you can compare dynamics later.
  8. Describe the result, not the method. What you want to get — and let it decide the "how" (where the script lives, which cron, which language).
  9. If quality matters — ask it to check itself and, for serious things, move the review into a separate session against the spec.
  10. Caught an error — record it in memory, so it doesn't recur.

12What could be improved

Observations about the system — where there's room.

AreaIdea
AutomationDaily conflicts is the only full-fledged auto-report. With the same pattern (claude -p + launchd + posting) you could set up a weekly summary on partners, sales or product wishes.
MemoryThe three memory mechanisms live separately. It's worth occasionally "tidying" file-memory (deleting stale stuff) and checking that reference facts are still current — the instructions cover this, but in practice it's easy to forget.
insights.dbThe fact-extraction pipeline into SQLite works: queries return data, the key is in the protected folder, there's a folder resolver and dedup. Room: a one-off full backfill over the whole history — on command.
SecretsTokens in a separate protected folder (chmod 600); scripts read from there with a fallback, so the automatic report doesn't fail. Room: bring the remaining integrations up to this.
Report templateThe branded CSS and conventions (palette, components, plain-text for Pachca, "facts vs interpretations" rules) are gathered into the starter-report skill — trigger "build a report in my style."
// reach the author

Very interesting, but none of it makes sense?

Happens ) Drop me a line — I'll explain it in plain terms, show you my own examples, or we can just chat about agents.

message me on Telegram
not always right away, but I do reply
Assembled from ~/dev/claude/data: README, scripts, custom skills, file-memory, claude-mem, 60+ HTML reports and breakdowns of work calls.
Everything in this guide is a reconstruction of my real practice, not "general" recommendations.
RU/EN