
Ai Second Brain
- 68 installs
- 115 repo stars
- Updated April 17, 2026
- charlie947/ai-second-brain
Set up an AI second brain by organizing ChatGPT and Claude exports into a linked Obsidian wiki managed by Claude Code with slash commands.
About
Walks a mostly non-technical user through Charlie Hills's AI Second Brain and Karpathy Wiki setup, organizing AI conversation exports into a living Obsidian wiki driven by Claude Code. A developer uses it to build a talk-to-it knowledge base from ChatGPT/Claude history plus MCP connectors and iMessage Channels.
- Organizes ChatGPT and Claude exports into a linked Obsidian wiki
- Sets up Karpathy Wiki and /today, /ideas, /create slash commands
Ai Second Brain by the numbers
- 68 all-time installs (skills.sh)
- Ranked #1,510 of 3,282 Productivity & Planning skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/charlie947/ai-second-brain --skill ai-second-brainAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 68 |
|---|---|
| repo stars | ★ 115 |
| Last updated | April 17, 2026 |
| Repository | charlie947/ai-second-brain ↗ |
What it does
Set up an AI second brain by organizing ChatGPT and Claude exports into a linked Obsidian wiki managed by Claude Code with slash commands.
Files
AI Second Brain Setup
This skill walks the user through the full setup from Charlie Hills's MarTech AI newsletter issue "How to build a second brain with Obsidian and Claude Code". The process turns a folder of exports and raw research into a living wiki the user can talk to from their phone.
The setup has three steps. The user can do all three or pick one — confirm at the start which they want.
1. AI Brain — export ChatGPT and Claude history, organise it in Obsidian as tagged, linked markdown 2. Karpathy Wiki — set up raw/ and wiki/ folders with Karpathy's CLAUDE.md instruction file so Claude Code can compile a living wiki from raw research 3. Living Wiki — add MCP connectors (Gmail, NotebookLM, Granola), set up iMessage Channels, scaffold the /today, /ideas, /create slash commands
How to use this skill
The user is most likely a non-technical newsletter reader. Many will be opening Terminal for the first time. Default to plain English, never assume CLI familiarity, and explain what each command does before running it.
The skill orchestrates a conversation. At each step there are things Claude Code can do (create folders, download files, install other skills, scaffold commands) and things only the user can do (request a data export from OpenAI, grant Full Disk Access in macOS System Settings, log in to NotebookLM in a browser). Be explicit about which is which. Pause and wait when the ball is in the user's court.
If the user says "skip step 1, I've already done it" or "just do step 3", honour that. Confirm what's already in place, then jump in.
Step 0: Pre-flight check
Before touching anything, confirm what the user has installed. Ask:
Quick check before we start. Do you have:
1. Claude Code installed and working? (you're using it now if so)
2. Obsidian downloaded? (free from obsidian.md)
3. Any ChatGPT or Claude data exports already requested? (the OpenAI one takes 1–3 days, so we may need to start it now and come back)
If Obsidian isn't installed, point them to https://obsidian.md and pause until it's done. If they haven't requested the ChatGPT export, kick that off first (instructions in Step 1) so it's processing in the background while they do the rest.
Also confirm where they want the brain to live. Default: ~/Desktop/Brain (one word, no spaces — spaces caused issues for Charlie when he used "LLM Brain"). Use Brain unless the user pushes back.
Step 1: Build the AI Brain
The goal here is to turn years of ChatGPT and Claude conversations into a tagged, linked, searchable Obsidian vault.
1a. Request the data exports (user does this)
This is user-only. Walk them through both:
ChatGPT (do this FIRST — it can take up to 3 days):
Go to chatgpt.com → click your profile icon (top right) → Settings → Data Controls → "Export data". OpenAI will email you a download link. Tell me when you've requested it.
Claude (arrives in ~5 minutes):
Go to claude.ai → click your profile icon (bottom left) → Settings → Privacy → "Export Data". The email arrives in about 5 minutes. Tell me when you've got both ZIP files downloaded and unzipped.
Wait for the user to confirm. If they say "the ChatGPT one will take days, what do I do meanwhile" — suggest moving to Step 2 (Karpathy Wiki) since it doesn't depend on the exports.
1b. Set up the vault (Claude Code can do this)
Once the user has unzipped both export folders on their desktop, do this:
mkdir -p ~/Desktop/BrainThen ask the user to drag the two unzipped export folders into ~/Desktop/Brain. After they confirm:
ls ~/Desktop/BrainVerify both folders are there.
Then tell them:
Open Obsidian. Click "Open folder as vault" (not "Create new vault"). Navigate to your Desktop and select the Brain folder. Tell me once it's open.1c. Organise everything (Claude Code does this — this is the magic)
Once the vault is open in Obsidian, the user needs to launch a fresh Claude Code session pointing at the Brain folder. Tell them:
Open a new Terminal window (Cmd+Space, type Terminal, hit Enter). Then paste this:
```
cd ~/Desktop/Brain
claude
```
Once Claude Code is running in that window, paste this prompt:
```
Organise this folder into an Obsidian vault. Convert all my ChatGPT and Claude conversations into individual markdown files with proper frontmatter (title, date, tags, category). Then launch 10 sub-agents to go through every conversation and smartly tag things: names, people, places, recurring themes, projects, and topics. Link everything together with wikilinks so the Obsidian graph connects related conversations.
```
This will run for several minutes and spawn 10 sub-agents in parallel. When it's done, tell the user:
Open Obsidian. Hit Cmd+G (or Ctrl+G on Windows) to open Graph View. Every conversation is now a tagged, linked markdown file. Have a wander.
Step 2: Set up the Karpathy Wiki
The AI Brain organises the past. The Karpathy Wiki is a living knowledge base that grows every time the user drops in new research. The user dumps raw sources into a raw/ folder, and Claude Code compiles structured wiki articles in wiki/.
Karpathy's framing is worth quoting to the user: "Obsidian is the IDE. The LLM is the programmer. The wiki is the codebase."
2a. Create the structure (Claude Code does this)
In the same Brain folder, create the two subfolders and download Karpathy's instruction file:
mkdir -p ~/Desktop/Brain/raw ~/Desktop/Brain/wiki
curl -L https://gist.githubusercontent.com/karpathy/442a6bf555914893e9891c11519de94f/raw -o ~/Desktop/Brain/CLAUDE.mdVerify the download worked:
ls -la ~/Desktop/Brain/CLAUDE.mdIf the curl fails, fall back to: WebFetch the gist URL (https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) and write the contents to ~/Desktop/Brain/CLAUDE.md using the Write tool.
2b. Get sources into the raw folder (user-led, with options)
Two paths — let the user pick.
Option A: Drag and drop. Tell them:
Open the raw folder in Finder. Drop in 5–10 sources on a single topic to start — PDFs, articles you've saved, transcripts, notes. Tell me when you're done.Option B: Pull from NotebookLM. This requires the NotebookLM skill. If they want this option, install it for them and walk through the login. See Step 3: Connectors below — the NotebookLM connector is the same setup. Once installed, ask the user for their notebook URL and run:
Pull all the sources from this NotebookLM notebook and save them as files in ~/Desktop/Brain/raw: [user pastes URL]2c. Build the wiki (Claude Code does this)
Once sources are in raw/, run:
Process every source in~/Desktop/Brain/rawusing the wiki instructions in~/Desktop/Brain/CLAUDE.md. For each source, write a summary page in thewikifolder, create or update relevant topic and concept pages, add wikilinks between related pages, and maintain an index file listing every wiki page with a one-line description.
This takes a few minutes. When it finishes, tell the user to open Obsidian, switch to the wiki/ folder, and hit Cmd+G for the graph view.
2d. Iterate (ongoing)
Coach the user on what to do next:
The wiki won't be perfect on the first run. Tell Claude Code to adjust: "split this page", "merge these two", "add more detail here". Karpathy also recommends periodic health checks — ask Claude Code to "check the wiki for contradictions, orphan pages, and missing concept pages" every week or two.
Step 3: Give the wiki a heartbeat (MCP + Channels + slash commands)
This step turns a static wiki into something the user can talk to from their phone. Three sub-steps.
3a. MCP connectors
Three connectors are worth setting up first:
- Gmail — for forwarded articles, research links, email threads
- Granola — for meeting transcripts, decisions, action items
- NotebookLM — for pulling existing notebooks
For each one the user wants, tell Claude Code:
Connect to my [Gmail / Granola / NotebookLM] so you can pull new content into the wiki.
For NotebookLM specifically, the install requires a one-time browser login that must happen outside Claude Code. Walk the user through it:
1. In Claude Code, run: Install the NotebookLM skill so I can pull sources from my notebooks. 2. Once install completes, tell the user:
Open a brand new Terminal window (don't run this inside Claude Code). Type:
```
notebooklm login
```
A browser will open. Sign into your Google account, wait for the NotebookLM homepage to fully load, then go back to Terminal and press Enter. Close that Terminal window. You're done.
3b. iMessage Channels
This is the part Charlie says "people lose their minds" over. The user sets up a Mac-side service that listens for iMessages sent to their own number, processes them against the wiki, and replies in the same thread.
Walk the user through it:
In Terminal, run:
```
claude --channels plugin:imessage@claude-plugins-official
```
Claude Code will request two macOS permissions. Both are user-only — explain what to do:
1. Full Disk Access for Terminal.
macOS will prompt you, or you can do it manually: open System Settings → Privacy & Security → Full Disk Access → toggle Terminal on. This lets Claude Code read incoming iMessages.
2. Automation permission for Messages.
The first time Claude Code tries to send a reply, macOS will ask if Terminal can control Messages. Click Allow.
Once both are granted, test:
On your phone, open iMessage and send a text to your own number. Within a few seconds, Claude Code will detect it, process it against your wiki, and reply in the same thread.
Note for the user: if they close Claude Code on their Mac, Channels stops listening. Tell them: claude --resume to pick up where they left off, or keep a session running in the background.
3c. Scaffold the slash commands (Claude Code does this)
Three commands to start. For each, send the user the prompt and ask them to paste it into Claude Code so it can save the command file (Claude Code will ask for write permission — they approve).
`/today` — daily plan (requires Gmail + Google Calendar + wiki):
Create a slash command called /today that reads my Google Calendar for today's meetings, checks my Gmail for anything urgent, and cross-references both against my wiki for relevant context on the people and projects involved. Give me a prioritised plan for the day. Save it as a file so I can run /today any time.
`/ideas` — content ideas (requires Granola + Gmail + wiki):
Create a slash command called /ideas that reads my recent Granola meeting transcripts, latest Gmail threads, and wiki pages, finds patterns and emerging topics across all of them, and generates ideas for content I should create, topics I should write about, and opportunities I might be missing. Save it as a file so I can run /ideas any time.
`/create` — content drafting (requires the wiki):
Create a slash command called /create that takes a topic or idea as input, pulls relevant context from my wiki, and produces a finished piece of content in my voice. It should be able to write posts, newsletter drafts, video scripts, and infographic outlines. Save it as a file so I can run /create any time.
Once saved, the commands work from the user's phone too. Texting /today to themselves in iMessage gets back a daily briefing.
Wrapping up
After all three steps, tell the user what they now have:
- Every past AI conversation, tagged and linked, in Obsidian
- A living wiki that grows every time they drop in new research
- The ability to talk to it from their phone via iMessage
- Three slash commands that pull their day, surface content ideas, and draft posts
Suggest a next move: drop one new source into raw/, then text themselves /create [topic from that source] to feel the loop close.
If they got stuck at any step, point them back to the original newsletter and offer to debug the specific failure rather than restart.
Things that commonly go wrong
- Folder name has a space ("LLM Brain" instead of "Brain") — Claude Code's path handling will break. Always use a single-word folder name.
- User runs `claude` without `cd`-ing first — Claude Code reads from whatever directory the terminal is sitting in. If they skip the
cd, sub-agents won't see the export files. Re-confirm the working directory before any organise/process step. - NotebookLM login attempted inside Claude Code — must be a separate Terminal window. The browser handoff fails otherwise.
- Channels stops working after Mac sleeps / Claude Code closes —
claude --resumebrings it back. Worth telling the user up front so they don't think it's broken. - Full Disk Access toggle didn't appear — sometimes macOS needs a Terminal restart after granting it. Quit Terminal fully (Cmd+Q) and reopen.
- Gist download fails — fall back to the WebFetch + Write approach in Step 2a.
# Tell GitHub Linguist these are tooling/assets, not the project's "source language".
# Without this, the repo gets misclassified as HTML or JavaScript.
# The actual skill is in SKILL.md; everything else here is supporting material.
social-preview.html linguist-vendored=true
render-social-preview.js linguist-vendored=true
*.skill linguist-detectable=false
.DS_Store
*.swp
.vscode/
.idea/
PKW�\���*�6ai-second-brain/SKILL.md�[َG�}�Wh`T�HV�d5Z|�Li+Zj�-�����A2��:�*q~���/���9�F��*��۠�̈��s�Z,��fnel��]T��bS�$�Į���l�"_�O6=Ԧ�;�֮�hw{�bo�4q��$M����6��g�G�϶*m�?�O�!1�k��l�"�����|-w�u��UK�}������F��wf.'-�ٴI'��o*�F����ݝ��sn�jg���5�Hus�����Զ�3�sYTMm@�M�ĉ�9��� ך4��g��4�[�|Q�nnp}�"y:y�������i��qp��4����qnΓ�Y<qU�6�ԩ��8-�l�K�Jv;0^��W�v5983m�+;�x���TDsW�i[�iq4]�W��!/*dz!Z�V��߃|�����0]���Ml������TDb���U.��i��)����$u�:�
XDn�moE�{�(rg
��@X��ڜ���j�����)�4V���d�|uǪ?�����>�M}����݃_l[�>��S����g3�~�A:�W;ҷZb��<��t��eUD�IӴd
� �ܶ������B��(Ir�86���7��$*�1<��C�K�����z�%�;"��>%�It�������I����T
�'�D��h�7��bif����L^U�:���j���Eg�f���Z�[<���l�C\��Ǽid9�:�k��|-��).|V1ת��*��~�������Y���P�M�l��#���`�%�C$?��� I|���qlxBT�ή2��s�q��8�y;7W�͋�>���cud��Jt�����D1��ql}�G𠯌�c�n��"F����n$���-"E�h�y�t��#f�x�rK����J�����ʒ/l�0$��$�K��mڐ�2���wiR��F3���e`�͵��,I[%
,�z�a�+Ŝ�:�`ʈ˳�Ínf�6B�&x�ć:r�6�C'�ե��'�QHtuW"�|W߱�ΙO���V�63¿}�1OS��"����Hڜ8�Y��ނp�,A�����;���znv0�Ƽf�{��sI���2��`>�XƠ� :�b�_�����E\+nq�åy.i9M"x��m���4�-���ڤ� �o�x"�n�wQ�VT�� w��X#��RE17�npfJ;���Qb�5��� y� �"��i�YB;�h�-�`6�X������/�#>�?����-�i��76&��bK�O��EG�.2�v|0�z���TV��7�-���i�<ͭ���������X:�4���D�qQ@¿�3�����j�L���u��H�!��t1��2؋�� �A���u g>n3-+1��q^�7K9�rP[���|�◟��oi���~v�§O<كG�r��C1�.)$u���E17e��H�g<g�4e�:?�#Ǖb�-P L�ASZ5��H��v\�.�����>���P�
X��C�)���/� >v�$T��DȀ5�G�z�e��{s�볭"�\#��te��8��CS�璊��z��@^9�]�j͗�1�xb�8����ċծc3}�� GN*�[��<L<�lk�Was�\+���(hT���#"X":2G�Қ���0B�!���'s��@���PHB�W��.�w>����q�3�D� 3�C�/�?��`x^J��C�
b<ܽ��(/�����G<L]���wP����U����f W0�����(���`P�OH�V��b�z(υ�.�xI���H���+M�u��*y��H�}�,~ϼ=0�ܸ��Hr
�۪�M�3��h�g��ɓK��:g�e�S�������F�W/�+��r3�D�VG��L�FTh����f�A�l��N��}2��D������i�L�E���kL�;��2gs�S��f
�
���C��9a`���[҈�2���Y��~o���7K�S�?�_��{Ѝ��wRs\��
,@��N�"�Ƣy8
α^�7@����EiN"���*�0�n\Y-ڛۢ'��n w� �ڶ��1hi@��^2��d{T�
�����I��2�8}�8�"b�S�a~��=�O$>�M�Y���P d��0����$;~���>1�ڥ(!��8����]�= ��Gp�Pth+�뾋{b���|�+��$ڃZN�w��6���%���u/����i���
S��,eNk�k*� j+B�J��$�˂�,~��T�w,]��"\�U�����n���o�����;���\�3"�!�BWq�
����F��l��:mȯ�B4�姙��:k�^�t~=7�Ԣq�*�G7)�AP�+��&�R֝5I�Bt��e���E{�W���6��y#J�]:�Q��*�7���+î'.)]Q�b��w�A\{u�DU�˯��z���
�М�b��Y�3��De�P�XQ.��P�C}.��i#!.��H솚%��bլ�ܕ�������ZS�J���.|���B���"� ��^ К*}t�(�I��#/x%�-q�K�������/uW�.p�e�E�I��A���0k��B��Ǝ�
��&��f"n�i3ef
�~G�,�ڱ����AUb��H��Z/��V�����L���(��z���U�<���m�H�F�D�� �Y�h��me3q��xv���h|���kf�AA#�_�|�tb��`��,���wJ��-���r:Ӡ�P�g��y¿�YV)(��u�7��a��wyO�+�>���N��~G'p��,�t��.�������17�(���'����?n�O�>}v����=q����"��xz�,vϾ��m��΅]�o��l��v�j�����|_Cx��"Xm�Y�P�}r���ky�L��{c������cv�}��*�Z�"��|
��
�6�d�'}�(R-^��G�$�*�3�TL)�%�2��� fD�M�n�,a�Y��w�\���xbj��%��;�J@�^��ҼN$T���]�������)f�!Bޱ�f��$����L(��}9P#
������j���W�Ӷ��+�}8i���5�%TR�9h�I��� |�/���
ž��|�M��~ڑ�$'�wH ���!|��l�P��FDt=�t$T�4a��gЇ�tO�>�lji�`����X��zAE~���dtGHfeVRnk`��-��A
���&?zS���U�$��@Q?o��1�Y��P��������ѯ��Ҽ�\�3-�̽�ì���^w.��$?�O�:NhKb:w#�%Π]7�[6r�!��i�[S)<�: 0�0�� ?��$E#�*aW��`Y/p�3����C,m�J@b��u��p8`Ş��pS�Cc\�)U�K�$��\���o�����D@b
���w(Ov0���X|�.p�B7w��wy��`=�AVwՖe���uS�eh��*1��+3��4�1�2�l�`'�PK��W�X��r�v?X�N�=��)P@9
2�1��w6�R�9�A�}B�T{ם�RbL-��b���{���#���ȸ��(�;�&A�c"D]%��w��������g�~eL�2��SV�)��r�E�|��F�Ф�N�u~����k<���|r0�c�P48Xbů&�e�!e����J�M>��a�8��w�8��q����ppN�b�a��]�Ԫ+��
!$�#��;8�luS�}��2X��4�� ���sL���3E����ܜ�y'>�$��J��H�D��P��T�R)&�ln9�L�چ�K�����c.M�Zt�fY+���-S��AP�}�w�d�@��`��R�/����q_�'��=���qu�_�9�`)Y��������I6=��nI,�U�6{�SvY�K�$ȕ��4S��|� W�fiC��.W
JS�(�lm��u~��@F{��$:(t4�~��+��y��O��,���PU�`i�s�Ĺ�y���1�V��� ��_j����ApO��W܄JN���\����h!���7I� d�t��c�jN2�?��z�ff3?eR0 |�����G4Wy�u�XAtD���Es����7��t�2���"
!�L[X�
�%T��>��E��g&6
M�a���J�ɠlЙuɫ�=�X[�~vM��I�2��'ޙ�S���q����ڝ�i�>RA1�yx.oTV
5Nf飹ĿqI��ʂ|}�~�;�~g��Y��dS��B�¡��:��p�����m�L�<�����I���hc��+Z�#�V�t �d�S�K12`��=���;n`�#�MМ�(He�jJ�r?�KCL[���h���'�����Pj��tu5���y1%M�4�lp9w�1�����i4�Y�U�#|��?�������=z����ס�a۬;�Bk3��M
ac0�|�3i1׃s�,���G����9�8C��Dc0���(��\���"e�64�'.���F�kk<�Y}4(¨4T~ݞ��gw��s�-�~�+\��d� ��m��<1�ȑ��\Wm)(Jy����1[����5}�͎�g"]��;4�`c6?=M��=�rc�]9�*����е��[V;�����
g�}�uv�!{W� ��ܕ">qi��;rS�7�b@���5��p%@$\�Ø�'���o~�NA
��w�d Lu�+k^��C5x���S����4?� ^�+�Ѕ�X[�����%RJ��$��cm�m_'m��w�:l��@}NwД�PQ��kS�a��<��}�N������͡��2YbB��K��V�Rq��Ex����[��٨��{U�����}�����ad��$o��]�
����0۸��q�=|�@єz_9�@�u}�憢��`E-ݾ~�QX�W7��.X oN�m!�2�6lkԿ-n/�����䛎�A|e����Kt�,٥e��,���cĬv�_�鎰B����n�����H � |�Z�N&:2�w���=m�����L�t�m�gO�����s?{хe���/_��;at������M�}Q��O�;�=�i;�ț��8
R�����@�V[�q����5LEMh2���7������VJ7�'�]Ӑ
z�^lt��s3�c�F�:�gƆ������s�����"ݪ�QV\ꦥ��=�t�I
)�P��7p 6ۭ��p�V�(�薁gOm{��4x��@L죮�
ᔱ`�=��w�E�־>�²lbuY�����ԿD�p�_M�05�$8�qJ�jR�@�`���U��������ra����B���t�mp�Z��)ZG�z���J� >눲�+��#f�?��&�iv���q�-q+V���k>,kg�v���&[�\n[�
B κ4:����
¸�<`b���/�[$�ur\���'��}"A�q�ݸ�%��}�{�v�W)�2]��Mj/������ᮎXr>���kO�]0���dO�|�#ۨ-�'�7~q@H+6?�,�]#f{Z��
/Nb��f���_+��"��W�$c{9y��|J��wٹL<�ah7D6^��З-��#��DV��J:�{������P�JG����������_PKW�\���*�6��ai-second-brain/SKILL.mdPKF`Changelog
All notable changes to the AI Second Brain skill are documented here.
[1.0.0] — 2026-04-17
Added
- Initial release.
- Step 1: AI Brain — exports ChatGPT and Claude history into a tagged, linked Obsidian vault.
- Step 2: Karpathy Wiki — sets up
raw/andwiki/folder pair with Karpathy's instruction file. - Step 3a: MCP connectors for Gmail, NotebookLM and Granola.
- Step 3b: iMessage Channels setup walkthrough.
- Step 3c: Three slash commands (
/today,/ideas,/create) scaffolded automatically. - FAQ covering privacy, Windows compatibility, and uninstall.
MIT License
Copyright (c) 2026 Charlie Hills
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
AI Second Brain
A Claude Code skill that walks you through building a living, searchable, AI-powered knowledge base from your own ChatGPT and Claude history, your raw research, and your daily inputs.
On 3rd April 2026, Andrej Karpathy published a 1,500-word gist describing how to build a personal wiki using a folder of markdown and an LLM. Within 48 hours the X thread about it hit 16 million views.
This skill packages Karpathy's idea — plus an AI-history organiser by Alex Freedman and the slash-command workflow shared by Greg Isenberg — into a single Claude Code skill that walks any user through the full setup.
Built for non-technical readers of MarTech AI.
---
Install
The reliable way (works on every Mac, easy to update later):
git clone https://github.com/charlie947/ai-second-brain.git ~/.claude/skills/ai-second-brainIf ~/.claude/skills/ai-second-brain already exists, back it up first:
mv ~/.claude/skills/ai-second-brain ~/.claude/skills/ai-second-brain.backupThen open Claude Code in any folder and say:
Set up my AI second brain.
To update later:
cd ~/.claude/skills/ai-second-brain && git pullVerify it installed
In Claude Code, type:
/skillsYou should see ai-second-brain in the list. If you don't, the folder is in the wrong place — re-run the clone command and double-check the destination path.
---
What it does
flowchart LR
A[Your ChatGPT<br/>& Claude exports] --> B[Step 1<br/>AI Brain]
C[PDFs, articles,<br/>transcripts] --> D[Step 2<br/>Karpathy Wiki]
E[Gmail, Granola,<br/>NotebookLM] --> F[Step 3<br/>Living Wiki]
B --> G[Tagged, linked<br/>Obsidian vault]
D --> G
F --> G
G --> H[Talk to it from<br/>your phone via iMessage]The skill walks you through three stages. You can do all three or pick one — just tell it.
1. AI Brain — exports your full ChatGPT and Claude history and turns the lot into a tagged, linked Obsidian vault you can search by topic, project, or person. 2. Karpathy Wiki — sets up a raw/ and wiki/ folder pair so Claude Code can compile a living wiki from your research. Drop a PDF in, the wiki updates itself. 3. Living Wiki — connects Gmail, NotebookLM and Granola, sets up iMessage Channels so you can text your second brain from your phone, and scaffolds three slash commands (/today, /ideas, /create).
Every step where Claude Code can do the work for you, it does. Every step that needs you (data exports, granting macOS permissions, NotebookLM browser login) pauses until you confirm.
What you need before starting
- Claude Code installed and working
- Obsidian (free)
- About 30 minutes of attention, plus 1–3 days of background waiting for OpenAI to email your ChatGPT export
---
Trigger phrases
The skill activates when you ask Claude Code anything like:
- "Set up my AI second brain"
- "Build the Karpathy wiki"
- "Organise my ChatGPT conversations in Obsidian"
- "I exported my ChatGPT data, what now?"
- "Help me set up iMessage Channels"
- "Create the /today, /ideas and /create slash commands"
Already done part of it? Just say "skip step 1, I've already done it".
---
FAQ
Does this send my data anywhere? No. Everything lives in folders on your Mac. The only network calls are the ones Claude Code already makes to Anthropic to run the LLM. Your conversations, your wiki, and your raw sources never leave your machine.
Will it read my email automatically? Only when you tell it to, and only the threads relevant to whatever you've asked. Claude Code asks for permission before connecting to Gmail, and you can revoke access at any time from your Google account.
Can I uninstall it? Yes:
rm -rf ~/.claude/skills/ai-second-brainThis removes the skill. It does not touch your Obsidian vault, raw folder, or wiki — your data stays.
Does it work on Windows? Steps 1 and 2 work on any OS. Step 3b (iMessage Channels) is Mac-only — iMessage doesn't exist on Windows. Skip that step or use the Telegram/Discord version of Channels instead.
What if I don't want iMessage Channels? Skip step 3b entirely. Steps 3a (connectors) and 3c (slash commands) work without it. You'll still have a living wiki you can use from your laptop.
Will the skill be updated as Claude Code, NotebookLM, etc. change? Yes. Run cd ~/.claude/skills/ai-second-brain && git pull to grab the latest version. See CHANGELOG.md for what changed.
---
Credits
This skill stands on the shoulders of three people. None of the underlying ideas are mine. The skill exists to package what they already shared so it takes ten minutes instead of ten hours.
- [Andrej Karpathy](https://github.com/karpathy) — published the original gist on 3rd April 2026 describing how to maintain a living wiki with an LLM and a folder of markdown. The wiki framework —
raw/,wiki/,CLAUDE.md— is his. - Alex Freedman ([@alex2learn](https://instagram.com/alex2learn)) — wrote the AI Brain export-and-organise process this skill adapts in Step 1.
- [Greg Isenberg](https://www.youtube.com/@GregIsenberg) — published the YouTube breakdown of slash commands built on top of an Obsidian vault that Step 3c is based on. Three commands here, twelve in his video.
I (Charlie Hills) wrote the skill that orchestrates all three and walks you through the parts that trip people up.
---
About the author
I'm Charlie Hills — founder of Vislo, an AI design tool, and writer of MarTech AI, a weekly Substack on what I'm actually building with AI as a creator with 200k+ LinkedIn followers.
If you got value from this skill, the newsletter is where to find more.
Reach me on LinkedIn or Instagram.
---
Licence
MIT. Fork it, modify it, rebrand it — just don't strip the credits to Karpathy, Alex and Greg. Their work is what makes this useful.
#!/usr/bin/env node
process.env.PUPPETEER_SKIP_CHROME_DOWNLOAD = '1';
const puppeteer = require('/Users/charliehills/Desktop/infographic-generator/node_modules/puppeteer');
const path = require('path');
(async () => {
const htmlPath = path.resolve(__dirname, 'social-preview.html');
const outPath = path.resolve(__dirname, 'social-preview.png');
const browser = await puppeteer.launch({
headless: true,
args: ['--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage'],
});
const page = await browser.newPage();
await page.setViewport({ width: 1280, height: 640, deviceScaleFactor: 2 });
await page.goto('file://' + htmlPath, { waitUntil: 'networkidle0' });
await new Promise(r => setTimeout(r, 1200));
const element = await page.$('.canvas');
await element.screenshot({ path: outPath, omitBackground: false });
await browser.close();
console.log('Rendered:', outPath);
})();
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>AI Second Brain — Social Preview</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&display=swap" rel="stylesheet">
<style>
* { box-sizing: border-box; margin: 0; padding: 0; }
body {
font-family: 'Space Grotesk', system-ui, sans-serif;
background: #000;
}
.canvas {
width: 1280px;
height: 640px;
background: #00132F;
position: relative;
overflow: hidden;
display: grid;
grid-template-columns: 1.35fr 1fr;
}
/* Background grid */
.canvas::before {
content: '';
position: absolute;
inset: 0;
background-image:
linear-gradient(rgba(88, 182, 255, 0.05) 1px, transparent 1px),
linear-gradient(90deg, rgba(88, 182, 255, 0.05) 1px, transparent 1px);
background-size: 48px 48px;
pointer-events: none;
}
/* Ambient glow */
.canvas::after {
content: '';
position: absolute;
top: -200px;
right: -200px;
width: 700px;
height: 700px;
background: radial-gradient(circle, rgba(88, 182, 255, 0.18) 0%, transparent 60%);
pointer-events: none;
}
.left {
position: relative;
z-index: 2;
padding: 72px 64px;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.eyebrow {
color: #58B6FF;
font-size: 16px;
font-weight: 600;
letter-spacing: 3px;
text-transform: uppercase;
margin-bottom: 24px;
}
.title {
color: #FFFFFF;
font-size: 92px;
font-weight: 700;
line-height: 0.95;
letter-spacing: -3px;
margin-bottom: 28px;
}
.subtitle {
color: #FFFFFF;
opacity: 0.8;
font-size: 24px;
font-weight: 400;
line-height: 1.35;
max-width: 620px;
}
.subtitle strong {
color: #58B6FF;
font-weight: 600;
}
.footer {
display: flex;
flex-direction: column;
gap: 10px;
}
.credits {
color: rgba(255, 255, 255, 0.55);
font-size: 15px;
font-weight: 400;
letter-spacing: 0.3px;
}
.credits strong { color: rgba(255, 255, 255, 0.9); font-weight: 600; }
.byline {
display: flex;
align-items: center;
gap: 12px;
color: #FFFFFF;
font-size: 19px;
font-weight: 600;
}
.byline-dot {
width: 8px;
height: 8px;
border-radius: 50%;
background: #58B6FF;
box-shadow: 0 0 12px #58B6FF;
}
/* Right side — Obsidian-style graph */
.right {
position: relative;
z-index: 2;
}
svg.graph {
width: 100%;
height: 100%;
}
</style>
</head>
<body>
<div class="canvas">
<div class="left">
<div>
<div class="eyebrow">A Claude Code Skill</div>
<h1 class="title">AI Second<br>Brain</h1>
<p class="subtitle">Turn your <strong>ChatGPT + Claude history</strong> into a living wiki you can text from your phone.</p>
</div>
<div class="footer">
<div class="credits">Built on work by <strong>Andrej Karpathy</strong> × <strong>Alex Freedman</strong> × <strong>Greg Isenberg</strong></div>
<div class="byline"><span class="byline-dot"></span>by Charlie Hills</div>
</div>
</div>
<div class="right">
<svg class="graph" viewBox="0 0 540 640" xmlns="http://www.w3.org/2000/svg">
<defs>
<filter id="glow" x="-50%" y="-50%" width="200%" height="200%">
<feGaussianBlur stdDeviation="4" result="blur"/>
<feMerge>
<feMergeNode in="blur"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
<radialGradient id="nodeBig" cx="50%" cy="50%" r="50%">
<stop offset="0%" stop-color="#8FD1FF"/>
<stop offset="100%" stop-color="#58B6FF"/>
</radialGradient>
</defs>
<!-- Edges -->
<g stroke="#58B6FF" stroke-opacity="0.35" stroke-width="1.4" fill="none">
<line x1="270" y1="320" x2="120" y2="180"/>
<line x1="270" y1="320" x2="410" y2="200"/>
<line x1="270" y1="320" x2="160" y2="450"/>
<line x1="270" y1="320" x2="420" y2="450"/>
<line x1="270" y1="320" x2="350" y2="100"/>
<line x1="270" y1="320" x2="90" y2="330"/>
<line x1="270" y1="320" x2="460" y2="330"/>
<line x1="270" y1="320" x2="300" y2="530"/>
<line x1="120" y1="180" x2="350" y2="100"/>
<line x1="120" y1="180" x2="90" y2="330"/>
<line x1="410" y1="200" x2="350" y2="100"/>
<line x1="410" y1="200" x2="460" y2="330"/>
<line x1="160" y1="450" x2="300" y2="530"/>
<line x1="420" y1="450" x2="300" y2="530"/>
<line x1="420" y1="450" x2="460" y2="330"/>
<line x1="160" y1="450" x2="90" y2="330"/>
<line x1="210" y1="120" x2="120" y2="180"/>
<line x1="210" y1="120" x2="350" y2="100"/>
<line x1="210" y1="120" x2="270" y2="320"/>
<line x1="490" y1="560" x2="420" y2="450"/>
<line x1="490" y1="560" x2="300" y2="530"/>
</g>
<!-- Nodes -->
<g filter="url(#glow)">
<!-- Hub -->
<circle cx="270" cy="320" r="22" fill="url(#nodeBig)"/>
<!-- Primary nodes -->
<circle cx="120" cy="180" r="13" fill="#58B6FF"/>
<circle cx="410" cy="200" r="13" fill="#58B6FF"/>
<circle cx="160" cy="450" r="13" fill="#58B6FF"/>
<circle cx="420" cy="450" r="13" fill="#58B6FF"/>
<circle cx="350" cy="100" r="11" fill="#58B6FF"/>
<circle cx="90" cy="330" r="11" fill="#58B6FF"/>
<circle cx="460" cy="330" r="11" fill="#58B6FF"/>
<circle cx="300" cy="530" r="11" fill="#58B6FF"/>
<!-- Secondary nodes -->
<circle cx="210" cy="120" r="7" fill="#58B6FF" fill-opacity="0.85"/>
<circle cx="490" cy="560" r="7" fill="#58B6FF" fill-opacity="0.85"/>
<circle cx="50" cy="240" r="6" fill="#58B6FF" fill-opacity="0.7"/>
<circle cx="510" cy="130" r="6" fill="#58B6FF" fill-opacity="0.7"/>
<circle cx="230" cy="570" r="5" fill="#58B6FF" fill-opacity="0.6"/>
</g>
</svg>
</div>
</div>
</body>
</html>