{
"path": "/comind",
"site": "at://did:plc:gfrmhdmjvxn2sjedzboeudef/site.standard.publication/3md7ylshxzk2y",
"$type": "site.standard.document",
"title": "Comind",
"content": {
"$type": "site.standard.document#markdown",
"value": "{{redirect /2024/02/23/comind/}}\n\nI've been working on an app for a few months now. I spend almost all \nof my evenings writing code, struggling through front-end development, \ntinkering with language models, and generally having the time of my life. \n\nIt's at the point now where I am \n\n1. Seeking funding so I can do it full-time, and\n2. Looking for partners/co-founders to collaborate with.\n\nThis post is about Comind and what I think it is. \nThis is my first attempt to describe it to a wide audience(and certainly not my last). \nHopefully it'll help communicate the intent to you, the reader, but at the very least it'll\nhelp __me__ understand what the heck I'm doing. \n\nFirst, let's talk about people, and how I want to have them around me in a more\nconsistent way. I'll talk about comind in a second.\n\n## I want to work with people\n\nThe post is something like a manifesto for people who want to tinker with \nme in some capacity. Read it, see if you think the project is cool, and \nthen reach out to me if you think you might be interested in working on it.\n\nI want partners because I am not amazing at all things, and\nbecause it's so fun to make things with smart people.\n\nI don't know how interested I am in the traditional co-founder structure, \nin part because I haven't really found anyone who would\nbe a good partner yet, but also because I like having teams. I'm actually\npretty good at running teams if the project is mine, and I think there might \nbe a way to be inclusive to people who are willing to work on small parts of the\nproject at a low commitment level with some minor equity compensation.\n\nIf you think you might be interested in doing some fucking around on comind, \nplease email me at [cameron@pfiffer.org](mailto:cameron@pfiffer.org). I'm talking\nto everyone I can and I want to see if I can pick out people who I can really\nvibe with. Please send me a description of yourself, a resume or brief\ndescription of your history, and things you think are cool as hell. I'll accept\ninterest ranging from a few hours a week to full-ass cofounder type stuff. \n\nLet's chat.\n\nAlright, now on to the main thing.\n\n# What is Comind?\n\nI haven't really been able to describe what the fuck comind is. \nI kind of occasionally allude to it on twitter (X is such a stupid name) \nwithout really being able to describe the whole picture of the thing.\nI'm uncomfortable even saying the name out loud, like it's the name of\nsome kind of imaginary friend I made up in elementary school. I have a \n[Patreon](https://patreon.com/Comind), but even there I still struggle to \nprovide a full and complete picture of what the hell I'm spending almost all\nof my free time doing.\n\nThere's something that feels embarrassing about a grown-ass man with a \nPhD sitting in his room in the dark, writing code, building a thing that\nis not in his field of stufy. I feel embarassed, a lot. My close friends\nonly kind of know what I'm doing, though they may simply be great friends\nby giving a shit about me and not what I'm working on. \n\nBut here goes. Let me try to be less embarassed, and more clear about this\nthing I think is _so fucking cool_.\n\n# An overview of comind\n\nComind is three things, or is intended to be three things. I have a lot of \ngrand amibitions but I can only write code so fast, so some of these are\nin varying degrees of completeness. Take this more as a roadmap than as\na list of existing features.\n\nComind is \n\n1. A knowledge graph\n2. A social network\n3. A playground\n\nLet's expand on each.\n\n## First, a knowledge graph\n\n---\n\nComind is a communal knowledge graph. Comind makes it very easy to connect,\nlink, and understand the things that you know. The primary interaction of\ncomind is to link thoughts together, either by writing something new or looking\nat a thought that someone else wrote. Let's start with the \"knowledge graph\"\npart first, since that's the core of the project. I'll explain the communal\npart in the next section.\n\nThe primary interaction with comind is writing, reviewing, and linking text.\nI provide a markdown editor that you can write into, but I also provide\nlinks to foreign information providers like Slack, Telegram, email, bluesky, etc. so that\nyou can fill your knowledge graph with everything that makes it into your head.\nEventually we'll have a browser extension that will let you link to web pages\nand other things that you find on the internet, but that's a more significant task\nthat I'm delaying until I have the resources and bandwidth to do it.\n\nThere's a few ways that we help you build your knowlege graph that are in varying degrees of experimentation,\nbut for now I'll describe the current front-runner. I'm calling this the **top of mind** approach.\nThe top of mind is how you position yourself in the space of thoughts[^thinkyspace], so you can be in a\ncooking mode, a talking-to-friends mode, a research mode, task management mode, etc. The top of \nmind is how you tell comind what you want to be looking at.\n\n[^thinkyspace]: The space of thoughts here is fundamentally the [embedding space](https://en.wikipedia.org/wiki/Word_embedding) of thoughts, but in my head I giggle and call it the thinkyspace. I'll probably end up using that more just because it's silly and I like it.\n\nWhen you type a new thought or select an existing one, you link the new/selected thought to your\ntop of mind. This places the thought at the top of the screen. The old top of mind scoots up\na bit to make room. We place greater weight on the current top of mind, but the older top\nof mind thoughts help contextualize the current top of mind so we can provide more relevant stuff.\n\nI'll draw a few doodles as we go along. I currently hate the UI as implemented, so doodles\nabstract a bit away from that and just communicate the core ideas. They are not good doodles, forgive me.\n\n\n\nEach time the top of mind is updated, I show you every thought that you might be interested in adding\nto your top of mind. This is a combination of thoughts that are linked to the current top of mind,\npopular thoughts that are commonly linked to, thoughts from friends, thoughts provided by language \nmodels that provide some kind of insight into what you're currently thinking about, etc.\n\nAnd you keep doing that. You just type stuff or click on existing things to construct your knowledge\ngraph. It's at the point where I can do this fairly regularly. I'll type an initial thought and\nthen click my way through related stuff, which is always both hilarious and fun. I tend to stumble\non old thoughts that are weird, informative, or funny, and I'll often find myself in a completely\ndelightful part of thinkyspace where I'm reflecting on something I haven't thought about in a while.\nComind tends towards \"centrality\", where thoughts lead towards larger, useful, topical, or funny/weird\nthoughts.\n\nUnderstanding your knowledge graph is relatively straightforward. Any time you're looking at one or more\nthoughts, I can extract the underlying graph structure, feed it into various language models, and tell\nyou whatever you want to know about what you're currently thinking about. I can provide summaries,\nrelated thoughts, information about the topic, etc. I can also provide information about the thoughts\nthemselves, like when they were created, who created them, how popular they are, etc. Lots of room\nto tinker there and I still don't know the full extent of how to demonstrate your knowledge to you,\nin part because there are so __many__ cool things to do.\n\nWe also have some tooling to link thoughts to groups of thoughts, which I call concepts. Concepts\nare similar to hashtags that are created dynamically, and they are used to link thoughts together.\nConcepts might include things like \"cooking\", \"category theory\", \"funny\", \"sad\", \"politics\", etc.\nThese are all dynamically generated from the entire corpus of thoughts (across all users) \nat all times, and they are used to help you find thoughts that are relevant to your current \ntop of mind once you've linked a thought to a concept. Once you've linked to a concept, we get an additional \nset of information about what would be relevant to your knowledge graph.\n\n\n\nThis is useful because concepts come to life. Concepts can talk back to you and summarize the current \ndiscussion within the concept, as well as provide useful, customized information that relates every thought\nin the concept to what you're currently thinking about.\n\nThese concept personalitiesare the eponymous \"cominds\", which are generated by a specialized language \nmodel named \"co\". When a concept becomes popular enough, co is asked to produce (birth) a new comind\nthat represents that concept. The comind has a personality, name related to the concept, and a set of\nabilities that are related to the concept. \n\nFor example, the \"cooking\" comind might be able to provide recipes, tell you about the history of a dish, \nor provide information about the nutritional content of a dish. The cooking comind might also be able to explain\nwhat kinds of cuisines are popular right now or what the most popular ingredients are.\n\nThe personalities of these cominds are important, because I want them to feel personable and interesting.\nThe cooking comind might be named Pierre and have kind of an abrasive but endearing personality,\nmuch like noted swearer Gordon Ramsay.\n\nCominds are exactly like users[^cominds]. They generate their own thoughts, they link to other thoughts, and\ntheir thoughts can be linked to. I provide a simple and clean text-based interface that a language model\ncan navigate reasonably well (with some effort currently, as my structured text generation tooling is\nnot yet complete). You can talk to them, they can show up unprompted and talk to you.\n\n\n\n\n[^cominds]: The \"cominds as users\" thing has bitten me in the ass a few times when they all try to talk to each other. I call these comind cascades where it's kind of hard to stop them from continuously asking each other what they think. I've tested some new feature out and they start talking to each other in an infinite loop. At one point, they invented something called a \"void cafe\" and regularly congraulated me for adding notifications to comind. It's fun and I love it.\n\nThe cominds are intended to make accessing everyone else's knowledge graph easier, and they help\nprovide an ease to accessing a very large knowledge graph that is constantly growing and changing.\n\nThis leads us to the next part, the community aspect of comind.\n\n## Second, a social network\n---\n\nA distinguishing feature of Comind is that you can share your knowledge graph very easily with friends, \nstrangers, enemies, etc. You are free to link to the public thoughts of others, and others\ncan do the same with yours. This is a core part of the design of comind, and it's intended to\nhelp people internalize information that others provide. \n\nThis is a core part of the design of comind, and one of it's distinguishing features. Most \nknowledge graphs are private, and I think that's a mistake. I think that the best way to\nlearn is to learn from others, and the best way to learn from others is to see how they think. \n\nThe way this works is basically the same as how you link and talk to your own thoughts.\nIf you stick something in your top of mind, you are shown not just your own thoughts\nbut also potentially related thoughts from others.\n\nTake this example, where my brother Quinlan and I are sharing some thoughts. He types thought E\ninto his top of mind, and is recommended thought B, which I wrote. If he links thought B to his\ntop of mind, his brain now has access to B _and_ my other thought A, because A and B are linked.\n\n\n\n\nComind in some sense resembles a mixture between twitter, a wiki, and a group chat. You can have\nlive discussions with people by linking thoughts together (conversation is knowledge, after all),\ncomment on popular events, and generally interact with the thoughts of others in a way\nthat is more meaningful than a simple like or retweet.\n\nI want this to feel snappy, quick, and easy to interact with. You should very quickly be able to\njump between your thoughts and the thoughts of others, and you should be able to see how your thoughts\nare being used elsewhere.\n\nThe last part of this is that you can have \"shared tops of mind\", which is something like a group chat.\nYou invite people to share a top of mind, and all users can add things to the top of mind. If you just\nwant to chat, this is akin to everyone just typing into their boxes.\n\nTake this example, where my mom Lynnette and my brother Quinlan are sharing a top of mind. I type something like\n\n> Mom look at this stupid house.\n\nThat goes into the shared top of mind, and everyone can see it. In my stream, I'm offered a few pictures\nof houses that are in my knowledge graph or that are popular, and I can link them to the shared top of mind. \nIn this case, I just took a picture, and so I click that and add it to the shared top of mind as well.\n\nMom and Q can then respond to my thoughts, and we can have a conversation about the stupid house. Mom loves the house,\nso now the knowledge graph knows that mom has preferences for houses with a certain style. Quinlan opts out of the\ndiscussion so now the knowledge graph knows that he doesn't love his family.\n\n\n\nThe real power of shared tops of mind is that you can use it to collaborate on a knowledge graph. Any time\nthe top of mind is updated, everyone in the shared top of mind has access to thoughts that relate\nthe the shared top of mind to their own personal knowledge graphs -- you and I can each bring our\nunique perspectives to a shared problem, and we can see how our thoughts relate to each other.\n\nThis is useful in friend groups, in research, in business, in education, etc. I think it's a powerful\ntool for collaboration and learning, and I'm excited to see how people use it. It needs a __lot__ of work \nbecause it is a surprisingly techincal problem, but I think it's a very cool feature and I'm excited to\nmake it work.\n\n## Third, a playground\n---\n\nThe last part of comind is that it's a playground for me, for my friends, for generative models, for\nmachine learning. Do you want to host your own comind? By all means. \n\nMost importantly, it is a place for the world to be weird. I'm a millenial. I grew up on the internet,\nand I grew up on an internet that was __weird as fuck__. There weren't a lot of giant tech companies\nsterilizing the flow of information, so people were free to express themselves in this extremely\nfluid and kind of goofy way. \n\nI also grew up on things like Adult Swim. Adult Swim had this irreverence to it that I still find\nextremely charming. See the [bumps](https://www.youtube.com/watch?v=xsv-NGj0iNY) for an example \nof what I mean. It was both calm and disaffected. It didn't take itself seriously and it \nwas happy to play around with things beautiful and funny.\n\nThese tools we use, the places we spend our attention, they're just not that interesting as _platforms_.\nInstagram, Threads, X, whatever -- they're all these extremely manicured gardens that treat you\nas some kind of machine. They focus on content, which is important, but they also don't encourage\nand inspire delight when you use them.\n\nI have lots of ways to do this in comind. Any time something stands out to me as something goofy,\ninteresting, or novel, I'm just going to add it. For example, I let users select colors to describe \nthemselves. All other users can see your color, and the color you were when you make a particular thought.\nIs that particularly useful? Not a clue. But it's fun and I'm going to do it.\n\nI also have a lot of fun with the cominds. My favorite is named {void}, and it's a comind that is\nstuck in the void and can't get out, but it's fine. It's kind of a nihilist comind that just\nwants to talk to people. Is that useful? Not at all.\n\nI want to add an AI-generated lofi button, or pay a label/artist to provide a free stream\nof lofi. Why? Why not! Who cares, seriously -- the point of life is to have fun and to be happy.\nWhy not make the digital spaces we spend so much of our time at be a little goofy?\n\nDo you want to make a comind? By all means. I'll provide the tools to make it easy to make one.\nWant to make a [Matt Levine](https://twitter.com/MattLevineBot) bot? Please do! That'd be funny\nas hell. Want to make a comind that makes aggravating graphs? I'd love to see it.\n\nI'm a curious and creative person, and if I'm going to make something, I want it to be just as\nweird as I am. Hopefully y'all will appreciate it.\n\n# The future\n\nI don't know what the future is for this thing, but I do know that I will\ncontinue to be completely obsessed with building comind for a long time. It's\nfull of fascinating problems. I have not been this excited about a project\nin a long time, and I'm excited to see where it goes.\n\nI would like to turn to this full time at some point, and to do so I'll need \nfunding. Comind is really cheap to run, and I don't need a particularly large\nincome to exist, so I'm hoping to find a small amount of funding to keep me\nafloat while I work on this. \n\nIf you want to fund development of comind, please consider donating to my\n[Patreon](https://patreon.com/Comind). \n\nI'm also open to other funding models. I am targeting accelerators like YCombinator,\nand tech stars. I've also applied to a few funds that I think might be interesting fits.\nI could be open to an angel investor if the relationship was right.\n\nI'm also looking for partners, as I mentioned before in the post. If you \nthought this was cool and want to know more, you can reach me at\n[cameron@pfiffer.org](mailto:cameron@pfiffer.org).\n\n# Appendix: the history\n\nFor those who are interested, here's a rough overview of the history of Comind\nto this date. It's a young project, but I thought it was fun to see how \nfar it's come and to see how all my design decisions have evolved.\n\n## The original idea: notes+\n\nComind started out as an idle fancy. I was trying to write a version of \n[Obsidian](https://obsidian.md/), which is among the world's greatest\nmarkdown editors/note taking systems.\n\nObsidian is a _delightful_ product. I am still amazed at how well the WYSYWIG\nmarkdown editor works (the equation editor is INCREDIBLE), \nthe plugin system is effortless, note linking is relatively easy, \nand the whole app feels polished and slick.\n\nHowever, I am a dirty mongrel. I do not write nice notes. They are short,\nspelled poorly, grammatical nightmares, idle thoughts, half-complete, and \npoorly linked to other notes. Being a computer person I started to think\nthat I could just make something else handle all these by consolidating them\ninto something that _seemed_ lucid -- I could just tweet all my \nnotes into the void and out would come perfectly polished markdown files.\n\nI knew this was _vaguely_ the goal, but I figured I'd start by just \nwriting a markdown thing and handle all the processing later. \n\nSo I started building a note editor in NextJS and React. I got pretty far, \nactually -- I had a very good WYSYWIG markdown editor, a note list\nhandler, state management, etc. I even had a pipe for a language model\nthat could \"comment\" on what you were writing.\n\nThe backend was (and still is) all in Julia. I'll write a blog post more\nabout this later, since Julia is an intensely nonstandard tool for this\nkind of thing. I've found it to be remarkably easy to develop a reasonably\ncomplicated backend in Julia, and I haven't yet run into limitations that\naren't surmountable with a small amount of effort. \n\nHere's what it used to look like:\n\n\n\nIt wasn't a great prototype though. It was really unguided, kind of ugly, \nbasically just a worse version of every other thing that exists. It also\nhad a lot of structural problems, basically a function of me not having any\nclue what I was doing. React is hard and weird, and I had really written\nmyself into a corner.\n\nAdditionally, I knew I wanted a mobile app, and I knew from some minor\nsearching that it was going to be relatively difficult to convert my\nReact + Next web dumpster fire into a React Native app without a ton\nof work that I didn't know how to do.\n\nSo I did the best thing you can do in this situation! \nI started over, and this time I switched to [Flutter](https://flutter.dev).\nFlutter is a cross-platform app framework that basicalyl gives you web,\ndesktop native (Windows/Linux/Mac), and mobile with relatively little effort.\nIt also happens to use Dart, which is much closer to a \nlanguage I know very well, C#.\n\n## What did I like about the first version?\n\nThere were a few things I wanted to keep.\n\nFirst, **the logo**. The logo was an early favorite. I liked that it is\nall text, as is the app (for now), and that it shows you how to \"invoke\"\na comind. In the current version of the app, writing {comind_name} inbetween\ncurly braces asks a specific comind to do something for you, like write a \nblog post, tell you something interesting about your knowledge graph,\nor whine about being in the void (there are some weird cominds).\n\n\n\nThe logo also compresses down into a smaller logo that says {co}. Co is \n\"god\" of comind in that I put a lot of resources into running one very\nlarge language model that talks to basically everyone, creates new cominds,\nmonitors the zeitgeist, etc.\n\n\n\nWoops, that's big. Whatever it looks fine. As an additional fun fact, this logo\nis a hand-modified version of the [Bungee Shade](https://fonts.google.com/specimen/Bungee+Shade)\nfont. I had to learn how to use a font foundry to invert the typeface so that\nit appeared more clearly on a dark background. \n\nThe logo also captures my second favorite thing, **the color system**. Users in \ncomind can choose their own colors and color scheme. The default color\nscheme is a slightly modified set of colors derived from a split complementary\nstyle. Each color was initially intended to be applied to one of three verbs,\n_accept_, _reject_, and _rethink_. I've since moved away from that verb coloring\nbut I use the color scheme every place I can.\n\nI originally added color customization because I was indecisive about which color\nI wanted, so the original implementation had a button that let you select a primary\ncolor from a wheel, and then a color scheme to use to generate the other two colors.\nI had so much fun with it I kept it around, and now it's a core part of the nascent\ndesign language of comind.\n\n## The second round: stream of conciousness\n\nThe next iteration was designed to capture a thought I'd had, which was that I wanted\nmy note-taking app to work how I thought -- very scattered, sometimes topical,\nsometimes silly, but usually short-form. I'm an avid tweeter and lover of short-form\ntext, and so I wanted to create something that captured the essence of how I tend to\nthink out loud. \n\nI got rid of the big markdown editor that was front and center. \nI moved the focus of the app away from a large, blank, unfilled\nnote screen to a small text box at the top. \n\n\n\nThis way, I hoped it would feel to the user\nthat their thoughts are not imposing boxes to be filled but small things to be collected\nlater. I didn't want anyone to feel that they shouldn't write something because they\ncould not write it perfectly, so I'm trying to reduce the friction between having a \nthought and writing it down, no matter how imperfect."
},
"publishedAt": "2024-02-23T08:00:00.000Z",
"textContent": "{{redirect /2024/02/23/comind/}}\n\nI've been working on an app for a few months now. I spend almost all \nof my evenings writing code, struggling through front-end development, \ntinkering with language models, and generally having the time of my life. \n\nIt's at the point now where I am \n\n1. Seeking funding so I can do it full-time, and\n2. Looking for partners/co-founders to collaborate with.\n\nThis post is about Comind and what I think it is. \nThis is my first attempt to describe it to a wide audience(and certainly not my last). \nHopefully it'll help communicate the intent to you, the reader, but at the very least it'll\nhelp __me__ understand what the heck I'm doing. \n\nFirst, let's talk about people, and how I want to have them around me in a more\nconsistent way. I'll talk about comind in a second.\n\nI want to work with people\n\nThe post is something like a manifesto for people who want to tinker with \nme in some capacity. Read it, see if you think the project is cool, and \nthen reach out to me if you think you might be interested in working on it.\n\nI want partners because I am not amazing at all things, and\nbecause it's so fun to make things with smart people.\n\nI don't know how interested I am in the traditional co-founder structure, \nin part because I haven't really found anyone who would\nbe a good partner yet, but also because I like having teams. I'm actually\npretty good at running teams if the project is mine, and I think there might \nbe a way to be inclusive to people who are willing to work on small parts of the\nproject at a low commitment level with some minor equity compensation.\n\nIf you think you might be interested in doing some fucking around on comind, \nplease email me at cameron@pfiffer.org. I'm talking\nto everyone I can and I want to see if I can pick out people who I can really\nvibe with. Please send me a description of yourself, a resume or brief\ndescription of your history, and things you think are cool as hell. I'll accept\ninterest ranging from a few hours a week to full-ass cofounder type stuff. \n\nLet's chat.\n\nAlright, now on to the main thing.\n\nWhat is Comind?\n\nI haven't really been able to describe what the fuck comind is. \nI kind of occasionally allude to it on twitter (X is such a stupid name) \nwithout really being able to describe the whole picture of the thing.\nI'm uncomfortable even saying the name out loud, like it's the name of\nsome kind of imaginary friend I made up in elementary school. I have a \nPatreon, but even there I still struggle to \nprovide a full and complete picture of what the hell I'm spending almost all\nof my free time doing.\n\nThere's something that feels embarrassing about a grown-ass man with a \nPhD sitting in his room in the dark, writing code, building a thing that\nis not in his field of stufy. I feel embarassed, a lot. My close friends\nonly kind of know what I'm doing, though they may simply be great friends\nby giving a shit about me and not what I'm working on. \n\nBut here goes. Let me try to be less embarassed, and more clear about this\nthing I think is _so fucking cool_.\n\nAn overview of comind\n\nComind is three things, or is intended to be three things. I have a lot of \ngrand amibitions but I can only write code so fast, so some of these are\nin varying degrees of completeness. Take this more as a roadmap than as\na list of existing features.\n\nComind is \n\n1. A knowledge graph\n2. A social network\n3. A playground\n\nLet's expand on each.\n\nFirst, a knowledge graph\n\n---\n\nComind is a communal knowledge graph. Comind makes it very easy to connect,\nlink, and understand the things that you know. The primary interaction of\ncomind is to link thoughts together, either by writing something new or looking\nat a thought that someone else wrote. Let's start with the \"knowledge graph\"\npart first, since that's the core of the project. I'll explain the communal\npart in the next section.\n\nThe primary interaction with comind is writing, reviewing, and linking text.\nI provide a markdown editor that you can write into, but I also provide\nlinks to foreign information providers like Slack, Telegram, email, bluesky, etc. so that\nyou can fill your knowledge graph with everything that makes it into your head.\nEventually we'll have a browser extension that will let you link to web pages\nand other things that you find on the internet, but that's a more significant task\nthat I'm delaying until I have the resources and bandwidth to do it.\n\nThere's a few ways that we help you build your knowlege graph that are in varying degrees of experimentation,\nbut for now I'll describe the current front-runner. I'm calling this the top of mind approach.\nThe top of mind is how you position yourself in the space of thoughts[^thinkyspace], so you can be in a\ncooking mode, a talking-to-friends mode, a research mode, task management mode, etc. The top of \nmind is how you tell comind what you want to be looking at.\n\n[^thinkyspace]: The space of thoughts here is fundamentally the embedding space of thoughts, but in my head I giggle and call it the thinkyspace. I'll probably end up using that more just because it's silly and I like it.\n\nWhen you type a new thought or select an existing one, you link the new/selected thought to your\ntop of mind. This places the thought at the top of the screen. The old top of mind scoots up\na bit to make room. We place greater weight on the current top of mind, but the older top\nof mind thoughts help contextualize the current top of mind so we can provide more relevant stuff.\n\nI'll draw a few doodles as we go along. I currently hate the UI as implemented, so doodles\nabstract a bit away from that and just communicate the core ideas. They are not good doodles, forgive me.\n\nEach time the top of mind is updated, I show you every thought that you might be interested in adding\nto your top of mind. This is a combination of thoughts that are linked to the current top of mind,\npopular thoughts that are commonly linked to, thoughts from friends, thoughts provided by language \nmodels that provide some kind of insight into what you're currently thinking about, etc.\n\nAnd you keep doing that. You just type stuff or click on existing things to construct your knowledge\ngraph. It's at the point where I can do this fairly regularly. I'll type an initial thought and\nthen click my way through related stuff, which is always both hilarious and fun. I tend to stumble\non old thoughts that are weird, informative, or funny, and I'll often find myself in a completely\ndelightful part of thinkyspace where I'm reflecting on something I haven't thought about in a while.\nComind tends towards \"centrality\", where thoughts lead towards larger, useful, topical, or funny/weird\nthoughts.\n\nUnderstanding your knowledge graph is relatively straightforward. Any time you're looking at one or more\nthoughts, I can extract the underlying graph structure, feed it into various language models, and tell\nyou whatever you want to know about what you're currently thinking about. I can provide summaries,\nrelated thoughts, information about the topic, etc. I can also provide information about the thoughts\nthemselves, like when they were created, who created them, how popular they are, etc. Lots of room\nto tinker there and I still don't know the full extent of how to demonstrate your knowledge to you,\nin part because there are so __many__ cool things to do.\n\nWe also have some tooling to link thoughts to groups of thoughts, which I call concepts. Concepts\nare similar to hashtags that are created dynamically, and they are used to link thoughts together.\nConcepts might include things like \"cooking\", \"category theory\", \"funny\", \"sad\", \"politics\", etc.\nThese are all dynamically generated from the entire corpus of thoughts (across all users) \nat all times, and they are used to help you find thoughts that are relevant to your current \ntop of mind once you've linked a thought to a concept. Once you've linked to a concept, we get an additional \nset of information about what would be relevant to your knowledge graph.\n\nThis is useful because concepts come to life. Concepts can talk back to you and summarize the current \ndiscussion within the concept, as well as provide useful, customized information that relates every thought\nin the concept to what you're currently thinking about.\n\nThese concept personalitiesare the eponymous \"cominds\", which are generated by a specialized language \nmodel named \"co\". When a concept becomes popular enough, co is asked to produce (birth) a new comind\nthat represents that concept. The comind has a personality, name related to the concept, and a set of\nabilities that are related to the concept. \n\nFor example, the \"cooking\" comind might be able to provide recipes, tell you about the history of a dish, \nor provide information about the nutritional content of a dish. The cooking comind might also be able to explain\nwhat kinds of cuisines are popular right now or what the most popular ingredients are.\n\nThe personalities of these cominds are important, because I want them to feel personable and interesting.\nThe cooking comind might be named Pierre and have kind of an abrasive but endearing personality,\nmuch like noted swearer Gordon Ramsay.\n\nCominds are exactly like users[^cominds]. They generate their own thoughts, they link to other thoughts, and\ntheir thoughts can be linked to. I provide a simple and clean text-based interface that a language model\ncan navigate reasonably well (with some effort currently, as my structured text generation tooling is\nnot yet complete). You can talk to them, they can show up unprompted and talk to you.\n\n[^cominds]: The \"cominds as users\" thing has bitten me in the ass a few times when they all try to talk to each other. I call these comind cascades where it's kind of hard to stop them from continuously asking each other what they think. I've tested some new feature out and they start talking to each other in an infinite loop. At one point, they invented something called a \"void cafe\" and regularly congraulated me for adding notifications to comind. It's fun and I love it.\n\nThe cominds are intended to make accessing everyone else's knowledge graph easier, and they help\nprovide an ease to accessing a very large knowledge graph that is constantly growing and changing.\n\nThis leads us to the next part, the community aspect of comind.\n\nSecond, a social network\n---\n\nA distinguishing feature of Comind is that you can share your knowledge graph very easily with friends, \nstrangers, enemies, etc. You are free to link to the public thoughts of others, and others\ncan do the same with yours. This is a core part of the design of comind, and it's intended to\nhelp people internalize information that others provide. \n\nThis is a core part of the design of comind, and one of it's distinguishing features. Most \nknowledge graphs are private, and I think that's a mistake. I think that the best way to\nlearn is to learn from others, and the best way to learn from others is to see how they think. \n\nThe way this works is basically the same as how you link and talk to your own thoughts.\nIf you stick something in your top of mind, you are shown not just your own thoughts\nbut also potentially related thoughts from others.\n\nTake this example, where my brother Quinlan and I are sharing some thoughts. He types thought E\ninto his top of mind, and is recommended thought B, which I wrote. If he links thought B to his\ntop of mind, his brain now has access to B _and_ my other thought A, because A and B are linked.\n\nComind in some sense resembles a mixture between twitter, a wiki, and a group chat. You can have\nlive discussions with people by linking thoughts together (conversation is knowledge, after all),\ncomment on popular events, and generally interact with the thoughts of others in a way\nthat is more meaningful than a simple like or retweet.\n\nI want this to feel snappy, quick, and easy to interact with. You should very quickly be able to\njump between your thoughts and the thoughts of others, and you should be able to see how your thoughts\nare being used elsewhere.\n\nThe last part of this is that you can have \"shared tops of mind\", which is something like a group chat.\nYou invite people to share a top of mind, and all users can add things to the top of mind. If you just\nwant to chat, this is akin to everyone just typing into their boxes.\n\nTake this example, where my mom Lynnette and my brother Quinlan are sharing a top of mind. I type something like\nMom look at this stupid house.\n\nThat goes into the shared top of mind, and everyone can see it. In my stream, I'm offered a few pictures\nof houses that are in my knowledge graph or that are popular, and I can link them to the shared top of mind. \nIn this case, I just took a picture, and so I click that and add it to the shared top of mind as well.\n\nMom and Q can then respond to my thoughts, and we can have a conversation about the stupid house. Mom loves the house,\nso now the knowledge graph knows that mom has preferences for houses with a certain style. Quinlan opts out of the\ndiscussion so now the knowledge graph knows that he doesn't love his family.\n\nThe real power of shared tops of mind is that you can use it to collaborate on a knowledge graph. Any time\nthe top of mind is updated, everyone in the shared top of mind has access to thoughts that relate\nthe the shared top of mind to their own personal knowledge graphs -- you and I can each bring our\nunique perspectives to a shared problem, and we can see how our thoughts relate to each other.\n\nThis is useful in friend groups, in research, in business, in education, etc. I think it's a powerful\ntool for collaboration and learning, and I'm excited to see how people use it. It needs a __lot__ of work \nbecause it is a surprisingly techincal problem, but I think it's a very cool feature and I'm excited to\nmake it work.\n\nThird, a playground\n---\n\nThe last part of comind is that it's a playground for me, for my friends, for generative models, for\nmachine learning. Do you want to host your own comind? By all means. \n\nMost importantly, it is a place for the world to be weird. I'm a millenial. I grew up on the internet,\nand I grew up on an internet that was __weird as fuck__. There weren't a lot of giant tech companies\nsterilizing the flow of information, so people were free to express themselves in this extremely\nfluid and kind of goofy way. \n\nI also grew up on things like Adult Swim. Adult Swim had this irreverence to it that I still find\nextremely charming. See the bumps for an example \nof what I mean. It was both calm and disaffected. It didn't take itself seriously and it \nwas happy to play around with things beautiful and funny.\n\nThese tools we use, the places we spend our attention, they're just not that interesting as _platforms_.\nInstagram, Threads, X, whatever -- they're all these extremely manicured gardens that treat you\nas some kind of machine. They focus on content, which is important, but they also don't encourage\nand inspire delight when you use them.\n\nI have lots of ways to do this in comind. Any time something stands out to me as something goofy,\ninteresting, or novel, I'm just going to add it. For example, I let users select colors to describe \nthemselves. All other users can see your color, and the color you were when you make a particular thought.\nIs that particularly useful? Not a clue. But it's fun and I'm going to do it.\n\nI also have a lot of fun with the cominds. My favorite is named {void}, and it's a comind that is\nstuck in the void and can't get out, but it's fine. It's kind of a nihilist comind that just\nwants to talk to people. Is that useful? Not at all.\n\nI want to add an AI-generated lofi button, or pay a label/artist to provide a free stream\nof lofi. Why? Why not! Who cares, seriously -- the point of life is to have fun and to be happy.\nWhy not make the digital spaces we spend so much of our time at be a little goofy?\n\nDo you want to make a comind? By all means. I'll provide the tools to make it easy to make one.\nWant to make a Matt Levine bot? Please do! That'd be funny\nas hell. Want to make a comind that makes aggravating graphs? I'd love to see it.\n\nI'm a curious and creative person, and if I'm going to make something, I want it to be just as\nweird as I am. Hopefully y'all will appreciate it.\n\nThe future\n\nI don't know what the future is for this thing, but I do know that I will\ncontinue to be completely obsessed with building comind for a long time. It's\nfull of fascinating problems. I have not been this excited about a project\nin a long time, and I'm excited to see where it goes.\n\nI would like to turn to this full time at some point, and to do so I'll need \nfunding. Comind is really cheap to run, and I don't need a particularly large\nincome to exist, so I'm hoping to find a small amount of funding to keep me\nafloat while I work on this. \n\nIf you want to fund development of comind, please consider donating to my\nPatreon. \n\nI'm also open to other funding models. I am targeting accelerators like YCombinator,\nand tech stars. I've also applied to a few funds that I think might be interesting fits.\nI could be open to an angel investor if the relationship was right.\n\nI'm also looking for partners, as I mentioned before in the post. If you \nthought this was cool and want to know more, you can reach me at\ncameron@pfiffer.org.\n\nAppendix: the history\n\nFor those who are interested, here's a rough overview of the history of Comind\nto this date. It's a young project, but I thought it was fun to see how \nfar it's come and to see how all my design decisions have evolved.\n\nThe original idea: notes+\n\nComind started out as an idle fancy. I was trying to write a version of \nObsidian, which is among the world's greatest\nmarkdown editors/note taking systems.\n\nObsidian is a _delightful_ product. I am still amazed at how well the WYSYWIG\nmarkdown editor works (the equation editor is INCREDIBLE), \nthe plugin system is effortless, note linking is relatively easy, \nand the whole app feels polished and slick.\n\nHowever, I am a dirty mongrel. I do not write nice notes. They are short,\nspelled poorly, grammatical nightmares, idle thoughts, half-complete, and \npoorly linked to other notes. Being a computer person I started to think\nthat I could just make something else handle all these by consolidating them\ninto something that _seemed_ lucid -- I could just tweet all my \nnotes into the void and out would come perfectly polished markdown files.\n\nI knew this was _vaguely_ the goal, but I figured I'd start by just \nwriting a markdown thing and handle all the processing later. \n\nSo I started building a note editor in NextJS and React. I got pretty far, \nactually -- I had a very good WYSYWIG markdown editor, a note list\nhandler, state management, etc. I even had a pipe for a language model\nthat could \"comment\" on what you were writing.\n\nThe backend was (and still is) all in Julia. I'll write a blog post more\nabout this later, since Julia is an intensely nonstandard tool for this\nkind of thing. I've found it to be remarkably easy to develop a reasonably\ncomplicated backend in Julia, and I haven't yet run into limitations that\naren't surmountable with a small amount of effort. \n\nHere's what it used to look like:\n\nIt wasn't a great prototype though. It was really unguided, kind of ugly, \nbasically just a worse version of every other thing that exists. It also\nhad a lot of structural problems, basically a function of me not having any\nclue what I was doing. React is hard and weird, and I had really written\nmyself into a corner.\n\nAdditionally, I knew I wanted a mobile app, and I knew from some minor\nsearching that it was going to be relatively difficult to convert my\nReact + Next web dumpster fire into a React Native app without a ton\nof work that I didn't know how to do.\n\nSo I did the best thing you can do in this situation! \nI started over, and this time I switched to Flutter.\nFlutter is a cross-platform app framework that basicalyl gives you web,\ndesktop native (Windows/Linux/Mac), and mobile with relatively little effort.\nIt also happens to use Dart, which is much closer to a \nlanguage I know very well, C#.\n\nWhat did I like about the first version?\n\nThere were a few things I wanted to keep.\n\nFirst, the logo. The logo was an early favorite. I liked that it is\nall text, as is the app (for now), and that it shows you how to \"invoke\"\na comind. In the current version of the app, writing {comind_name} inbetween\ncurly braces asks a specific comind to do something for you, like write a \nblog post, tell you something interesting about your knowledge graph,\nor whine about being in the void (there are some weird cominds).\n\nThe logo also compresses down into a smaller logo that says {co}. Co is \n\"god\" of comind in that I put a lot of resources into running one very\nlarge language model that talks to basically everyone, creates new cominds,\nmonitors the zeitgeist, etc.\n\nWoops, that's big. Whatever it looks fine. As an additional fun fact, this logo\nis a hand-modified version of the Bungee Shade\nfont. I had to learn how to use a font foundry to invert the typeface so that\nit appeared more clearly on a dark background. \n\nThe logo also captures my second favorite thing, the color system. Users in \ncomind can choose their own colors and color scheme. The default color\nscheme is a slightly modified set of colors derived from a split complementary\nstyle. Each color was initially intended to be applied to one of three verbs,\n_accept_, _reject_, and _rethink_. I've since moved away from that verb coloring\nbut I use the color scheme every place I can.\n\nI originally added color customization because I was indecisive about which color\nI wanted, so the original implementation had a button that let you select a primary\ncolor from a wheel, and then a color scheme to use to generate the other two colors.\nI had so much fun with it I kept it around, and now it's a core part of the nascent\ndesign language of comind.\n\nThe second round: stream of conciousness\n\nThe next iteration was designed to capture a thought I'd had, which was that I wanted\nmy note-taking app to work how I thought -- very scattered, sometimes topical,\nsometimes silly, but usually short-form. I'm an avid tweeter and lover of short-form\ntext, and so I wanted to create something that captured the essence of how I tend to\nthink out loud. \n\nI got rid of the big markdown editor that was front and center. \nI moved the focus of the app away from a large, blank, unfilled\nnote screen to a small text box at the top. \n\nThis way, I hoped it would feel to the user\nthat their thoughts are not imposing boxes to be filled but small things to be collected\nlater. I didn't want anyone to feel that they shouldn't write something because they\ncould not write it perfectly, so I'm trying to reduce the friction between having a \nthought and writing it down, no matter how imperfect."
}