# Nodes and references # Nodes and references Nodes are the fundamental building blocks of Tana, each representing a piece of information that exists in the hierarchy of the outline structure. A node is atomic in format, making it infinitely malleable and rearrangeable. Nodes can exist in many places at once, as References. Everything in Tana is a type of node, which is part of the design philosophy that makes Tana so powerful. > Last updated: October 28, 2024 ## [Overview](#overview) **The first thing you'll encounter in Tana is the _node_.** ******Nodes look like bullets, and are the basic building blocks of Tana:****** They are designed to be light, rearrangeable packets of information. Use it to store a piece of information: A note, an idea, a paragraph. ****The atomicity of nodes is key for unlocking the power of Tana:**** Nodes are the indivisible parts of a _living_ information system. Living, because a node can grow and change over time. The simplicity of the node allows it to be used as a plain bullet for taking notes, all the way to powering sophisticated daily dashboards of dynamic information driven by [Commands](/docs/commands) and enhanced by [AI](/docs/ai-for-builders). **A node is an object that can be _reused_ anywhere in Tana**: Imagine if every time you visited your friends, they would forget your name and all the memories you've had together in the past? It's not just very annoying, but this is what's happening in documents and folders everywhere: you as a person is mentioned by name, but none of these mentions connect to a single entity that represents _you_, so the info gets stale (unless you're one of those who, on your birthday, is "always" turning 25). In Tana, every time you mention a quote in different contexts, you can connect it to the _actual_ quote in the book it came from. Let's say the quote had a mistake - changing the quote in one place changes it everywhere it has been mentioned. These mirror versions of nodes in Tana are called _References_. **References ensure that important information stays relevant and updated:** In Tana, if you have entered the information once, it is easy to pull it into different contexts again and again just where you need it. In meeting notes, create tasks as they arise in conversation and use [Supertags](/docs/supertags) to make them magically appear on someone's task board an instant later. This powerful connectivity enables you to update information everywhere, on the fly, in one go. No more mission-critical information getting outdated, going stale and being forgotten. ## [Basics](#basics) - **In Tana, everything is a node:** The fields, the views, the commands, the settings, layouts, workspaces, the daily page... everything. The difference between these node types is the kind of information Tana stores in them. For more info, see [Node types](/docs/node-types). - **Every node is unique:** Nodes are not just bullets, they are sophisticated containers for information. Every node in Tana is given a unique ID upon creation. You can see the ID of the node in the URL bar when you copy a link of it. This means that even though two nodes may _look_ the same and spell out the exact same thing, they are considered different if they have different IDs. There's also a dozen other pieces of metadata collected per node in Tana. - **Every node has an owner, a single source of _truth_:** All nodes have a permanent address within Tana's outline hierarchy. This means that a node will always have a parent: a node that is one level higher than them in the hierarchy, essentially their _owner_ (with some exceptions). Why nodes only have one _owner_ each is explained in the next paragraph: - **Mirror copies of nodes are References:** In Tana, you can have _mirror copies_ of nodes. These copies _reference_ the original node, hence their name Reference, and are one and the same for all intents and purposes. Editing one reference edits the original and thus every other reference of this node in Tana. There are some differences to keep in mind. For one, they are not _owned_ by their parent: Parents of these mirrored nodes are just _parents_. Also, when you delete references, you're not deleting the original node, the single source of truth. - **Nodes do not accept line breaks:** To maximize the reusability of nodes means upholding strong design principles that keep their atomicity and simplicity intact. Therefore, Tana does not accept soft line breaks within a node, as it would make the node less uniform and universal. ## [Documentation](#documentation) ### [About nodes](#about-nodes) #### [NodeID](#node-id) Every node is given a unique nodeID - The easiest way to find it is to use the command `get html link to node` and paste it somewhere. This yields a text that looks like this, where the link opens Tana at the specified node given you have access to it: - "Tana node aXvnZWOpXAsU: Every node is given a unique nodeID" - You can use this code to find the node it refers to. Paste it into the global search bar and the node with that ID should show up. Note: You have to have access to the workspace that the node resides in, or it won't work. - A node cannot be referenced more than once as a child. This is because we don't allow the same nodeID to appear twice in the same list. #### [Node properties](#node-properties) Every node carries the following properties SYSTEM FIELD NAME SYSTEM FIELD DESCRIPTION EXPRESSION (title/prompt) Node name The written contents of the node ${name} Node description The description of a node. Add a description in the node config or by hitting Ctrl+i (Mac) or Alt+i (PC) ${sys:description} Created time The time the node was created ${sys:createdAt} Last edited time The time of the last edit ${sys:lastEditedAt} Last edited by Who the node has been edited by ${sys:lastEditedBy} Edited by All users who have edited the node ${sys:editedBy} Owner node The owner of the node. A node can have many parents, but only one owner. ${sys:owner} Tags Supertags applied to the node Only works in Prompts/Commands: ${sys:tags} Workspace The workspace this node belongs to Number of references Number of times the node is referenced across all available workspaces (calculated) Date from calendar node Date based on ancestor calendar node (if any) ${sys:dateFromCalendarNode} \*used to be "dateFromDayNode" Done Based on node's checkbox state "Yes" Done time What time a checkbox was checked by a user. Is not triggered by done-state mapping. ${sys:doneTime} Path Where the node lives in Tana ID The ID of the node. Only works in Prompts/Commands: ${sys:nodeId} (Content) The indented content of a node: its child nodes and references with their context expanded. Only works in Prompts/Commands: ${sys:content} (Context) The whole node: its name, fields, field values, child nodes and references. Only works in Prompts/Commands: ${sys:context} #### [Nodes vs. references](#nodes-vs-references) - **What is a node:** A node is a container for information. - **What is a reference:** A reference represents a mirror copy of a node. - **Node/reference relationship:** Every reference has a direct connection to their original node. You can't have a reference without an original node that it refers to. If the original node is trashed, references won't be trashed but appear with a trashcan which you can click to bring out of the trash. - **The technical difference between nodes and references:** They are carbon copies because they use the same ID to draw from the same data. The only difference is that one of the parents of the references matches the value in the Owner field, turning that reference into the "original" node. - **Changing a node's ownership:** - **Within the same workspace:** you can change a node's ownership by swapping places between the original node and any of its references. On a reference, use the command `Bring referenced node here` and it'll change the owner to its parent, making this the original node. - **Between workspaces:** you have to use the command `Move to`, or cut-paste a node between workspaces. ### [Creating and editing nodes](#creating-and-editing-nodes) #### [Create and edit nodes](#create-and-edit-nodes) - Like any text document, click on the page and start writing. - Hit Enter to make a new node - Nodes are designed to contain a string of text, [with no line breaks](/faq/why-are-line-breaks-not-supported-in-tana). - Nodes can receive most images/audio/video formats from copy-paste or drag-drop. PDFs too. See [Storing files on nodes](#storing-files-on-nodes) #### [Formatting text in a node](#formatting-text-in-a-node) Here are all the formatting options that can be applied to text: - Bold Cmd/Ctrl+B - Italics Cmd/Ctrl+I - Underline Cmd/Ctrl+U - Strikethrough - Code \` (back tick) - Highlight Ctrl+H Also see [Text selection toolbar](#text-selection-toolbar) #### [Add a checkbox to a node](#add-a-checkbox-to-a-node) Keeping track of tasks in the form of checkboxes are a fundamental part of a node. It is baked into the metadata of every node through the _Done_ and _Done time_ system fields. There are some very simple and powerful things you can do with checkboxes in Tana to track your tasks: - **Any plain node can be a checkbox:** Cycle through each checkbox state by hitting Cmd/Ctrl+Enter. - **Checkboxes have three "done states"**: _no checkbox_, _not done_, and _done_. - **You can find all checkbox nodes that is a descendant of a node** by running the command `Find todos within →`. This is handy when you've been creating tasks on the fly and want to gather them all. - **Special search terms exist for finding nodes with checkboxes:** - `TODO` - finds all nodes with checkboxes, no matter their done state - `NOT DONE` - finds all nodes that are unchecked - `DONE` - finds all nodes that are checked - `DONE LAST DAYS` - finds all nodes that were done the past X days. Write it out like this: `DONE LAST 7 DAYS` - For more, see [Search nodes](/docs/search-nodes) - **Supertags have a setting to turn on checkbox by default:** for more on that, see [Supertags](/docs/supertags) - **Supertags can have their done state mapped to the values of a field:** for more on that, see [Supertags](/docs/supertags) #### [Slash / on empty node](#slash) Use slash on an empty node to create the following: - [Search node](/docs/search-nodes) - [Field](/docs/fields) - Reference - Image / file - Heading - Checkbox - **Start live transcription:** Begins to transcribe using your microphone. Requires a Tana paid subscription. - More commands (vertical ellipsis) #### [Add emojis 🙃](#add-emojis) You can create emojis on the fly by hitting colon : and entering a word that describes your emoji. There are also OS shortcuts for accessing emojis: - MacOS: Ctrl + Cmd + Space - Windows: Start key + period key #### [Lock nodes](#lock-nodes) - There's an option to lock nodes so they become non-editable. - Nodes can be locked by using the command `Lock node`. If using Build Title on a [Supertag](/docs/supertags), this will also lock parts of the node that are derived from field values. #### [Moving nodes within the outline hierarchy](#moving-nodes-within-the-outline-hierarchy) - To indent a node, use Tab. This makes it a child of the node directly above it. - To outdent a node, use Shift-Tab. This makes it a sibling relative to its old parent - For more documentation regarding nodes in the outline structure, see [Outline editor](/docs/outline-editor). #### [See edit history](#see-edit-history) Every node has a record of its creation time, and edit log. To see it: ![](https://cdn.sanity.io/images/rfb95wph/production/e5171bdc9115f922e90e786b1f11dd9d72d921f0-953x536.png?w=3840&q=75&fit=clip&auto=format) 1. Hover over the node bullet, then 2. click on the Edited by line to show the edit log ![](https://cdn.sanity.io/images/rfb95wph/production/0d776b06d66b5418a4c577dee7f798e16cd31c99-2002x1126.png?w=3840&q=75&fit=clip&auto=format) Nodes in focus do not have the bullet visible because they're displayed as headings. To check the edit log of the node in focus: 1. open the ellipsis menu, then 2. click on Show edit log. ### [Creating and editing references](#creating-and-editing-references) #### [Create/edit a reference](#create-edit-a-reference) To create a reference: - **Option 1: @-mentions.** On an empty node, type @ and select a reference with Enter - **Option 2: Copy/paste.** Copy any node with Cmd/Ctrl+C, then on an empty node, paste the reference with Cmd/Ctrl+V. - If you didn't want to paste a reference but rather its plain text content, hit Cmd/Ctrl+Shift+V. #### [Edit a reference](#edit-a-reference) References are treated as enclosed objects in Tana: - To edit a reference, hit Enter or double-click it. - To bring up the edit toolbar, hit Esc or right-click it - To zoom into it, hit Spacebar or click on the node icon. #### [Create an inline reference](#create-an-inline-reference) To create an inline reference: - **Option 1a: @-mention on empty node.** Type @ and then the keywords for the node you're looking for. Hit Shift+Enter to select it. - **Option 1b: @-mention in the middle of a node.** Type @ and then the keywords for the node you're looking for. Hit Enter to select it. - **Option 1c: @-mention in the middle of node to make a new node in Library.** Type @ and then the keywords for the node you're looking for. Use Cmd/Ctrl+Enter which will create a new node in Library and make an inline reference to it here. - **Option 1d: @-mention with text selected.** With text selected, type @ and then find the node you're looking for. Hit Enter to create an inline link using the selected text as alias. - **Option 2: Copy/paste, then type.** Create inline reference by first copying the node/reference with Cmd/Ctrl+C, then paste into empty node with Cmd/Ctrl+V . Hit Spacebar or any other key to make it inline. - **Option 3: Type, then paste.** Start typing in an empty node, and if you have a reference already copied, you can paste it anywhere in the node to make an inline reference. #### [Edit an inline reference](#edit-an-inline-reference) For a quick look at what's inside the inline reference, you can expand it in context without navigating to it: - Shift+click on an inline reference - Focus on an inline reference and press Cmd/Ctrl+Arrow down _(This section is greatly improved thanks to [Navigator Maciej](https://tana.inc/creators/maciej-smola) for writing an excellent post on all the ways to create references and inline references back in early 2023!_ 🙏_)_ #### [Rename the inline reference using Alias](#rename-the-inline-reference-using-alias) If you want the inline reference to be written out differently, select the inline reference , then use Set Alias on the [Text selection toolbar](#text-selection-toolbar) and type out what you'd like it to be. #### [Reference section](#reference-section) - **References:** If a node has references, at the bottom of such a node will be a section with the title "References". Expanding this will show you the breadcrumbs of where these references exist in the workspaces it appears in. - **Unlinked mentions:** Here you'll also find something called "unlinked mentions", which shows you all places where the name of the current node is found elsewhere in Tana but is not linked (as a reference or inline reference) to this node. From here, Tana gives you the opportunity to establish a link if you want using the button "Link" to the right. #### [Reference counter](#reference-counter) - There is a floating reference counter that appears to the right of every node that is visible, and not in focus/zoomed into. - The number shows you how many references a node has, similar to the Reference section in the footer of a node. - Click on the number to see where else the node has been referenced. - You can turn on Reference counter in Settings > Preferences > Show Reference Counter. ### [Deleting nodes and references](#deleting-nodes-and-references) Nodes and references are made differently from regular bullets, so there are some things to keep in mind when wanting to delete them. - **To delete a node with no references:** - Option 1: Use Cmd/Ctrl+Shift+Backspace on the node. - Option 2: Right-click on the node bullet and select "Delete node" - Option 3: Using Backspace on all the words and then finally the node itself will also work. - Note: If a node has content and your caret is at the beginning of it and you hit Backspace, it will delete the node and merge this node's content with the node above it. - **To delete a reference without editing its contents:** - Option 1: Use Cmd/Ctrl+Shift+Backspace on the reference. - Option 2: Right-click on the node bullet and select "Delete reference" - **To delete a node and all its references:** - Use the command `Hard delete including references`. This will remove the references in the current workspace, but make references in other workspaces show up with a Trash icon. ### [Text selection toolbar](#text-selection-toolbar) When you interact with text using a mouse, Tana gives you options in a toolbar based on what is selected. #### [When selecting text](#when-selecting-text) - @ Reference: Creates a new inline reference, or lets you pick an existing reference from the popup - \# Tag: Creates a node from the selection and creates/applies a tag of your choice. - Formatting: Heading, Bold, Italics, Underline, Strikeout, Code, Highlight - Remove formatting #### [When clicking an inline object](#when-clicking-an-inline-object) - Open: Opens node in panel - @ Set alias: Change the text of the link - \# Tag: Apply tag to inline object - 🔗: Copies the node URL to clipboard - Open to new panel: Opens node in the right dock - ···: Access all commands ### [Banners and Icons](#banners-and-icons) You can add an icon and a banner to any node. #### [Add an icon to a node](#add-an-icon-to-a-node) You can add an icon to a node, which will replace the bullet icon. - When zoomed into a node, hover over the title and you'll see `☺︎Icon` as an option. Click on it and the emoji picker will appear. You can add a default icon to a _supertag_, which will replace the bullet icon on all instances. - Click on the supertag to go to the supertag page, and set an icon here. #### [Add a banner to a node](#add-a-banner-to-a-node) You can add a banner to a node, which will appear as part of the header. - When zoomed into a node, hover over the title and you'll see `Banner` as an option. Click on it and follow the instructions to set a banner. You can add a default banner to a supertag, which will replace the banner on all instances. - Click on the supertag to go to the supertag page, and set a banner here. Right-click on a banner to: - Upload new banner - Remove banner image - Move banner image to node ### [Storing files on nodes](#storing-files-on-nodes) Nodes can handle pretty much any type of file. Drag a file onto a node in Tana and when you see a purple drop zone, let go to upload the file. Files can be easily downloaded, and a few common web-friendly filetypes can be previewed in Tana. These include: - Images - Video - Audio - PDFs ### [Node configuration](#node-configuration) To get to the node configuration: with your caret on the node you want to configure, run the command `Configure node` #### [Child supertag](#child-supertag) - A supertag can be set to apply to all child nodes. - To configure the supertag to be applied to all children of a node, add a supertag definition in the field. #### [Banner image](#banner-image) - Nodes can have banners. Tana will make any format of image fit the landscape crop of the header. - To give a node a banner, drag an image into the Banner image field. #### [Page size](#page-size) - Nodes can trigger pagination on child nodes if they exceed a certain number. - By default, when a list of child nodes is 100 or more, it automatically triggers pagination. - To change this, specify in numbers how many child nodes can be visible before pagination gets triggered. #### [Commands](#commands) - Commands can be permanently attached to a node, so they appear as buttons appended to the node name. - To add commands, go to the node config window > Commands and add them here. Read up on Commands for more on what they are and how to make them. #### [On child added/removed](#on-child-added-removed) - You can trigger custom commands to run when child nodes are added or removed from the target node. - To configure: Use the command `configure node` and scroll down to the On child added/removed. Add the command nodes here. - Use case examples: - When a child is added, give it a tag and run an AI prompt - When a child is removed, add the current time to a field of the child - Limitation: If nodes are added/removed via API, it will not trigger as they are currently not recorded as a user action. This is a limitation with the way the API is implemented. ### [Contextual content](#contextual-content) To add notes to a node without making it permanently part of that node, you can use something we call contextual content. In List view: use the shortcut Cmd+Option+Arrow Down (Mac) In Table view: It's available as a column via the `Add+` button at the end of the columns A node with contextual content will display as a diamond instead of a circle. Contextual content tends to be most helpful when you write a live search (viewed as a table) and want to process all of the results in some way without adding new data directly to the nodes. It can be as simple as adding a contextual checkbox field that says "I already looked at this." ### [Node management](#node-management) #### [Merging duplicate nodes](#merging-duplicate-nodes) If you have duplicate objects in Tana and you want to merge them to one, you can select them and use the command `Merge node` to choose which node you'd like to merge the other into. This works on nodes, supertags and fields. When a node is merged into another: - All the children are combined (if they both have the same fields, children in that field are also combined) - All tags are combined, and the original node is put into trash - All references and inline references in the available workspaces are updated to point to the new node. - If there are workspaces that had not been loaded during the merge with references to the merged node, these references will clearly point to the new node. Copy link Rate article ## Related release notes [See all](/releases) - NewCompact and full menu available in Supertag configuration under AI & Commands - It let's you build command menus for tagged nodes, similar to command palette but improved: - Command palette has been repurposed to Compact menu - Works like before, shows as buttons primarily in compact/item contexts – lists, cards, etc. - Full menu is an added option to build custom menus in detail contexts - Let's you define specific menus for full/detailed contexts – zoomed in/panel header, in a tab, expanded items, etc. - Use (Convert to group via command line) to group commands into dropdown menus - You can also nest groups for deeper menu structures. [(2025 / wk 5)](/releases/2025-wk05) - FixedWe fixed a bug where the workspace icon was overlapping labels in the reference section [(2025 / wk 5)](/releases/2025-wk05) - FixedWe fixed a bug where (id: xxx) would sometimes show up in node names when searching. This was in inline-refs. [(2025 / wk 5)](/releases/2025-wk05) - FixedWe now show supertag context menu instead of a generic node context menu when right clicking a supertag definition. [(2025 / wk 5)](/releases/2025-wk05) - FixedCreate new from tag homepage now creates new node in the workspace of the tag [(2025 / wk 5)](/releases/2025-wk05) - FixedWe fixed a bug where we showed two icons for tags in autocompleter [(2025 / wk 5)](/releases/2025-wk05) - InfoThe Inbox will now be default hidden for new users, and will only appear if they send any content to it. Nothing will change for existing users who have content in the Inbox or are actively using it. The Inbox will still exist for all users, and if send anything to it (from Android Capture, Readwise, API etc.) it will appear in the sidebar like before. [(2025 / wk 5)](/releases/2025-wk05) - ImprovedPasting a Tana node or a link to a Tana node while text is selected, turns the selected text into an inline link to the node (similar to what happens if you paste an external URL over selected text) [(2024 / wk 50)](/releases/2024-wk50) - ImprovedWe now automatically create a new checkboxed item when you hit enter at the end of one checkboxed item. A simple backspace will remove the checkbox on the new node. [(2024 / wk 47-49)](/releases/2024-wk47-49) - ImprovedButtons in the panel header are now right aligned instead of left aligned, and showing only the source material icon, not text. [(2024 / wk 47-49)](/releases/2024-wk47-49) ## Related FAQs [See all](/faq) ## Examples - How can I use system fields in Title expressions/Build title from field Dec 05, 2024 Copy link Calculated system fields are prefixed with `sys:` to avoid being mixed up with user-created fields with the same name. Example: `${sys:owner}` Calculated system fields and their respective title expressions can be [found here](https://tana.inc/docs/nodes-and-references#node-properties). Related docs: - [Nodes and references](/docs/nodes-and-references) - [Supertags](/docs/supertags) . - How can I find references in one workspace that are owned by another? Sep 27, 2024 Copy link To find all references in a workspace that are owned by another workspace: 1\. Go to your workspace home 2\. Create this search _as a direct child_ of the workspace home node: - GRANDPARENTS DESCENDANTS WITH REFS - `>NOT` GRANDPARENTS DESCENDANTS To limit the search to specific workspaces, add the system field `Workspace` and specify the workspaces you want to target there. ![](https://cdn.sanity.io/images/rfb95wph/production/f98201f0282ff0c01a7e405bc94f942ba079280c-1871x1197.png?w=3840&q=75&fit=clip&auto=format) Related docs: - [Workspaces](/docs/workspaces) - [Nodes and references](/docs/nodes-and-references) - [Search nodes](/docs/search-nodes) . - How to find nodes with empty/not set descriptions Sep 06, 2024 Copy link You can use regex to find this: - Add a reference to the area you want to search within - \>NOT >Node description:: `/.+/` ![](https://cdn.sanity.io/images/rfb95wph/production/68db0795e23a9681da1313a01da0c22e5586db4a-1457x820.png?w=3840&q=75&fit=clip&auto=format) Related docs: - [Search nodes](/docs/search-nodes) - [Nodes and references](/docs/nodes-and-references) . ## Question - Why are line breaks not supported in Tana? Dec 03, 2024 Copy link Tana's speed is reliant on each node being a small packet of information. Larger nodes are slower to edit, slower to index, slower to update, and so on. Line breaks, also known as multiline editing, would encourage longer entries of information, and would break many other situations where the contents of a node needs to be rendered as one line, such as inline references, option values, title expressions just to name a few. We do recognize that some want to store small pieces of information under one node, like a poem or quote. We are continuing to do research to explore ways to solve this, and also to solve for other issues related to long-form writing. If you would like to contribute your thoughts on this, please visit ideas.tana.inc and submit your thoughts under an existing or new post there. Related docs: - [Nodes and references](/docs/nodes-and-references) - [Outline editor](/docs/outline-editor) . - When I check a checkbox node, it disappears. Where does it go? Sep 27, 2024 Copy link This is likely because you have "Show completed items" unchecked. Go to your Settings and check the `Show completed items` setting. Related docs: - [Nodes and references](/docs/nodes-and-references) - [Account settings](/docs/account-settings) . - How can I save the image from AI-generated banners? Sep 27, 2024 Copy link Right-click on the banner > `Move banner image to node`. Then you can download it like you would with any image. ![](https://cdn.sanity.io/images/rfb95wph/production/702f55351975a98ba64a93b7faa2a3aa8a03d48a-612x364.png?w=3840&q=75&fit=clip&auto=format) Related docs: - [Nodes and references](/docs/nodes-and-references) - [AI for builders](/docs/ai-for-builders) . - Can you build a wiki in Tana? Sep 27, 2024 Copy link Absolutely: The most common place to do this is on the Home node. Here are some examples of top level wiki structures, usually arranged on workspace home nodes: ![](https://cdn.sanity.io/images/rfb95wph/production/69b79336d481ea8cebb579fa2f568ef4a66242df-1804x1318.png?w=3840&q=75&fit=clip&auto=format) ![](https://cdn.sanity.io/images/rfb95wph/production/6fa19394f343296d25744c1cd39c24e7d3c73d34-1804x1318.png?w=3840&q=75&fit=clip&auto=format) ![](https://cdn.sanity.io/images/rfb95wph/production/167f7661b60ce8fe8ff415f13dfbf169daa51788-1804x1318.png?w=3840&q=75&fit=clip&auto=format) Related docs: - [Nodes and references](/docs/nodes-and-references) - [Workspaces](/docs/workspaces) . - How do I delete nodes? Sep 27, 2024 Copy link It depends what you are deleting, but almost always the cleanest way to delete nodes is using "hard delete" which clears the entire node at once. You can hard delete using the following methods: - Keyboard: Cmd/Ctrl+Shift+Backspace - Mouse: Right-click the node icon > `Delete` - If you delete a node, it goes to the trash. If you delete a node that is referenced one or more times in the graph, the node goes to the trash and the references will have a little trash icon next to them. If you want the node and all references deleted, use the command `Hard delete including references` If deleting the node was a mistake, you can click on the trash icon and resurrect the node through one of the references. If you delete a reference, it goes to the trash and the node it referred to and other references will still exist and not be trashed. Related docs: - [Nodes and references](/docs/nodes-and-references) . - What is the difference between the Owner and a Parent of a node? Sep 27, 2024 Copy link The Owner is the node's home (where it was created). A node has only one owner, but can have many parents. PARENT / GRANDPARENT search operators are used to refer to one and two levels up in the outline, respectively > Source of FAQ: [Tana Community Resource Hub](https://tana.pub/yOTwTH6wVoyE/tana-community-resource-hub) Related docs: - [Nodes and references](/docs/nodes-and-references) - [Search nodes](/docs/search-nodes) - [Outline editor](/docs/outline-editor) . - Does Tana have backlinks? Sep 27, 2024 Copy link Yes, Tana has backlinks. We call them References, and there is a Reference section at the bottom of every node that shows all backlinks to this node. It is also possible to create a search node using the operator LINKS TO that captures backlinks, which you can customize to scope and filter in different ways. Related docs: - [Nodes and references](/docs/nodes-and-references) . - How do I remove the strikethrough on a node whose text is not formatted? Sep 27, 2024 Copy link It is likely the legacy implementation of the checkbox node styling. Cycle through the Cmd/Ctrl+Enter checkbox states to see if that removes it. Related docs: - [Nodes and references](/docs/nodes-and-references) . - What are all the ways I can copy data out of Tana? Sep 27, 2024 Copy link ### [Basic copy-paste](#basic-copy-paste) Copy-pasting content is the fastest way of getting data out of Tana. Select the content you want to copy, then hit Cmd/Ctrl+C. To paste, Cmd/Ctrl+V either in Tana (will create references) or elsewhere. ### [More copy-paste options](#more-copy-paste-options) Via the command line (Cmd/Ctrl+K) there are various flavors of copy available to you. #### [Copy full content to clipboard](#copy-full-content-to-clipboard) Copies the selected content in plain text format #### [Copy as Tana Paste](#copy-as-tana-paste) Copies the selected content in Tana Paste format #### [Copy as plain markdown](#copy-as-plain-markdown) Copies the selected content in plain markdown format ### [Other ways to get content out](#other-ways-to-get-content-out) #### [Export plain HTML](#export-plain-html) Renders a HTML page of the selected content that you can copy the HTML of, or save as a HTML file. #### [Export JSON](#export-json) To learn more about this, [read here](https://tana.inc/faq/can-i-export-my-tana-data). > Thanks to community member Michael Sklar for the FAQ idea! Related docs: - Export - [Command line](/docs/commands) - [Nodes and references](/docs/nodes-and-references) - [Copy paste in tana](/docs/copy-paste-in-tana) . - What does it mean when the yellow message "editing in X places" pops up? Sep 27, 2024 Copy link The "Editing in X places" usually pops up for a moment when you are editing a node that is referenced in multiple places. It's a reminder that the changes you're making here reflects on X amount of other nodes in the graph. To see all the other places this node is referenced, zoom into it and go to the Reference section at the bottom of the page. Here you'll find all the places in the graph where a reference of this node appears. Related docs: - [Nodes and references](/docs/nodes-and-references) . - Can I create aliases in Tana? Sep 27, 2024 Copy link Yes: in Tana when you create an inline reference, you can change what is written and still retain the link. Click the inline reference and a toolbar will pop up that allows you to set the alias. Related docs: - [Nodes and references](/docs/nodes-and-references) . - How do I get the permalink to a node? Sep 27, 2024 Copy link Bookmarking the URL in your browser of the form `https://app.tana.inc?**wsid**=XXX` (note the _wsid_) will break as it is a temporary ID for your _window state_. To grab the permalink to a node, use the following ways: - Right clicking on a node > Copy link - using the … options menu on the node > Copy link - running the command Copy link The link to a node never changes. They are URLs of the the format `https://app.tana.inc?nodeid=XXX` (note the _nodeid_) Related docs: - [Nodes and references](/docs/nodes-and-references) . - How can I merge two or more nodes/fields/supertags? Sep 27, 2024 Copy link Use the command `Merge node`. It also works on references i.e. it will merge the nodes referenced to and all references will be updated accordingly ### [To merge nodes](#to-merge-nodes) Select nodes, then run the command. ![](https://cdn.sanity.io/images/rfb95wph/production/65d27923a58435dfe34ad8ffcb3c12a3d91f5b65-1419x798.png?w=3840&q=75&fit=clip&auto=format) ### [To merge fields](#to-merge-fields) Get the field definitions in one place (copy/paste), select them and run the command: ### [To merge supertags](#to-merge-supertags) Get the supertag definitions in one place (copy/paste or @-mention), select them and run the command: Related docs: - [Command line](/docs/commands) - [Nodes and references](/docs/nodes-and-references) . - Where do deleted/trashed nodes go? Does the trash get emptied? Sep 27, 2024 Copy link When you delete something, they go to Trash. You can access Trash via the command `Open trash` To empty trash, use the command `Empty trash for workspace [current workspace]` ![](https://cdn.sanity.io/images/rfb95wph/production/ac729af9c8c3cf596fd7b65b62c9f2b45062ff9e-1312x463.png?w=3840&q=75&fit=clip&auto=format) It may take a couple of times of running empty trash to get all nodes out. Related docs: - [Nodes and references](/docs/nodes-and-references) - [Node types](/docs/node-types) - Intro . - How do I set up relationships between nodes? Mar 18, 2024 Copy link There are two main ways to create a connection between one node and another: ### [References/inline references](#references-inline-references) Use references or inline references to create an unstructured two-way connection between the nodes and the place you mention them in. The reference section shows you all unstructured mentions under "Referenced in..." ### [Fields](#fields) Fields and their field values create structured two-way connection between nodes. Structured in the sense that the connection is labeled via the name of the field. - Example: A book node has a field called Author, where you can enter a reference to any person. The relationship between the book and the person is that they are the Author. Fields offer a variety of ways to create structured connections: - Create a _Plain_ field and copy/paste or @-mention any node into it - Create an _Options_ field where you can choose from a list of your choice - Create a _Supertag from Options_ field where you can choose from a list of all nodes tagged a chosen supertag. Fields show up in the Reference section as "Appears as \[field name\] in..." This screenshot demonstrates how the different connections show up in the Reference section of a node: ![](https://cdn.sanity.io/images/rfb95wph/production/03f1439a11b27601e4d5d381b6e0394cbea14824-2812x1852.png?w=3840&q=75&fit=clip&auto=format) Related docs: - [Nodes and references](/docs/nodes-and-references) - [Fields](/docs/fields) . - What is a Reference in Tana? Feb 01, 2024 Copy link A reference in Tana is a mirror copy of a node. It's a node that lives in many places all at once. If you edit one of them, the change reflects in all copies, everywhere. ![](https://cdn.sanity.io/images/rfb95wph/production/55b91cecda323bbab880653a7745e968aff61512-1298x361.png?w=3840&q=75&fit=clip&auto=format) References are handy because it makes digital objects work a bit more like reality. Example: _Spinach_ doesn't only belong in your pantry, it also belongs as an _ingredient_ in your quiche `#recipe`, an _item_ at a local `#vendor`, or as a _source_ of iron `#nutrient`. ![](https://cdn.sanity.io/images/rfb95wph/production/e690eb6dca8bd97bbc5511b74510d94fb93a2dc0-3271x1840.png?w=3840&q=75&fit=clip&auto=format) What's really helpful here is that all references to _Spinach_ refer to the _same node_, so the node _Spinach_ becomes an index for all things spinach in your life, whether it be in recipes, found in shops, or a nutrient source. As you encounter spinach more in your life, and connect it to more things in your graph, your knowledge about spinach will just keep on growing. Just like knowledge does in real life. For more on nodes vs. references, [go here](https://tana.inc/docs/nodes-and-references#nodes-vs-references). Related docs: - [Nodes and references](/docs/nodes-and-references) - Intro # Outline editor # Outline editor Tana is a knowledge graph, with the interface of an outline editor. Think of it as an endlessly flexible bullet point list. Expand and collapse, zoom in and out, and reorganize your thoughts effortlessly. ## [Overview](#overview) **Tana is a knowledge graph, with the interface of an outline editor.** Nodes in a graph database do not usually come with any structure out of the box. The outline editor creates a tree structure, which defines hierarchical relationships between nodes, such as ancestors (nodes on higher levels) and descendants (nodes on lower levels). **Using an outline editor is the simplest way to organize ones thoughts.** Instead of distracting you with styling, formatting and fonts, the outline editor nudges you to focus on the structure and flow of your thoughts, notes, arguments or stories. This will help clarify your thinking more than anything. **Each bullet point in the outline is a discreet piece of information, called a node.** Nodes in Tana are the Lego pieces of your knowledge. Their atomic nature allow them to be rearranged, reused, and remixed in many ways. It’s a replacement for files and folders, and gives you the ultimate flexibility and speed. For more on nodes, see [Nodes and references](/docs/nodes-and-references) **Are there documents in Tana?** Any node can become the "document" you are focusing on - just zoom into it. If you want to focus on one section, expand it and collapse the rest. In this way, the "node-as-document" adapts to your shifting needs and focus. ## [Basics](#basics) - **In Tana's outline editor, your information exists in a natural hierarchy.** At the root of this hierarchy is the workspace node. From here, there are three main trunks where you can place new nodes: the _Library_, _Home_ or _Calendar_ nodes. The hierarchy looks something like this: - Workspace node - Library node - Home node - Calendar nodes - **Different branches, different logics.** On the [home node](/docs/workspaces), you can build your own hierarchical logic. On the [calendar nodes](/docs/dates-and-calendar-nodes), you are placing nodes according to the logic of time (e.g. days, weeks). - **To nest information in the hierarchy, indent it with** Tab**.** Indenting your information makes it easy to expand or collapse details as needed, and already imbues your information with structure and relationships by way of its place in the tree. You can outdent with Shift+Tab - **Nodes are expandable and collapsible.** This gives you full control over how much context you want to see, making complex information more digestible by breaking it down into manageable, collapsible parts. Press Cmd/Ctrl+↓/↑ to expand/collapse nodes under the current node. - **Use references to refer to the same thing in different places.** To copy a reference of a node, focus on the node and press Cmd/Ctrl+C (you should see a little bounce animation on the node), and paste anywhere else. If you update this information or change your mind about it, it'll update everywhere it has been referenced. ## [Details](#details) ### [Tana is a graph database with an outline editor interface](#tana-is-a-graph-database-with-an-outline-editor-interface) At its heart, Tana is a graph database - a powerful way to store and connect information. Tana lets you create the structure and connections that most naturally fits your data. It's the first product trying to give everyone access to the power of the graph. But interacting with a soup of nodes is hardly practical. So we chose the outline editor as the default structure and interface to interact with the graph. ### [The structure of the outline](#the-structure-of-the-outline) #### [Owner and workspace nodes](#owner-and-workspace-nodes) Every node has a primary location in the tree structure. Think of this like having a home address - while you can be mentioned in many places, your content has one definitive location where it "lives." Every node has metadata that identifies its Owner node and the Workspace it belongs to: - **Owner node**: A node property that signifies which node it's directly nested under. A node can have many parents, but only one owner. If the Owner node moves, has its workspace changed, or is deleted, the nodes owned by this "owner" node are considered part of it. - **Workspace**: A node property that signifies the workspace this node belongs to. Permissions to see and edit nodes are all decided on the workspace level. For more on other node properties, see [Nodes and references](/docs/nodes-and-references) #### [Breadcrumbs](#breadcrumbs) You can always see where content lives by checking the breadcrumbs at the top of the panel. #### [Node relationships](#node-relationships) ![](https://cdn.sanity.io/images/rfb95wph/production/1e59e1553f66bab5d62ce6e37e5a53bd3d850599-1107x941.png?w=3840&q=75&fit=clip&auto=format) Ancestor and descendant nodes A node or reference has relationships with adjacent nodes in the hierarchy, which can be described as follows: - A _parent_ exists one level outdented from a node, making the node a direct ancestor of it. A _grandparent_ exists two levels outdented. - A _child_ exists one level indented from a node and is a direct descendant of it. - A _sibling_ exists on the same level relative to a node Fields and field values are treated as part of the hierarchy too. - In Tana, fields are considered a type of node that also exists within the outline hierarchy. - Relative to a node, a field that is applied to it is considered a child, and the field value is considered a grandchild of the node. ### [Structures beyond the outline](#structures-beyond-the-outline) The outline editor provides a "familial" relationship between nodes. This hierarchical relation, however, is just one way that information can be arranged in Tana. A quick overview of other ways to structure your data in Tana: - **By [date](/docs/dates-and-calendar-nodes)**: Every node has metadata like created/last edited times, as well as its associated calendar node if it exists as a descendant of one. - **By [supertag](/docs/supertags)**: A node that has a supertag is automatically associated with other nodes tagged with the same supertag. They belong to the same "class". - **By [fields](/docs/fields)**: A field provides metadata so large sets of data can be subdivided into smaller and more exact groups. (out of 100 nodes tagged #task, 3 of them are marked "Priority"). You will usually use a mix of these different structuring tools on your data, sometimes all of the above. **The less structure a node belongs to, the less important and findable it becomes.** This is not a bad thing, it's just something to be aware of. Creating data structure is a constant fight against entropy, so it is wise to know which nodes are worth the effort. ### [View options beyond the outline](#view-options-beyond-the-outline) By default, the outline editor shows your nodes in List view. Changing the view settings of a node will affect how its child nodes are viewed. See [Views](/docs/views) for more on the types of views. ### [Move nodes within the outline](#move-nodes-within-the-outline) To indent/outdent nodes - Use Tab to indent a node to make it a _child_ of the node directly above it. - Use Shift+Tab to outdent a node to turn it into a _sibling_ relative to its old parent To move one or more nodes up/down - With mouse, click and drag the node bullet up and down - With keyboard, press Cmd/Ctrl+Shift+Up arrow/Down arrow ### [The `Move to` menu](#the) There's a new way to move nodes that uses a menu to quickly find the location you want to move something to. To open the menu - **With the node toolbar:** Right-click or hit Esc on a node and select **Move** on the toolbar - **With the node bullet context menu:** Right-click on the node bullet → **Move** - **With the keyboard shortcut:** Cmd/Ctrl+Shift+M - **With command line**: Use the `Move with finder` command to bring up the menu. Once the menu is open, to find a location in the menu - **By search:** start typing to find the location - **By navigating:** use arrow keys to traverse up/down/left/right through the tree Once you have found the location, to move to that location - Use Enter if it's a node with no children - Use Cmd/Ctrl+Enter on a node with children - Hit Enter, twice To move and leave a reference: - Use Option/Alt+Enter ### [Other ways to move nodes](#other-ways-to-move-nodes) With Cut/Paste - Cut a node (Cmd/Ctrl+X) and paste it elsewhere. With command line - Use the `Move` command to move a node to a specific move target. You can define move targets by using the command Set move target on any node to add it to the target list. ### [Navigate between nodes](#navigate-between-nodes) See [Navigation](/docs/navigation) Copy link Rate article ## Related FAQs [See all](/faq) - Why are line breaks not supported in Tana? Dec 03, 2024 Copy link Tana's speed is reliant on each node being a small packet of information. Larger nodes are slower to edit, slower to index, slower to update, and so on. Line breaks, also known as multiline editing, would encourage longer entries of information, and would break many other situations where the contents of a node needs to be rendered as one line, such as inline references, option values, title expressions just to name a few. We do recognize that some want to store small pieces of information under one node, like a poem or quote. We are continuing to do research to explore ways to solve this, and also to solve for other issues related to long-form writing. If you would like to contribute your thoughts on this, please visit ideas.tana.inc and submit your thoughts under an existing or new post there. Related docs: - [Nodes and references](/docs/nodes-and-references) - [Outline editor](/docs/outline-editor) . - What is the difference between the Owner and a Parent of a node? Sep 27, 2024 Copy link The Owner is the node's home (where it was created). A node has only one owner, but can have many parents. PARENT / GRANDPARENT search operators are used to refer to one and two levels up in the outline, respectively > Source of FAQ: [Tana Community Resource Hub](https://tana.pub/yOTwTH6wVoyE/tana-community-resource-hub) Related docs: - [Nodes and references](/docs/nodes-and-references) - [Search nodes](/docs/search-nodes) - [Outline editor](/docs/outline-editor) # Supertags # Supertags Supertags turn your notes into objects like Projects, People, Tasks, Books, Recipes. Supertags will help you find, structure and build your information in flexible, iterative and lightning-fast ways. > Last updated: November 6, 2024 ## [Overview](#overview) **Supertag = Turns a node into an object.** **Use supertags to identify objects in your notes:** Examples include `#task`, `#meeting`, `#trip`, `#subscription`, `#person` and so on. A good way to check if a supertag is right, is thinking “**is a**” when adding the tag to a node. A node with the contents “Marisha” _is a_ #person. Oslo _is a_ #city. With an eye for “what _things_ come up in my notes that need to be remembered, organized or actioned”, these are good candidates for a supertag. **Supertags are the beginning of creating collections of objects, like a database**: Anything you would make a list, collection or database for, these are good supertag candidates. Each row in a database represents one node. Each column represents the Fields of those nodes. **Supertags give you tools to structure the information of the object:** Every time you apply a supertag to an item, it populates with default Fields and Nodes of your choice, to help you organize all important and related information regarding this item. If it is a person, adding a Field for their Phone Number and their Preferred Name might be handy. If it is a todo, you may want a Field with the Due Date. See more under Supertag configuration panel. ## [Basics](#basics) - When you tag something, unlike traditional tags that signal that the content is _related_ to the tag, in Tana the content _is_ the tag. For example, "buy milk" _is_ a #task. Therefore, supertags apply to the _whole_ node. - This means that you can define objects in your notes, and give them special attributes based on what they are. Tasks can have _Due dates_. People can have _Nicknames._ Projects can have _Statuses._ These attributes are saved as **Fields** in the Template. - Supertags can be used on any node, and gathered at any time using **Search nodes**. If you remember to supertag your important stuffs, our powerful search nodes will ensure that everything resurfaces again in an instant, no matter where they are in the **graph**. - Click on a tag and you’re taken to a **Supertag page.** By default it creates a search looking for all nodes with this supertag in the graph, shown as a table. That said, you can adapt the Supertag page however you want by adding tabs and additional views of relevant information. - In the Supertag page, click on the wrench button on the top right to get to the **Supertag configuration panel**. (Note: you can also get to it by holding Cmd/Ctrl+Shift+click on any supertag) ## [Details](#details) ### [Create a supertag](#create-a-supertag) On any node, typing # will bring up the Supertag menu. Continue typing the name of the supertag to either make a new supertag (always the top answer), or find an existing one that matches what you’re typing. On any node, use the Command Line Cmd/Ctrl+K and type Convert to supertag. This converts the node to a Supertag definition turning the node name into the supertag name. This command will also take the child fields and nodes and make them into template items. When you create a supertag, by default it sends the original Supertag definition to Schema. ### [Add/remove a supertag](#add-remove-a-supertag) To add a supertag, anywhere in a node, type `#[name of tag]` and hit Enter to apply it to the current node. To remove a supertag, hover over the tag and click the x that shows up, or right click the tag and pick "Remove tag" Both actions can be done via the Command line (Cmd/Ctrl+K): - "Add tag" - "Remove tag" ### [Delete a supertag](#delete-a-supertag) Before you delete a supertag, consider whether it has been applied to any nodes. In the Supertag configuration panel, scroll down and see the stats on how many nodes it’s been applied to. - If you have used it on 0 nodes, it’s fine to just delete the supertag.If you have used it on 1 or more nodes, consider finding all those nodes and untagging them before deleting, or if it’s being replaced by another tag, merging the old tag with the new tag. - When you delete a supertag that is applied to other nodes, these nodes will show a trash can icon. This follows our principles about Deleting Nodes, Supertags, and Fields that have references elsewhere, which states that Tana will never delete data that is indirectly associated with another element that you delete. How to delete a supertag: - Option 1: Go to Supertag configuration panel. At the bottom there’s an option to Delete the tag. - Option 2: Find the original Supertag definition and delete it. ### [The supertag page](#the-supertag-page) When you click on a supertag, you’re taken to the Supertag page. This page by default will be set in [Tabs view](https://tana.inc/docs/views#tabs-view), and show you a table of all supertagged nodes on the first tab. You can do basic configuration of the supertag here like adding columns (which are fields) and saving them to the supertag template using the ✨Suggestion that pops up. You can also add other tabs with different views that you want accessible on the supertag page, such as instructions on how to use the supertag, search nodes with different default views, or a reference to any node you might find useful to access while looking at the supertag page. ### [Configure a supertag](#configure-a-supertag) To open the configuration panel of a supertag: - **Anywhere you can see a supertag:** - Option 1: Right-click it and choose `Config supertag` - Option 2: Cmd/Ctrl+Shift+click on a supertag - **On the supertag page:** go to the node options (ellipsis button) > `Configure supertag` - **Use the command line on a tagged node:** `Configure supertag` ![](https://cdn.sanity.io/images/rfb95wph/production/1e11b0b77f9b5f8e618ffee46ec909496107e0bd-3065x1724.png?w=3840&q=75&fit=clip&auto=format) The supertag configuration usually opens as a side panel to the right #### [Colors](#colors) There are 12 colors available for supertags, plus colorless (grey). #### ["Used X times"](#used-x-times) How many nodes the supertag has been added to. Clicking it creates a search node looking for all the nodes. #### [Delete](#delete) This deletes the supertag definition. If the tag is still in use elsewhere, the name will appear with a trash can icon. We recommend either 1. untagging everything before deleting, or 2. using the command Hard delete including references on the supertag definition. ### [Supertag config: Content template](#supertag-config-content-template) The content template is where you add fields, search nodes and regular nodes that will show on every node with this supertag. ![](https://cdn.sanity.io/images/rfb95wph/production/41ea21c864da1ad11be6ef23c089b8f62d5203d2-1536x2288.png?w=3840&q=75&fit=clip&auto=format) Supertag config: Content template section #### [1\. Default content](#1-default-content) Below is where you can construct the content template for the supertag. Every time you apply the supertag to a node, this template gets applied. #### [—Fields](#fields) Fields are attributes that describe the object that the supertag represents. Examples: - a `#task` can have fields like Status, Deadline, Priority, Team, Assignee - a `#client` can have fields like Company name, Email, Point of contact - a `#project` can have fields like Timeline, Lead, Team, OKRs, KPIs, Stage, Priority **To add fields to the supertag template:** - **Add fields directly in config:** Type \> at the beginning of a new node to add a new or existing field. - **Add fields ad-hoc:** Add a new or existing field under any tagged node (that isn't already part of the template), then right-click the field name > `Add to template` **To set default values for fields:** - Fill out the field value in the supertag template. Example: New #task always has `>Status:: Inbox` **To set auto-initialize rules in fields:** - Each field has to be set up separately. Go into the field config by clicking the field bullet. For a more in-depth description on how field initializations work, see: [Auto-initialize](https://tana.inc/docs/fields#auto-initialize) #### [—Add search nodes](#add-search-nodes) A search node can customize its results based on the supertag instance. Examples: - a `#project` that looks up related `#tasks` - a `#person` that looks up related `#meetings` - an `#author` that looks up related `#books` **To make a search node:** - Command line (Cmd/Ctrl+K) -> Find nodes - Type `?` and click on ✨Create search node See [Query Builder](https://tana.inc/docs/search-nodes#query-builder) for more on customizing your search. #### [—Add nodes](#add-nodes) Add nodes just by typing them in. You can also add references to nodes. #### [2\. Extend](#2-extend) Pick a supertag from the list and the default content will populate with template objects from that tag. Think of it as a projection. You cannot move or delete content that originates from an extended tag, but you can add more fields/nodes, and you can specify different default values to the fields. Example: A basic `#task` tag has the `>Due date` and `>Project fields`. - You can create a `#design-task` that is extended by the `#task` tag, then set the default `>Project value` to "Office Renovation". - You can also add a new field, `>Reno team`, so you can add individuals and teams that these tasks be assigned to. This will not appear on the `#task` tag. #### [3\. Optional fields](#3-optional-fields) Optional fields allow you to specify which fields you use _sometimes_ in a supertag. This means you can add only the most important fields to your supertag template, while you move the rest to _optional_, ready to go when you need them. **To add optional fields:** - **Supertag config:** Add a field in the Optional fields section right beneath the Supertag template - **Add an ad-hoc field - twice:** Add a field under any tagged node. If you add it again a second time under another node with the same tag, it automatically gets added as an optional field. - **AI-enabled suggestions:** If you use AI in Tana, fields will be automagically suggested for any new supertag you create. - **Demote from template:** Right-click on a field that is part of a supertag template, and choose `Make optional` Once optional fields have been added, whenever you use that supertag again, the optional fields will be suggested in the following ways: - Button next to the tag - Suggested fields widget (appears only for a little while, then disappears after 24h) - Slash command inside tagged node #### [4\. Show as checkbox](#4-show-as-checkbox) Turn this on to show a checkbox on all tagged nodes. #### [4a. Done state mapping](#4a-done-state-mapping) Optionally map the checkbox state to one or more field values. This creates a two-way connection between a field value and the checkbox state. If you check/uncheck the box, the field value changes to the value you specify for either state. Insert fields using \>, and select the values for each state. ![](https://cdn.sanity.io/images/rfb95wph/production/80b6fa1e7e9bf0f388ce559848f37b26c9b9a29f-2138x1203.png?w=3840&q=75&fit=clip&auto=format) #### [5\. Base tags](#5-base-tags) You can select a “base” type for your supertags. These are a fixed set of familiar object types, mainly to help AI distinguish the type of object a node is regardless of its name. **The base types are:** - **Meeting**: A type of event you want to transcribe and create meeting notes from - **Tasks**: An action item that needs to be done - **Organization**: A group or corporate entity - **Person**: An individual (from a contact list perspective) - **Location**: A place in the world, like a city, state or country - **Project**: A larger effort than a single task - **Topic**: A subject, category, area - **Event**: Something that happens at a specific time **Examples of how they are currently used:** 1. **Meeting agent:** The tags that will be applied to your meetings are automatically given the Meeting base tag. To create more meeting agents, create a new supertag and give it the Meeting base tag. This will make the Meting section in config appear where you can set it up. 2. **AI-generated meeting notes:** By default the meeting agent will auto-detect things like Persons, Organizations/Companies, Tasks, Locations, and Products. The default tags that are generated for these objects all have the appropriate base tag applied. 3. **Calendar sync:** When you select a tag (other than the Meeting tag) to use for your events and tasks, they will get those base tags respectively. This feature is a work in progress. #### [AI and Commands](#ai-and-commands) The AI and Commands section is where you can configure all AI functions and add Commands to the supertag, either to be manually or automatically triggered. ![](https://cdn.sanity.io/images/rfb95wph/production/8d9a76ef5a7037a5d0cc7a50df0b9759bde3fb75-1478x2466.png?w=3840&q=75&fit=clip&auto=format) Supertag config: the AI and Commands section #### [1\. Custom autofill behaviour](#1-custom-autofill-behaviour) This custom AI feature allows you to use AI to autofill the title, the fields, or the description, based on the incoming prompt. Autofill applies to all fields, except the ones you add to the "Fields to exclude" section. #### [2\. Audio-enabled supertag](#2-audio-enabled-supertag) This custom AI feature allows you to add content to a node by doing a voice memo to transcription. A record button appears on every node that has this tag. You can simply receive the raw transcript, or you can add your own `post process command` to take the transcript and turn it into something else using AI. #### [3\. Command palette](#3-command-palette) The command palette allows you to add commands that will appear as button on all nodes with this tag. Commands that are triggered on a tagged node will use that node as their primary context, and cannot be made to act on an adjacent context. #### [4\. Trigger commands on events](#4-trigger-commands-on-events) You can trigger custom commands to run around certain actions. **On added/removed:** gets triggered when a tag is added or removed from a node Use case examples: - When added, send a notification to a member of the workspace whenever a tag is added - When added, move the node to a specific place - When removed, change status of a field to Archived Limitation: If a supertag is added/removed via API, it will not trigger as actions by API are currently not recorded as a user action. This is a limitation with how our API is implemented. #### [5\. AI instructions](#5-ai-instructions) These are clarifying instructions you can give if AI is used to identify objects that should be tagged this. #### [Advanced options](#advanced-options) The Advanced options section has functions that are a bit more involved in setup, or are less common to reach for. ![](https://cdn.sanity.io/images/rfb95wph/production/1ffb5b06dfe275d877d947961a92f3c2f9a245b1-1468x2376.png?w=3840&q=75&fit=clip&auto=format) Supertag configuration: The advanced options section #### [1\. Build title from fields (title expression)](#1-build-title-from-fields-title-expression) Build the title of a node from the values of its fields. Title expression are set in a supertag called "Build title from fields", and will apply to all its instances. Title expressions composes field values from the node into a title using this the format: ${field name} The title expression uses the actual name of the attribute. You can also write between the fields, it could look like this; **${Objective} with the team at** ****${Date}**** The existing name of the node can be accessed through **${name}**. Note that if the title expression begins with **${name}**, you will be able to edit the first part of the title directly on the node. In any other case, the node title will be locked for editing (even if **${name}** appears later in the expression) You can also specify a max length using **${field name|30…}** which will show only the first 30 characters of a value. Choose whether you want the placeholder to appear if the field is empty by appending a ? - either **${field name|?}** or **${field name|30…?}**. In fields that have a list of nodes as values, we include all field values, not just the first one. **System attributes available in the title expression:** - **${cdate}** and **${ctime}** - Created date and time in UTC, i.e. not local time - **${mdate}** and **${mtime}** - Modified date and time in UTC, i.e. not local time - **${sys:description}** - Description field - **${sys:createdAt}** - Time of creation - **${sys:lastEditedAt}** _\-_ Time of last edit - **${sys:lastEditedBy}** - User who last edited the node - **${sys:editedBy}** - All users who ever created/modified the node - **${sys:owner}** - Parent node - **${sys:dateFromCalendarNode}** - The calendar node this node belongs to (Calendar date system field) - **${sys:doneTime}** - Date and time this node was marked done Finally, you can use simple html formatting like `` and `` to make things appear bold or in italics. An example: - Title expression: `${Title} by ${Author}, ${Year}` - Node title: **Pride and Prejudice** by Jane Austen, _1813_ #### [2\. Default child supertag](#2-default-child-supertag) If you want to have a default supertag applied to all child nodes of any instance of this supertag, you can set the supertag you want here. This supertag will be applied to all new children. #### [3\. Related content](#3-related-content) Related content makes it possible to customize the layout of the tagged item to show references or search nodes next to the node's main content. This can be used to show for example tasks or meetings on the Today page, or action items next to a meeting. See [Related content](/docs/related-content) for more. #### [4\. Shortcuts](#4-shortcuts) Nodes here reflect the same nodes that exist on [the supertag page](#the-supertag-page). You can manually add nodes here and they will show up there. ### [Supertag definition](#supertag-definition) #### [What is a Supertag definition?](#what-is-a-supertag-definition) When you create a new supertag, a node is created that stores the configuration of this supertag. This is the Supertag definition and includes its name, template, and commands that show up as buttons, among other things. You access the settings of the supertag via the Supertag configuration panel. #### [How to find the Supertag definition?](#how-to-find-the-supertag-definition) There are two situations where you’ll encounter needing to use supertag nodes: - Creating a [Search node](https://tana.inc/docs/search-nodes) - To find it here, just type “#” in the search expression editor and Tana will look for every supertag in accessible workspaces - Creating a [Tana Template](https://tana.inc/docs/tana-templates) - To find it anywhere else, type “@#” and the name of the supertag. Supertag definitions show up in their color and hashtag at the front. ### [Merging supertags](#merging-supertags) See [Merging duplicate nodes](https://tana.inc/docs/nodes-and-references#merging-duplicate-nodes) Copy link Rate article ## Related release notes [See all](/releases) - ImprovedIn the tag overview, you can now see the descriptions on Supertag as a tooltip. [(2025 / wk 5)](/releases/2025-wk05) - FixedCreate new from tag homepage now creates new node in the workspace of the tag [(2025 / wk 5)](/releases/2025-wk05) - NewGamechanger?? New commands to be run on tag template: "Convert template node to field" + "convert template field to node". What this does: Inside the content section of a supertag config, you can now convert fields to nodes, and nodes to fields. These will update the tag template / 'content', and all nodes that have already been tagged and 'initialized' with this tag template. Fields with values / content will be turned into nodes with children, nodes with children will be turned into fields with values. [(2024 / wk 47-49)](/releases/2024-wk47-49) - NewThere is now a command to update existing instances when you change the default field value in a tag template [(2024 / wk 47-49)](/releases/2024-wk47-49) ## Related FAQs [See all](/faq) ## Examples - How can I use system fields in Title expressions/Build title from field Dec 05, 2024 Copy link Calculated system fields are prefixed with `sys:` to avoid being mixed up with user-created fields with the same name. Example: `${sys:owner}` Calculated system fields and their respective title expressions can be [found here](https://tana.inc/docs/nodes-and-references#node-properties). Related docs: - [Nodes and references](/docs/nodes-and-references) - [Supertags](/docs/supertags) . - Move node to Library when a supertag is used Nov 13, 2024 Copy link > 🙏 Thanks to many community members but especially **Ready** and Navigator **Dee** for surfacing this tip in a recent conversation! For more stuff like this, join our community to share and learn about all things Tana 🫶 ### [Goal](#goal) To move all nodes to a single place when they get tagged. This is useful if you want nodes of a certain type to live in a place that makes sense for breadcrumb navigation. ### [Instructions](#instructions) For this example, we're going to build a command that moves all tagged nodes to the _Library_. #### [Build the command](#build-the-command) 1. Create a new command called _Move to Library_ 1. Add the command Move node 2. In the parameter Move node target, pick the _`Library`_ from the dropdown. There are other locations to choose from as well, and you can insert a reference to any node you want as the target 3. Add parameter Remove references after moving node and give it your desired setting. Most would want it `unchecked` so it leaves a reference of the node in the original location 4. Add parameter Move original node and `check` it. This ensures that even when you use the Add tag action on a reference, it moves the original node to the desired location and not the reference (which won't achieve the goal of this command) 2. Add the command to the config of the supertag in question. Go to _AI and Commands_ > _On added_, and add a reference to the command here. ![](https://cdn.sanity.io/images/rfb95wph/production/ba853fec9e6da07e2cde1ecc70987082cee23bde-1593x1002.png?w=3840&q=75&fit=clip&auto=format) #### [Testing the command](#testing-the-command) To test it, use the supertag on a node: - If used on a _node_, it should immediately send the original to the specified location and leave a reference behind. - If used on a _reference_, it should send the original - wherever it is - to the specified location. That's it 🙌 Related docs: - [Supertags](/docs/supertags) - [Command nodes](/docs/ai-command-nodes) . - Receive a notification whenever someone uses a supertag Nov 13, 2024 Copy link ### [Goal](#goal) Community member **Jérémie** asked: "_I created a new supertag called #feedback to collect feedback from my team. They can easily add a comment and add the supertag. Is there a way to receive a notification when the tag has been added?_" Great question! Below was the solution that worked 👇 For more stuff like this, join our community to share and learn about all things Tana 🫶 ### [Instructions](#instructions) #### [Build the command](#build-the-command) 1. Create a new command called _Notify me_ 1. Add the command Run a command line command 2. In the parameter Commands, write `Notify @[your tana account email]`. Example: `Notify @fei@tana.inc` 2. Go to the supertag config you want to be notified on, to the section **Trigger commands on events**, and add a reference to the command to the **On added** section: ![](https://cdn.sanity.io/images/rfb95wph/production/be9a7ce0d0b1559555ec0567c3557d567cf87a5c-1392x1168.png?w=3840&q=75&fit=clip&auto=format) #### [Testing](#testing) Test the command by adding the supertag. You should 1. get a notification that a notification has been sent, and 2. see a blue dot appear in your notifications. Clicking it shows you which node you were notified on. 🙌 That's it! Related docs: - [Command nodes](/docs/ai-command-nodes) - [Supertags](/docs/supertags) . - How can I find all tags that extend a tag? Sep 27, 2024 Copy link One way is to create this search node: - \>system field Tags : #tag (use supertag that was extended) - `IS TAG` Example: ![](https://cdn.sanity.io/images/rfb95wph/production/9ffb67edd6de05fbbf06949534023d901da6192c-1072x1777.png?w=3840&q=75&fit=clip&auto=format) Related docs: - [Search nodes](/docs/search-nodes) - [Supertags](/docs/supertags) . - How to use Tana Paste with supertags that have non-alphanumeric characters? Sep 27, 2024 Copy link Tana Paste can usually parse supertags that are one word, such as `#task`. If a supertag has spaces, numbers or irregular characters, try wrapping the name in double brackets like this: `#[[1'3$4'6]]` If you want to grab the supertag definition, include the hashtag within the brackets, like this: `[[#1'3$4'6]]` Related docs: - [Tana paste](/docs/tana-paste) - [Supertags](/docs/supertags) . - How can I add supertags on things that I send from Tana Capture? Sep 27, 2024 Copy link While it isn't possible to tag things when you're sending things from Tana Capture, you can have Tana do some post-processing magic to convert written-out tags to real tags once they arrive the Inbox—no AI needed! 1. This method uses a simple [Tana Paste](/docs/tana-paste) command that you can run on the Inbox node, which targets all new children that have "#" in them. 2. Once you've created the command, you must add it to the `On child added` section of the Inbox node. You can find it by running the command `Debug node` on the title of the Inbox. ### [Here's Theo describing the command:](#heres-theo-describing-the-command) "All it does is paste the nodes that have # in them and that are not tagged, using Tana Paste. Say we add this through Tana Capture: `buy milk #todo` The command will paste that exact text back in with Tana Paste, where `${name}` is `buy milk #todo` and `${sys:content}` are any child notes that are present. Using Tana Paste, `#todo` will be added as a tag. Note: this creates a new node, so the created date will change, meaning you’ll lose the time that the node was captured through Tana Capture." ![](https://cdn.sanity.io/images/rfb95wph/production/61b1fd797a397d9c20f2799c73807ae060f693a2-1680x945.png?w=3840&q=75&fit=clip&auto=format) Related docs: - [Supertags](/docs/supertags) - [Tana capture](/docs/tana-capture) - [Tana paste](/docs/tana-paste) - [Command nodes](/docs/ai-command-nodes) . - How can I find nodes based on a field value of an ancestor? Sep 27, 2024 Copy link There is no way to build a search that is able to read the fields of an ancestor node. But, using title expressions, you can grab the field value of an ancestor node and have it part of the title of the node you're running the search on, making that information searchable. TLDR: Use the `${sys:owner}` title expression to pick up content from ancestor nodes and their fields. This solution is great for Readwise users and came about when Maggie from the community wanted to search her Readwise highlights by the tags of the article/book it was taken from. To do this, use `${sys:owner.Field}`, and repeat `sys:owner` as many levels up as you need to go to target the right ancestor. In the case of Readwise highlights, you usually need to go up two levels. Check out the demo video: Now with the information you need from the ancestor node baked into the title of the highlight itself, it can be used to search and filter those nodes. While this solution came up in the context of the Readwise integration, it is a reusable pattern that can be applied elsewhere. Related docs: - [Readwise integration](/docs/readwise-integration) - [Supertags](/docs/supertags) - [Fields](/docs/fields) . ## Question - What is the difference between supertags in Tana and hashtags used in social media? Sep 27, 2024 Copy link Here's a comparison between hashtags and supertags: - Primary function - Hashtags: identify `keywords` and `trends` that are relevant to a piece of content - Supertags: identify `items` and `entries` in one's data or knowledge-base - Placement - Hashtags: Can appear anywhere in the content - Supertags: Applies to the whole content (node), always appears at end - Search - Hashtags: Finds all content tagged with that hashtag across the platform - Supertags: Similar to hashtags - Value - Hashtags: Connects users to the broader conversation across the platform - Supertags: Connects users with their own content, improving knowledge management and retrieval - Shorthand - Hashtags: "This content _is related to_ X" - Supertags: "This content _is an_ X" - Examples - Hashtags: - Example: This content _relates to_ \[#topic1, #topic2\] - #TaylorSwift - #ErasTour - #BlankSpace - Supertags: - Example: This item _is a_ #\[type of item/entity\] - Taylor Swift #artist - Eras Tour #event - Blank Space #song Using supertags this way is a good starting point for getting to know them. Once you become more familiar, it's not a problem if you want to break the rules and use supertags like hashtags - as long as you know what the tradeoffs are and why you are doing this. Related docs: - [Supertags](/docs/supertags) - Intro . - How do I create a relational database in Tana like in Notion or Airtable? Sep 27, 2024 Copy link Because Tana is a graph, building relational databases is easy. Think of `supertags` as databases, and `fields` as columns in a database Let's use an example: - You have two supertags: `#person` and `#project`. You want to relate the two by assigning a team lead to each project that draws from person. - To relate each project to one team lead, we can make an Instance field called `Team lead` in the project. This allows us to select the `#person` supertag so this field will now create a dropdown of options from every instance of the person supertag. - Now, every time you assign a team lead to every project, on the other side you can look at a person and see what projects they are noted as Team lead for in the Reference section. There are many other ways to relate one database to another in Tana that go beyond what relational databases can do. That's because all information in Tana is stored as a graph, and on top of this we have flexible ways to build schemas with supertags and fields. It's everything a relational database has, with much more freedom and flexibility in the long run. Related docs: - [Supertags](/docs/supertags) . - Why is my field not auto-initializing? Sep 27, 2024 Copy link #### [How auto-initialization works](#how-auto-initialization-works) There could be several reasons why a field isn't auto-initializing. Currently, field auto-initialization is triggered only on the event where - a supertag is applied to a node, and - the field is in a placeholder state (i.e. doesn't exist/have its own nodeID). Fields will therefore not auto-initialize under the following events: - 1\. When added anywhere as a solo field - 2\. On nodes where the supertag is already applied and the field is added after the fact - 3\. If the field is nested under a node in the supertag template. Fields have to be direct children to the supertag to auto-initialize #### [The next question is likely: can I trigger auto-initialization somehow?](#the-next-question-is-likely-can-i-trigger-auto-initialization-somehow) As a result of how initialization is triggered today, there is an unintentional quirk that can be used to re-initialize fields. For fields that fall under category 2 (from the list above), it is possible to trigger initialization by applying any supertag to the node. The fields have to be in a placeholder state, or it won't work. Video demo: Related docs: - [Fields](/docs/fields) - [Supertags](/docs/supertags) . - My supertagged nodes are not updating with the latest changes I'm making! What's going on? Sep 27, 2024 Copy link Supertag template nodes are directly connected to the template until the moment you edit or make a change to them in the instance. Editing them in any way separates them from the template, and any change you make to the template will not reflect on edited template nodes. This is part of Tana's way to never destroy information you have touched and edited. To refresh template nodes with the updated ones from the supertag template, consider first whether you have content you want to save, and move them out of the template element first. Then, perform a hard delete (Cmd/Ctrl+Shift+Backspace) to clear the stale node, and the template will immediately repopulate it. Related docs: - [Supertags](/docs/supertags) - Intro . - How do I share a supertag from my private workspace to a shared one? Sep 27, 2024 Copy link > Currently, the easiest and most foolproof way to do this is to not share it but instead build the supertag, with its fields and anything else necessary for the supertag to work, from the ground up in the new space. That said, if you still want to move a supertag over that exists only in your private workspace, the main work is to ensure that there's nothing in the supertag that references something in your private workspace, otherwise it will appear as broken to others once it's moved. It's like packaging up a zip file. You can't just zip up a bunch of shortcuts, you need the real files in there or the recipient will only see broken shortcuts. You'll also have to remember to move over other things like field options, commands, and ensure that no saved view options contain elements from your workspace. Basically, you must ensure that nothing you're moving over from your workspace contains references from your workspace. To bring all nodes (except system nodes) into the supertags, fields and commands you want to move, use the command "Bring referenced node here". Alternatively, you can move each necessary node separately too if you for example want the field definition to exist outside the supertag. But the key is that everything that is connected to what you're sending over gets sent over too, otherwise there will be missing pieces. Related docs: - [Supertags](/docs/supertags) - [Workspaces](/docs/workspaces) - [Fields](/docs/fields) - [Command nodes](/docs/ai-command-nodes) . - What does this warning mean: "Fields nested under other nodes or fields will not work as expected"? Sep 27, 2024 Copy link ![](https://cdn.sanity.io/images/rfb95wph/production/08a0d0d1ea67712c7acb76d003730a6c19177403-1792x1008.png?w=3840&q=75&fit=clip&auto=format) This warning pops up in the supertag template when there are fields that are indented (another word for _nested_). There are several "expected" behaviours of fields in supertags that only work when they are first-level nodes in the template, such as (and not limited by) the following: - Searching for nodes based on their field values (all #tasks with Status::Complete) - Viewing the node as a table, with fields as columns - Using fields to build title using title expressions If you do not care for any of the above uses, you can safely ignore the warning. Related docs: - [Supertags](/docs/supertags) - [Fields](/docs/fields) . - What does the system field "Number of nodes with this tag" do? Sep 27, 2024 Copy link This system field is relevant only for supertag objects, and reveals the number of times a tag has been used. How to use it: - Make a search node with `IS TAG` - which will find all supertags in your graph - Display: Number of nodes with this tag It shows you how many nodes the tags have been applied to. Related docs: - [Fields](/docs/fields) - [Supertags](/docs/supertags) . - Can you have a different supertag applied to your day nodes based on a specific interval? Sep 27, 2024 Copy link ## [Background](#background) Recently the community discovered a peculiar thing was possible with regards to Calendar/Journal nodes. It was code that was put in a while back when we were thinking about how to revamp the calendar nodes, a project we had to shelf for other priorities. It was code that is the wee beginnings of how to do recurring calendar node templates. In the Journal node section of your settings, you'll see this: ![](https://cdn.sanity.io/images/rfb95wph/production/a79ca4ddd72191e10e038e1b8a8cce007dfab1e4-1296x729.png?w=3840&q=75&fit=clip&auto=format) There's an expression you can use to define intervals of when you want certain supertags applied to certain calendar nodes. It is loosely based on the [cron format](https://en.wikipedia.org/wiki/Cron#Cron_expression) (opens Wikipedia) In the field values for defining which supertag to use, you can nest the tags under a cron expression to have it apply only during a certain interval The expression takes on this custom format: `DAY-OF-MONTH` `MONTH` `DAY-OF-WEEK` `YEAR` ## [Legend: Cron format](#legend-cron-format) DAY-OF-MONTH - `1-31` MONTH - `1-12`, or `JAN-DEC` DAY-OF-WEEK - `MON-SUN`, or `1-7` YEAR - `2024` ## [Common syntax in cron](#common-syntax-in-cron) - `*` (asterisk) represents "every" possible value for that field. - `?` (question mark) is used to specify "no specific value" and is often used where the day of the month or day of the week should be ignored. - `,` (comma) is used to separate discreet values ## [How to use in Tana](#how-to-use-in-tana) Specify the cron expression as a field value, and nest the supertag you want used at that interval. ![](https://cdn.sanity.io/images/rfb95wph/production/afdd8909da9c6bb09d2042bf0da8f0b3853a5b27-913x513.png?w=3840&q=75&fit=clip&auto=format) ### [Here are some pattern examples from u/syncretizm on Reddit](#here-are-some-pattern-examples-from-u-syncretizm-on-reddit) Specific day of the week: - `? * FRI *` = Every Friday Only weekdays: - `? * MON-FRI *` = Every weekday Specific date in a month every year: - `31 12 * *` = Last day of the year Last day of any month: - `L * ? *` = Last day of the month Every day in a specified month: - `* 3 * *` = Every day in March ### [Here are even more patterns, courtesy of GPT](#here-are-even-more-patterns-courtesy-of-gpt) A specific day of every month: - `15 * * *` = The 15th day of every month. Specific days of the week throughout the year: - `* * MON,WED,FRI *` = Every Monday, Wednesday, and Friday of every week. First day of each quarter: - `1 1,4,7,10 * *` = January 1, April 1, July 1, and October 1. Last weekday of a specific month: - `LW * SEP *` = Last weekday of September. Specific day of the week in a specific month: - `* 11 FRI *` = Every Friday in November. A day near the end of the month, every month: - `L-3 * * *` = The third-to-last day of every month. An annual event on a specific day and month: - `14 2 * *` = Every February 14th. First Monday of every month: - `1-7 * MON *` = The first Monday that occurs between the 1st and 7th of every month. Specific day of the week, only in certain months: - `* JAN,MAR,JUL FRI *` = Every Friday in January, March, and July. A specific day if it is a weekday: - `5 * MON-FRI *` = The 5th of the month if it is a weekday. Skipping years for an annual event: - `10 10 * * 2023/2` = October 10th, starting in 2023 and every two years thereafter. > Note that it will only apply to all new day nodes once the rule is established. It will not apply to existing nodes. Related docs: - [Dates and calendar nodes](/docs/dates-and-calendar-nodes) - [Supertags](/docs/supertags) . - How can I bulk add/remove supertags? Sep 27, 2024 Copy link Select the nodes, then type # or use the command `Add tag` to add supertags to all selected nodes. Use the command `Remove tag` to bulk-remove supertags. Related docs: - [Supertags](/docs/supertags) - [Command line](/docs/commands) . - Can I show an alternative representation of a field value when building a title? Sep 27, 2024 Copy link Yes you can, with this kind of annotation: `${My field.Alternative}` Where `My field` is the field you want appearing in the title, and `.Alternative` is the name of the field within the field value you want to target instead. This is great whenever you, for example, want to swap out written-out states for emojis. ### [Example](#example) You have an Options field with some pre-determined options. For each option, add a field like Icon and put a different value for each. ![](https://cdn.sanity.io/images/rfb95wph/production/e4de4bbd5e78df8fffc6cdf1e5c2ef3861fac3a7-2780x1564.png?w=3840&q=75&fit=clip&auto=format) When writing out the title expression in the supertag configuration, use the 1. field name in the 2. title expression format, plus add the field (in this case, "Icon") you are targeting inside the field value which will 3. make the value of the new target field appear instead. ![](https://cdn.sanity.io/images/rfb95wph/production/7cd6662d858b08a9dcde5cc50509c9fa9e27362c-1734x512.png?w=3840&q=75&fit=clip&auto=format) You can go deeper with the targeting by adding more periods. So, you could have something like Field.Field2.Field3 for example. For more information on title expressions, check out [this section in the Supertag doc](https://tana.inc/docs/supertags#build-title-title-expression). Related docs: - [Fields](/docs/fields) - [Supertags](/docs/supertags) . - I'm unable to delete nodes/fields in the supertag config, what's going on? Feb 02, 2024 Copy link The tag might be extended, which means that it's inheriting fields from another tag. Check right above the supertag template to see if it has been extended: ![](https://cdn.sanity.io/images/rfb95wph/production/2a48026f351aa84e8cdb6d987632b81553e28219-1116x542.png?w=3840&q=75&fit=clip&auto=format) Related docs: - [Supertags](/docs/supertags) # Fields # Fields Fields store structured information in Tana. They provide additional details about nodes such as their status, launch dates, social media profiles, order numbers, attendees, comments - anything you want to consistently record in the same way, everywhere. ## [Overview](#overview) **Fields = Adds metadata to any node.** **Use fields to describe your data.** For a Person, you may add fields (prefixed with `>` ; this also creates a field in Tana) like `>Name`, `>Number`, `>Email`, `>Address`, `>Social media`, all of which helps organize information concerning that person. One way to check if a field is right, is to think "**has a**" when adding fields. A person _has an_ Email. A task _has a_ Due date. A movie _has a_ Release date. **Fields are like the columns of a database.** Every node is a database entry, and the fields are consistent information about that node. You'll see this when you use our [Table view](https://tana.inc/docs/views#table-view). **Fields can be added to any node** but even better is using our Supertags to create a template of fields you want applied every time you record a new `#person`, `#task`, or `#movie`. See [Supertags](https://tana.inc/docs/supertags) for more. **Fields help you resurface, sort, group and filter your information**. Find all your `#ideas` that have `>Topic`: Architecture. Filter `#movies` by `>Director`: Wes Anderson. Group `#books` by all `>Genres`. Tana has many ways of helping you surface just the right segment of information you need so you have a good overview, can make better decisions, and ultimately feel in control over the things you care about. ## [Basics](#basics) - There are two main components of a field: the field definition and the field value. The field definition includes the name and type of field, as well as its configuration. The field value is the actual value of the field, which can be manually input or automatically initialized when applying a supertag. - Other than being used to record metadata attached to nodes, fields are also used in defining the query for search nodes to narrow down searches by specific field values, such as finding all `#meetings` where `>Attendees` include the value "Jane Doe". Fields can also be searched directly by adding the field and the system field value SET, or by adding the field definition through `@[field name]`. - Fields show up differently depending on how the nodes they belong to are viewed. In List and Tabs view, fields are only visible when the node is expanded. In Table view, fields appear as columns. In Cards and Calendar view, fields can appear as metadata if selected from the Display option. See [Views](https://tana.inc/docs/views) for more info on how to use fields in each view. - To configure a field, press on its icon to open a side panel with all field configurations. ## [Documentation](#documentation) ### [Creating a field](#creating-a-field) Creating a field anywhere is simple: 1. Stand on an empty line 2. Type \> to create a new field 3. Give the field a name, or select from existing ones 4. Hit tab to fill in its value 5. To further configure the field, click on the field icon or use the shortcut Cmd/Ctrl + K and select "Configure Field". When in the [Supertag configuration](https://tana.inc/docs/supertags#configure-a-supertag), fields can also be created by using the \+ Create Field button or by typing \> as described above. ### [Deleting a field](#deleting-a-field) Before you delete a field, consider whether it has been applied to any nodes or supertags. In the field configuration panel, scroll down and see the stats on how many nodes and supertags it’s been applied to. - If you have used it on 0 nodes/supertags, it’s safe to just delete the field. If you have used it on 1 or more nodes/supertags, consider finding and untagging them before deleting, or if it’s being replaced by another field, merging the old field with the new field. - When you delete a field that is applied to other nodes, these field will show a trash can icon. This follows our principles about _deleting Nodes, Supertags, and Fields that have references elsewhere_, which states that Tana will never delete data that is indirectly associated with another element that you delete. #### [To delete a field:](#to-delete-a-field) - Option 1: Go to Field configuration panel. At the bottom there’s an action to Delete the field. - Option 2: Find the original Field definition and delete it. ### [Configuring a field](#configuring-a-field) #### [To open the config panel:](#to-open-the-config-panel) - Option 1: On the field you want to configure, press on the field icon - Option 2: Go via command line and press Cmd/Ctrl+K > Configure field ### [Field types](#field-types) There are nine field types in Tana: - [Plain](https://tana.inc/docs/fields#plain-field-type) - [Options](https://tana.inc/docs/fields#options-field-type) - [Options from supertag](https://tana.inc/docs/fields#options-from-supertag-field-type) - [Date](https://tana.inc/docs/fields#date-field-type) - [Number](https://tana.inc/docs/fields#number-field-type) - [Tana user](https://tana.inc/docs/fields#user-field-type) - [URL](https://tana.inc/docs/fields#url-field-type) - [Email](https://tana.inc/docs/fields#email-field-type) - [Checkbox](https://tana.inc/docs/fields#checkbox-field-type) **Data Validation:** Based on their type, Tana will validate their contents. There are no consequences for storing information that doesn't conform with the validation rules, except for the warning that will appear in the field itself. #### [Plain field type](#plain-field-type) **Plain** is the most flexible type of field. It acts just like any other place in Tana where you can write anything. Ideal for data that is unlikely to be repeated (e.g., Bug description) or does not need data validation (Options, Dates, Emails, URLs, etc.). - [Auto-initialize](#auto-initialize) - [to value from ancestor with this field](#auto-initialize-to-value-from-ancestor-with-this-field) - [Required](https://tana.inc/docs/fields#required) - [Hide field](https://tana.inc/docs/fields#hide-field) - [AI-enhanced field](https://tana.inc/docs/fields#ai-enhanced-field) - [Used in](https://tana.inc/docs/fields#used-in) - [Delete](https://tana.inc/docs/fields#delete) - [Commands (in Advanced)](https://tana.inc/docs/fields#commands-in-advanced) - [Page size (in Advanced)](#page-size-in-advanced) #### [Options field type](#options-field-type) **Options** let you choose from a preset of options you can select from in a dropdown menu. The presets can be defined beforehand, or auto-collected as new values are added. - Pre-determined Options: Define options directly in the field configuration. Each node becomes an option and can be reference nodes. Nested nodes are not visible. - Sources of Options: Pull in one or more nodes whose child nodes you want to populate the options list. Nodes can be created straight in the field configuration, added as a Reference to a list of static nodes, or a custom [Search node](/docs/search-nodes). - Auto-collect Values: Turned on by default on this field type. It automatically adds new values to the option list to make it easy to reuse values. - [Auto-initialize](#auto-initialize) - [to value from ancestor with this field](#auto-initialize-to-value-from-ancestor-with-this-field) - [Required](https://tana.inc/docs/fields#required) - [Hide field](https://tana.inc/docs/fields#hide-field) - [AI-enhanced field](https://tana.inc/docs/fields#ai-enhanced-field) - [Used in](https://tana.inc/docs/fields#used-in) - [Delete](https://tana.inc/docs/fields#delete) - [Commands (in Advanced)](https://tana.inc/docs/fields#commands-in-advanced) - [Page size (in Advanced)](#page-size-in-advanced) - Field has semantic function: See [Semantic Function](https://tana.inc/docs/semantic-function) (coming soon) #### [Options from supertag field type](#options-from-supertag-field-type) (Name updated from "Instance") Options from supertag creates a list based on nodes with a chosen supertag. Writing in a new value will prompt Tana to suggest that it be tagged with the same supertag. - Supertag: The chosen supertag will be suggested for new values. Nodes with this supertag will become available as options. - [Auto-initialize](#auto-initialize) - [to ancestor with this supertag](#auto-initialize-to-ancestor-with-this-supertag) - [to random node with this supertag](#auto-initialize-to-random-node-with-this-supertag) - [to value from ancestor with this field](#auto-initialize-to-value-from-ancestor-with-this-field) - [Required](https://tana.inc/docs/fields#required) - [Hide field](https://tana.inc/docs/fields#hide-field) - [AI-enhanced field](https://tana.inc/docs/fields#ai-enhanced-field) - [Used in](https://tana.inc/docs/fields#used-in) - [Delete](https://tana.inc/docs/fields#delete) - [Commands (in Advanced)](https://tana.inc/docs/fields#commands-in-advanced) - [Page size (in Advanced)](#page-size-in-advanced) - Field has semantic function: See [Semantic Function](https://tana.inc/docs/semantic-function) (coming soon) #### [Date field type](#date-field-type) **Date** fields accept Tana dates that link to the Day node. Press space or use @ to enter a date. Click on the date to change it or right-click for options like _Go to day node_ and _Open day node in new panel_. - [Auto-initialize](#auto-initialize) - [to current date](#auto-initialize-to-current-date) - [to date of ancestor day node](#auto-initialize-to-date-of-ancestor-day-node) - [to value from ancestor with this field](#auto-initialize-to-value-from-ancestor-with-this-field) - [Required](https://tana.inc/docs/fields#required) - [Hide field](https://tana.inc/docs/fields#hide-field) - [AI-enhanced field](https://tana.inc/docs/fields#ai-enhanced-field) - [Used in](https://tana.inc/docs/fields#used-in) - [Delete](https://tana.inc/docs/fields#delete) - [Commands (in Advanced)](https://tana.inc/docs/fields#commands-in-advanced) - [Page size (in Advanced)](#page-size-in-advanced) #### [Number field type](#number-field-type) **Number** fields accept numbers only. This enables calculations in table view and allows setting max. or min. values of digits. - Minimum value: Define the lowest value of the validation range - Maximum value: Define the highest value of the validation range - [Auto-initialize](#auto-initialize) - [to value from ancestor with this field](#auto-initialize-to-value-from-ancestor-with-this-field) - [Required](https://tana.inc/docs/fields#required) - [Hide field](https://tana.inc/docs/fields#hide-field) - [AI-enhanced field](https://tana.inc/docs/fields#ai-enhanced-field) - [Used in](https://tana.inc/docs/fields#used-in) - [Delete](https://tana.inc/docs/fields#delete) - [Commands (in Advanced)](https://tana.inc/docs/fields#commands-in-advanced) - [Page size (in Advanced)](#page-size-in-advanced) #### [Tana user field type](#tana-user-field-type) Note: This field changed names from User to Tana user in [Week 7 / 2024](https://tana.inc/releases/2024-wk7)) **Tana user** fields prompt you to put in a user of the workspace with @, like @Olav Sindre Kriken in the Tana workspace. - [Auto-initialize](#auto-initialize) - [to current user](#auto-initialize-to-current-user) - [to value from ancestor with this field](#auto-initialize-to-value-from-ancestor-with-this-field) - [Required](https://tana.inc/docs/fields#required) - [Hide field](https://tana.inc/docs/fields#hide-field) - [AI-enhanced field](https://tana.inc/docs/fields#ai-enhanced-field) - [Used in](https://tana.inc/docs/fields#used-in) - [Delete](https://tana.inc/docs/fields#delete) - [Commands (in Advanced)](https://tana.inc/docs/fields#commands-in-advanced) - [Page size (in Advanced)](#page-size-in-advanced) #### [URL field type](#url-field-type) **URL** fields store URLs/external links. - [Auto-initialize](#auto-initialize) - [to value from ancestor with this field](#auto-initialize-to-value-from-ancestor-with-this-field) - [Required](https://tana.inc/docs/fields#required) - [Hide field](https://tana.inc/docs/fields#hide-field) - [AI-enhanced field](https://tana.inc/docs/fields#ai-enhanced-field) - [Used in](https://tana.inc/docs/fields#used-in) - [Delete](https://tana.inc/docs/fields#delete) - [Commands (in Advanced)](https://tana.inc/docs/fields#commands-in-advanced) - [Page size (in Advanced)](#page-size-in-advanced) #### [Email field type](#email-field-type) **Email** fields store email addresses. - [Auto-initialize](#auto-initialize) - [to value from ancestor with this field](#auto-initialize-to-value-from-ancestor-with-this-field) - [Required](https://tana.inc/docs/fields#required) - [Hide field](https://tana.inc/docs/fields#hide-field) - [AI-enhanced field](https://tana.inc/docs/fields#ai-enhanced-field) - [Used in](https://tana.inc/docs/fields#used-in) - [Delete](https://tana.inc/docs/fields#delete) - [Commands (in Advanced)](#commands-in-advanced) - [Page size (in Advanced)](#page-size-in-advanced) #### [Checkbox field type](#checkbox-field-type) **Checkbox** fields show the field value as a checkbox toggle instead of a field you can write in. They output Yes/No values. - [Auto-initialize](#auto-initialize) - [to value from ancestor with this field](#auto-initialize-to-value-from-ancestor-with-this-field) - [Hide field](https://tana.inc/docs/fields#hide-field) - [AI-enhanced field](https://tana.inc/docs/fields#ai-enhanced-field) - [Used in](https://tana.inc/docs/fields#used-in) - [Delete](https://tana.inc/docs/fields#delete) - [Commands (in Advanced)](#commands-in-advanced) - [Page size (in Advanced)](#page-size-in-advanced) ### [Field configurations](#field-configurations) #### [Auto-initialize](#auto-initialize) A field setting that specifies how their content should be autofilled when a supertag is added to a node. Auto-initialization allows fields to be filled out based on the context of their creation - when they were created, where in the graph they were created, who created them, and so on. This is different from setting default values to fields in the [supertag config panel](https://tana.inc/docs/supertags), which are static. Good to know: - **Initialization expressions are convenience functions, but are not live updating.** So they won't change any prior field values from before you created the initialization functions, and you can change them after Tana fills a field if they need a manual touch. - **This is only triggered for fields that are part of a Supertag template.** Auto-initialize will not work for fields that you use otherwise. - **Initialization is only triggered when a node gets the supertag applied to it.** If the supertag gets updated with a field with initialization switched on, and the supertag was already applied to nodes, these nodes will only see the field added without any content initialized in it. (From the archive: Stian's [original demo](https://share.cleanshot.com/MpkdPc) (October 2022) on how Auto-initialization works. May have outdated info.) #### [—Auto-initialize to value from ancestor with this field](#auto-initialize-to-value-from-ancestor-with-this-field) Available on all fields. Copies the field values from the identical field on a node earlier in the tree. - Example 1: You could have a #quote tag with an Author field, and it could automatically initialize with the value from the Author field of the #book that it is nested underneath. - Example 2: You could have a "Related Project" field for your tasks, and then any nested subtasks would automatically have the same related project. #### [—Auto-initialize to ancestor with this supertag](#auto-initialize-to-ancestor-with-this-supertag) Only available on Options from supertag fields. Grabs a reference to the first node with this tag that it can find earlier in the tree. - Example: You could have a #quote tag with a Source field, which is an instance of #source. If you tag a #quote nested underneath a #source node, this function would auto-populate the field accordingly. #### [—Auto-initialize to random node with this supertag](#auto-initialize-to-random-node-with-this-supertag) Only available on Options from supertag fields. Grabs a reference to one or more random nodes with this supertag. - Example: You could have #JournalingPrompts and have three show up in a "Today's Prompts" field in your #Journal nodes. #### [—Auto-initialize to current date](#auto-initialize-to-current-date) Only available on Date fields. Adds today's date to the field. - Example: You tag your workout logs and want to record the day you logged it. #### [—Auto-initialize to date of ancestor day node](#auto-initialize-to-date-of-ancestor-day-node) Only available on Date fields. Adds the date that corresponds to an ancestor #day node that a node with this field would be owned by. - Example: In your daily node for next Tuesday, you tag a meeting. A date field with this initialization expression would be set to next Tuesday. #### [—Auto-initialize to current user](#auto-initialize-to-current-user) Sets the value as the user who triggered the creation of the field. Note: _Auto-initialize to current user_ is a bit of a stub and there's not much you can do with this information currently. It will be picked up again for development once we start focusing on collaboration and teams. #### [Required](#required) If switched on, will give a warning when field has no value. The warning is visual only and has no consequence. #### [Hide field](#hide-field) Minimizes the field when part of a supertag. - Never (default): Field is never hidden - When empty: Field is hidden when it has no value - When not empty: Field is hidden when it has a value - When value is default: Field is hidden when populated with template value from supertag - Always: Field is always hidden #### [AI-enhanced field](#ai-enhanced-field) Adds optional AI assistance for filling in this field, based on the name, description and contents of the parent node. #### [Used in](#used-in) - \[number of\] nodes: indicates the number of nodes where this field is used. Clicking this will open a new search for all nodes with this field. - \[number of\] supertags: indicates the number of supertags that use this field in its template. Clicking this will expand the list of supertags. #### [Delete](#delete) You can delete the field from here. #### [Make it discoverable](#make-it-discoverable) Old: Move to Schema **Question: Should you move a field to the schema?** The place you _create_ a field becomes the primary instance of this field which carries the field definition. This can be anywhere in the graph, including inside Supertag configurations. If you delete the field definition or its owner, and you used the field in other places, they will now appear with a trash icon alongside the name. This is intentional to prevent data from being unintentionally deleted. Tana Template consideration: Sometimes you want the fields to live in the supertag they were created in, so if you clone the supertag definition, it clones all the fields as well. If the fields were referenced, they would remain a reference in the cloned version, which is often not desirable. **But for most situations, to better preserve the fields you create it's recommended to move them to the Schema.** Also, field definitions owned by the schema have priority when searching for fields. #### [Commands (in Advanced)](#commands-in-advanced) Adding one or more commands here will add buttons to the field that will trigger the command upon being pressed. See [Commands](https://tana.inc/docs/commands) for how to create and configure commands. #### [Page size (in Advanced)](#page-size-in-advanced) By default, a list of nodes will start to paginate at 100 items. Here you can configure another maximum number before nodes get put on the next page. ### [System fields](#system-fields) Tana has several different types of system fields. **Calculated system fields:** Every node in Tana has calculated properties stored in these fields. To see a table of them, [go here](https://tana.inc/docs/nodes-and-references#node-properties). **System-defined fields:** Some fields are defined on the global level. - Date field: When dragging nodes onto a calendar view, Tana adds a field to the nodes to store the date/time information. - Due date field: More on that [here](https://tana.inc/faq/should-i-use-the-due-date-field) ### [Field definition](#field-definition) The field definition is a special node that stores the settings of a field. A field definition (1) versus a field (2) looks like this: ![](https://cdn.sanity.io/images/rfb95wph/production/76f73333f9da377e06310b797891c5ce6224909b-988x380.png?w=3840&q=75&fit=clip&auto=format) You can find it by putting your cursor in the field name, then press copy (Cmd/Ctrl+C) and put your cursor on an empty node and paste (Cmd/Ctrl+V). Whenever you select an existing field to use, it is retrieving the settings from the field definition of that field. When you create a brand new field, the field definition for that field lives in the place it was first created. If a field is created in a supertag template, it will only appear there unless you make it discoverable. This sends the field definition to the Schema. ### [Fields used in Search Nodes](#fields-used-in-search-nodes) See [Search nodes](https://tana.inc/docs/search-nodes) ### [Merging fields](#merging-fields) See [Merging duplicate nodes](https://tana.inc/docs/nodes-and-references#merging-duplicate-nodes) Copy link Rate article ## Related release notes [See all](/releases) - ImprovedYou can now toggle whether a field should be included in autofill or not (by default, all fields are included) from the field on a tagged node (with only one tag), or from the template section on the tag config, using both command line, node toolbar, and right-click context menu. [(2025 / wk 5)](/releases/2025-wk05) - ImprovedImproved language prompt for autofill: We made it less likely that autofill will suddenly switch to another language. [(2025 / wk 5)](/releases/2025-wk05) - NewExtract tagged items-fields: You can now specify "Extract tagged items" for autofill on a field, or on a tag (for the Content section). This will attempt to extract a number of items of the same kind, with a certain tag, and run autofill on them as well. [(2025 / wk 5)](/releases/2025-wk05) - FixedFixed bugs where newly created fields showed empty for Field type, and showed that Semantic function was turned on (it wasn't actually, the display was wrong) [(2025 / wk 03)](/releases/2025-wk03) - FixedExclude references to nodes from node filter from auto-collected options on option fields. [(2025 / wk 02)](/releases/2025-wk02) - NewGamechanger?? New commands to be run on tag template: "Convert template node to field" + "convert template field to node". What this does: Inside the content section of a supertag config, you can now convert fields to nodes, and nodes to fields. These will update the tag template / 'content', and all nodes that have already been tagged and 'initialized' with this tag template. Fields with values / content will be turned into nodes with children, nodes with children will be turned into fields with values. [(2024 / wk 47-49)](/releases/2024-wk47-49) - NewThere is now a command to update existing instances when you change the default field value in a tag template [(2024 / wk 47-49)](/releases/2024-wk47-49) ## Related FAQs [See all](/faq) ## Question - In the command line, Set \[field\] -> \[value\] doesn't show all my fields, why? Sep 27, 2024 - Why is my field not auto-initializing? Sep 27, 2024 - Should I use the DUE DATE field? Sep 27, 2024 - How can I bulk set a value to fields? Sep 27, 2024 - How do I share a supertag from my private workspace to a shared one? Sep 27, 2024 - What does this warning mean: "Fields nested under other nodes or fields will not work as expected"? Sep 27, 2024 - How do I bulk delete a field and its values? Sep 27, 2024 - What does the system field "Number of nodes with this tag" do? Sep 27, 2024 - Can I show an alternative representation of a field value when building a title? Sep 27, 2024 - What are field definitions and how do I find them? Sep 27, 2024 - How do I set up relationships between nodes? Mar 18, 2024 ## Examples - How can I find nodes based on a field value of an ancestor? Sep 27, 2024 Copy link There is no way to build a search that is able to read the fields of an ancestor node. But, using title expressions, you can grab the field value of an ancestor node and have it part of the title of the node you're running the search on, making that information searchable. TLDR: Use the `${sys:owner}` title expression to pick up content from ancestor nodes and their fields. This solution is great for Readwise users and came about when Maggie from the community wanted to search her Readwise highlights by the tags of the article/book it was taken from. To do this, use `${sys:owner.Field}`, and repeat `sys:owner` as many levels up as you need to go to target the right ancestor. In the case of Readwise highlights, you usually need to go up two levels. Check out the demo video: Now with the information you need from the ancestor node baked into the title of the highlight itself, it can be used to search and filter those nodes. While this solution came up in the context of the Readwise integration, it is a reusable pattern that can be applied elsewhere. Related docs: - [Readwise integration](/docs/readwise-integration) - [Supertags](/docs/supertags) - [Fields](/docs/fields) # Search nodes # Search nodes Search nodes give you the power to find anything, anywhere in Tana. They are easy to make, and can exist anywhere you can add a node. The many search operators available put advanced tools in your hands to create very specific searches according to your needs. > Last updated: October 2024 ## [Overview](#overview) **Search nodes retrieve nodes from any workspace you have access to.** Results show up as references to nodes. Editing these nodes will edit the original and every reference of it. **What a search node retrieves is based on the search query.** The query specifies what you are looking for, and is made in the [Query builder](https://tana.inc/docs/search-nodes#query-builder). **Search nodes have a magnifying glass as a bullet icon.** So they're recognizable even when collapsed. ## [Basics](#basics) - **Search nodes run queries on your Tana data.** Examples of queries include: - Look for recipes with specific ingredients: Find all nodes tagged `#recipes` with the field `Ingredient==Tomatoes, Peppers` - Look for filled-out Feedback fields under a draft: Find all nodes with field `Feedback==Set` that is `descendant of` the node `Q4 workplan draft` - Look for unfinished tasks with a date older than a specific date: Find nodes tagged `#todo` that is `NOT DONE`, and with a date that is `older (less) than January 10` - **Queries are composed in the Query builder.** The builder uses search operators that come in the form of Tana objects. All operators are listed here: [Search operators](https://tana.inc/docs/search-nodes#search-operators). For an explainer on how to read queries, check out [this article](/articles/tips-how-to-read-tana-queries). - **Search nodes only run when expanded.** This means they are not running live in the background while collapsed. - **You can add nodes via the list of results.** These nodes end up on the daily page of the workspace the search node lives in. It will try to create a node that follows the conditions of the query. If it isn't able to, it will show as a "mismatch". - **You can add a view to a search node.** You can apply views to all nodes that have children, including search nodes. - **Returned results are limited to a maximum of 2500 nodes.** If you run searches that return more than 2500 nodes, it will not run and you'll be prompted to change your query to narrow your search even further. ## [Details](#details) ### [Creating a search node](#creating-a-search-node) #### [Create a search node with a basic query](#create-a-search-node-with-a-basic-query) `Find nodes` in the command line guides you through a simple set of search terms: - Press Cmd/Ctrl+K > Find Nodes, then hit Enter and continue following the menu to specify what you're looking for. - Once you're done, choose the "show as list" option which will create the search node with the query pre-populated and as a list. You can always modify the query after it's been created through the command line by opening the [Query builder](https://tana.inc/docs/search-nodes#query-builder). If you want to create an empty search node to have access to all options immediately, see the next section: #### [Create a search node with empty query](#create-a-search-node-with-empty-query) - On any node, type ? , then click on the ✨Create search node button. - The [Query builder](https://tana.inc/docs/search-nodes#query-builder) will open immediately upon creation. #### [About queries](#about-queries) - A search node filters results based on its query. - A query consists of one or more conditions that must be met in order for results to show up. - The queries can be seen by opening the [Query builder](https://tana.inc/docs/search-nodes#query-builder). ### [Deleting a search node](#deleting-a-search-node) - Like with regular nodes, to delete a search node use right-click on the node and select "Delete node/reference", or use Cmd/Ctrl+Shift+Backspace - Treat a search node like you would [deleting nodes and references](https://tana.inc/docs/nodes-and-references#deleting-nodes-and-references). ### [Query builder](#query-builder) ![](https://cdn.sanity.io/images/rfb95wph/production/eba085ff8971455ac5d1b7c87bec551c934d498c-1635x696.png?w=3840&q=75&fit=clip&auto=format) 1. The query builder (formerly "search expression") popup 2. Area for composing the query 3. Easy access to search operators, field values, system fields and more 4. Linter that shows current query written out as plain code 5. "Run once" refreshes results while the builder is still open, and "Done" closes builder and refresh results) #### [AND wrapper](#and-wrapper) The entire query is wrapped in an AND operator, so by default every search criteria on the the query will return results that match every condition. For example, the screenshot below is looking for all nodes tagged `#todo`, AND it has to be `NOT DONE`, AND with a date that is `older (less) than January 10` . Nodes have to meet all criteria listed. ![](https://cdn.sanity.io/images/rfb95wph/production/51bdf01c17edd9541da8902ee525ae6d271767e5-1502x866.png?w=3840&q=75&fit=clip&auto=format) ### [Search operators](#search-operators) Below is the full list of all operators that work in the query builder. #### [Nodes and text](#nodes-and-text) Tana objects that can be used in the query builder: OPERATOR DESCRIPTION LINTER A reference Inserting a reference will return only descendants of the reference. Tip: Reference a Workspace to limit results to nodes that live in that Workspace only. DescendantOf:nodeName A supertag Inserting a supertag reference will return only instances of that supertag. Type # and a list of supertags will pop up. Tag:tagName A field definition Inserting a field definition will return only nodes that have this field, and a value set for it. hasField:fieldName A field with one or more values Inserting one or more plain text or reference values in a field will return nodes with this field that contain any of these values. fieldName==Hello world A plain text node Inserting a plain text node that is not a reference will return nodes that match the text. StringMatch:"hello world" A node with a date Inserting a date will return nodes whose name contains a date DateWithin:date A regular expression between /.../ Inserting a regular expression between the two forward slashes will return nodes that match the regular expression. RegexpMatch:/yourRegEx/ #### [Field operators](#field-operators) Add values to these fields to configure them. OPERATOR DESCRIPTION LINTER \>AND All of the clauses in the field values should match. AND is implied at the top level of the query builder as well. AND \>OR Any of the clauses in the field values should match. OR \>NOT Negates a single clause (if you want to negate multiple, you need multiple NOT statements). NOT \>LT LT = Less than. The LT field value should be the field you want to query with a field value (a number/date). This finds nodes that have a value less than the value provided. Also works with dates. fieldName < fieldValue \>GT GT = Greater than. The GT field value should be the field you want to query with a field value (a number/date). This finds nodes that have a value greater than than the value provided. Also works with dates. fieldName > fieldValue \>LINKS TO The LINKS TO operator finds all nodes that link to the reference in the field value. Only takes references or PARENT/GRANDPARENT. Similar to what is shown in a node's reference section. LinksTo:nodeName \>CHILD OF If the field value is a reference, the CHILD OF operator finds nodes/references that are children of the reference. If the field value is a field definition, the operator finds nodes/references that are children of this field. ChildOf:nodeName \>OWNED BY The OWNED BY operator finds nodes that are children of and owned by the reference in the field value. OwnedBy:nodeName \>DATE OVERLAPS Matches a date range that overlaps with the date provided #### [Keyword operators](#keyword-operators) Type these keywords into a first-level empty node in the query builder. #### [_Node type_](#node-type) OPERATOR DESCRIPTION LINTER IS TAG A keyword that finds any supertag definition. is:Tag IS FIELD A keyword that finds any field definition. is:Field IS CALENDAR NODE A keyword that finds year/week/day nodes under the calendar. Useful for excluding these from searches. is:CalendarNode IS SEARCH NODE A keyword that finds any search node. is:SearchNode IS COMMAND A keyword that finds any command node. is:Command IS PUBLISHED A keyword that finds any published node. is:PublishedNode #### [_Node contents_](#node-contents) OPERATOR DESCRIPTION LINTER HAS FIELD A keyword that finds any node with a field. has:Field HAS TAG A keyword that finds any node that has a supertag applied. has:Tag HAS MEDIA A keyword that finds any node with a media attachment (audio, video, or image). has:Media HAS AUDIO A keyword that finds any node with an audio attachment. has:Audio HAS VIDEO A keyword that finds any node with a video attachment. has:Video HAS IMAGE A keyword that finds any node with a image attachment. has:Image FOR DATE \[yyyy-mm-dd\] A keyword that finds all nodes with an inline reference to the date specified. FOR DATE 2023-10-18 #### [_Scope_](#scope) OPERATOR DESCRIPTION LINTER PARENTS DESCENDANTS A keyword that finds nodes that are descendants of the parent of the search node, excluding references. DescendantOf:parentnodeName GRANDPARENTS DESCENDANTS A keyword that finds nodes that are descendants of the grandparent of the search node, excluding references. DescendantOf:grandparentnodeName PARENTS DESCENDANTS WITH REFS A keyword that finds nodes that are descendants of the parent of the search node, including references. InTreeUnder:parentnodeName GRANDPARENTS DESCENDANTS WITH REFS A keyword that finds nodes that are descendants of the grandparent of the search node, including references. InTreeUnder:grandparentnodeName IN LIBRARY A keyword that finds direct children of a Library node. The Library is a default node in each workspace. in:Library ON DAY NODE A keyword that finds direct children of calendar day nodes. on:DayNode SIBLING NAMED "\[name\]" A keyword that limits the search to descendants of the named sibling. Example: SIBLING NAMED "Meeting notes". DescendantOf:siblingnodeName #### [_Checkbox_](#checkbox) OPERATOR DESCRIPTION LINTER TODO A keyword that finds all nodes with a checkbox, regardless if it is checked or not. is:Todo DONE A keyword that finds any checked todos. is:Done DONE LAST \[num\] DAYS A keyword that finds any todos that were manually checked within a certain number of days. Replace \[num\] with a number. Example: DONE LAST 7 DAYS. DONE LAST 3 DAYS NOT DONE A keyword that finds any "not done" nodes, and unchecked todos. Combine with TODO to only find unchecked todos. NOT is:Done OVERDUE An old keyword that finds any unchecked todos 1. using the system-defined Due Date field, and 2. with a date value that is older than today's date. For a more robust overdue search query, see Examples section below. is:Overdue #### [_Created/edited_](#created-edited) OPERATOR DESCRIPTION LINTER CREATED LAST \[num\] DAYS A keyword that finds any nodes created within a certain number of days. Replace \[num\] with a number. Example: CREATED LAST 7 DAYS. CREATED LAST 3 DAYS EDITED BY \[user email\] LAST \[num\] DAYS A keyword that finds any nodes modified by a Tana user within a certain number of days. Replace \[user email\] with the email of the workspace member, and \[num\] with a number. Example: MODIFIED BY olaf@tana.inc LAST 7 DAYS. EDITED BY USER@TANA.COM LAST 3 DAYS EDITED BY \[user email\] ANYTIME A keyword that finds all nodes modified by a Tana user. Example: MODIFIED BY olaf@tana.inc ANYTIME. EDITED BY USER@TANA.COM ANYTIME EDITED LAST \[num\] DAYS A keyword that finds all nodes edited within a certain number of days relative to today. Example: EDITED LAST 7 DAYS. EDITED LAST 3 DAYS #### [Field values](#field-values) Use these as field values: OPERATOR DESCRIPTION LINTER PARENT Use in any field. Inserts the parent node relative to the search node. Useful for finding nodes with fields that use the parent/grandparent node as a field value, such as every #author node finding all #books they're the >Author of. fieldName==parentnodeName GRANDPARENT Use in any field. Inserts the grandparent node relative to the search node. Useful for finding nodes with fields that use the parent/grandparent node as a field value, such as every #author node finding all #books they're the >Author of. fieldName==grandparentnodeName FOR RELATIVE DATE \[term\] Use on its own or in date fields. Inserts a date relative to today. Valid terms: yesterday, today, tomorrow, last/this/next week, last/this/next month, NEW: last/this/next year. Example: FOR RELATIVE DATE next week. Date==RelativeDate:term=yyyy-mm-dd \[timezone\] "Set" A system node you can use in any field. Finds nodes where this field exists and has a value. fieldName==Set "Not Set" A system node you can use in any field. Finds nodes where this field does not exist, or has no value. Warning: will find many nodes. fieldName==Not set "Defined" A system node you can use in any field. Finds nodes where a field is defined/used in a supertag template, but might still be empty. HasField:fieldName "Not Defined" A system node you can use in any field. Finds nodes where a field is not defined/used in a supertag template, or does not exist. Warning: will find many nodes. NOT HasField:fieldName #### [PARENT/GRANDPARENT (P/GP) field values](#parent-grandparent-p-gp-field-values) Other than inserting the parent/grandparent node relative to the search node, these values have additional features that apply to fields and dates: **They can point to a field on the P/GP node using _dot notation_.** Example 1: `PARENT.Description` will point at the Description field on the parent. Example 2: On a meeting node you could have a search to find other meetings for the related project of this meeting: - #meeting - \>Related project==PARENT.Related project **They can be used for date comparisons under any calendar node** Using `PARENT` in a search node under a week or year node can now be used for date comparisons such as “find all tasks completed this week”. These date items will get the right granularity (day vs. week/month/year) Also, PARENT that points at a date or a day/week/year node can do simple arithmetic. `PARENT-7` on a day node would get the day 7 days earlier, `PARENT+3` on a week node will get a date 3 weeks in the future. **_Dot notation_ and _date arithmetic_ can be combined in a field value** You can combine fields with date arithmetic, so `PARENT.Due date+3` will be replaced with a date 3 days ahead of the date in the Due date field. #### [Search operator examples](#search-operator-examples) Our Navigators have created a Tana Template full of search examples that allow you to interact with many of the operators below to see how they work. They cover the basics and will continuously be updated as we surface more useful examples from the community. Click below to save the resource in one of your Tana workspaces (opens a new tab): [Install: Tana Live Search Examples](https://app.tana.inc/?bundle=emi2eN1vNo.VFNHIFVV54) ### [Linter](#linter) #### [About the linter](#about-the-linter) In the [query builder](https://tana.inc/docs/search-nodes#query-builder), see marker 4 for the location of the linter. The linter uses simple "code" to display the query logic without the fluff of the query builder interface. By reading the output of the linter, you'll be able to tell if your query is configured as intended or not. You'll know because all search operators show up in the linter in very specific ways. For instance, the linter will often "transform" from one state to the other as you're adding or typing out the operators. These provide clear clues on whether the operators are correctly setup or not. See the column "Linter" in the list of [search operators](https://tana.inc/docs/search-nodes#search-operators) for what they should appear like in the linter if properly added. #### [Reading the linter structure](#reading-the-linter-structure) - A condition is a question you're asking of Tana. - Example: Find all tasks that are not done, and due today. - Search operators are used to compose these questions, using one line for each condition. In the linter, they will look like this: - `TODO` - `NOT DONE` - `Deadline < (RelativeDate:TODAY)` - All conditions get wrapped in parentheses: - `(TODO)` - `(NOT DONE)` - `(Deadline < (RelativeDate:TODAY))` - Every top-level condition gets separated by the AND operator, because it wraps the entire query builder: - `(TODO) AND (NOT DONE) AND (Deadline < (RelativeDate:TODAY))` - To use the OR or NOT operators, they are added within the top-level AND operator, nested queries with OR and NOT operators will appear like this: - `(TODO) AND (NOT DONE) AND (Deadline < (RelativeDate:TODAY)) AND ((Priority==P2) OR (Priority==P3)) AND (NOT Assigned to==Fei)` - The above query is asking the following: Find nodes that are unchecked, with Deadline before Today, P2s or P3s, and are not assigned to Fei. ### [Search results](#search-results) Tana will return results up to 2500 nodes. It is recommended to add more clauses to narrow down the results, and here are a couple of different ways of doing it: - **Limit by text match:** Type the text you want to find and it will filter the results based on node name match. This shows up as `(StringMatch: "xyz")` - **Limit by most recently created/edited:** Type `CREATED/EDITED LAST X DAYS` to only get nodes that have been recently created/edited. - **Limit by field value:** A _Status_ field can help you get only tasks that are `Next up`; an _Attendees_ field can help you find all meetings that had a specific `#person` in them; a _Dietary restriction_ field can find all your `vegetarian` recipes. ### [Examples](#examples) #### [Searches in day supertag template](#searches-in-day-supertag-template) Put a search node in a day supertag template that has a field referencing the PARENT (will show up as "Date: Today, Wed, Oct 18" in linter). This will create searches that find nodes with dates that refer to that day like events, tasks, birthdays. #### [Searches in supertag template](#searches-in-supertag-template) Put a search node in a supertag template that has a field referencing the PARENT (will show up as INSTANCE in the linter). This will make searches adapt based on the instance. Example: a #person supertag with a search node that looks for all meetings where this #person has attended. #### [Find overdue tasks (using any field)](#find-overdue-tasks-using-any-field) If your #tasks have checkboxes and a date field that signifies a due/do date, or deadline, you can build a query in your daily page (important) to find all tasks that are 1. unchecked, and 2. older than today. It will look like this: - #task - NOT DONE - \>LT: >Date: PARENT ![](https://cdn.sanity.io/images/rfb95wph/production/fb846c76627d8ddc8b25c784882e472f474aa863-1599x899.png?w=3840&q=75&fit=clip&auto=format) Copy link Rate article ## Related FAQs [See all](/faq) ## Question - Find all nodes that use a specific field Nov 29, 2024 - How can I find all nodes that have a specific word? Sep 27, 2024 - Should I use the DUE DATE field? Sep 27, 2024 - What is the difference between the Owner and a Parent of a node? Sep 27, 2024 - How can I search for content that is nested within one or more nodes? Mar 08, 2024 - I need help with date search! How do I do X? Feb 14, 2024 - How can I retrieve tasks dated for today? Jan 18, 2024 ## Examples - What is the difference between the field operator CHILD OF and the keyword operator PARENTS DESCENDANTS Sep 27, 2024 Copy link The search operators CHILD OF and `PARENTS DESCENDANTS` are similar, but have some key differences: - With CHILD OF, the target node is the node that you reference in it, and the results will only be direct children of the referenced node, including references - With `PARENTS DESCENDANTS`, the target node is the parent relative to the search node, and the results will match any descendant (children, grandchildren, great grandchildren etc.) of the target node, ignoring reference nodes - With `PARENTS DESCENDANTS WITH REFS`, the same as `PARENTS DESCENDANTS` except it includes reference nodes. ![](https://cdn.sanity.io/images/rfb95wph/production/fe5d048e2f7fb23d07facbb3396f14479cbd125f-1348x478.png?w=3840&q=75&fit=clip&auto=format) > Source of FAQ: [Tana Community Resource Hub](https://tana.pub/yOTwTH6wVoyE/tana-community-resource-hub), rewritten for clarity Related docs: - [Search nodes](/docs/search-nodes) . - How can I find all tags that extend a tag? Sep 27, 2024 Copy link One way is to create this search node: - \>system field Tags : #tag (use supertag that was extended) - `IS TAG` Example: ![](https://cdn.sanity.io/images/rfb95wph/production/9ffb67edd6de05fbbf06949534023d901da6192c-1072x1777.png?w=3840&q=75&fit=clip&auto=format) Related docs: - [Search nodes](/docs/search-nodes) - [Supertags](/docs/supertags) . - Can I create search nodes using Tana Paste? Sep 27, 2024 Copy link Yes you can: We have a basic syntax for this which you can [read about here](https://tana.inc/docs/tana-paste#search-node). Example of a task search: %%tana%% \- %%search%% Fei's tasks - OR:: - \[\[#task\]\] - \[\[#CS todo\]\] - Assigned to:: - \[\[Fei-Ling Tseng\]\] - NOT DONE When I paste the above, this is the result: ![](https://cdn.sanity.io/images/rfb95wph/production/9ed82f7723dcdec354098544a1e128417e951b50-1802x1014.png?w=3840&q=75&fit=clip&auto=format) Related docs: - [Tana paste](/docs/tana-paste) - [Search nodes](/docs/search-nodes) . - How can I get the Task list on my daily notes (back again)? Sep 27, 2024 Copy link You may have seen a Tana setup that had a task list on the daily notes page, or even had one from early prototypes from us, and it somehow disappeared now. There is a simple way to get it back. Go to any daily note, and make a search that looks for: 1. all `#task` nodes 2. `NOT DONE` Run it to confirm it's fetching the right things. Adjust how you want your tasks to look (Set all view options here, like Display, Group, Sort options) Confirm changes to the view options and the query. Right-click on the title of the search, and select Move to Related content. Here's a video showing the steps above: Related docs: - [Related content](/docs/related-content) - [Daily notes](/docs/daily-notes) - [Search nodes](/docs/search-nodes) . - How can I find references in one workspace that are owned by another? Sep 27, 2024 Copy link To find all references in a workspace that are owned by another workspace: 1\. Go to your workspace home 2\. Create this search _as a direct child_ of the workspace home node: - GRANDPARENTS DESCENDANTS WITH REFS - `>NOT` GRANDPARENTS DESCENDANTS To limit the search to specific workspaces, add the system field `Workspace` and specify the workspaces you want to target there. ![](https://cdn.sanity.io/images/rfb95wph/production/f98201f0282ff0c01a7e405bc94f942ba079280c-1871x1197.png?w=3840&q=75&fit=clip&auto=format) Related docs: - [Workspaces](/docs/workspaces) - [Nodes and references](/docs/nodes-and-references) - [Search nodes](/docs/search-nodes) . - How to find nodes with empty/not set descriptions Sep 06, 2024 Copy link You can use regex to find this: - Add a reference to the area you want to search within - \>NOT >Node description:: `/.+/` ![](https://cdn.sanity.io/images/rfb95wph/production/68db0795e23a9681da1313a01da0c22e5586db4a-1457x820.png?w=3840&q=75&fit=clip&auto=format) Related docs: - [Search nodes](/docs/search-nodes) - [Nodes and references](/docs/nodes-and-references) . - How to find URL nodes Sep 05, 2024 Copy link While there isn't a search operator to target URL nodes, they all use a system-defined node to store the URL. You can grab the field definition for it in one of the URLs. and it will retrieve all nodes that use this field, which will be mostly URL nodes. Note that the pasting of the `URL search` node into the search is to limit the search to only children within that node. Related docs: - [Search nodes](/docs/search-nodes) - [Node types](/docs/node-types) # Views # Views Transform your structured information in an instant by applying Views to them. Currently you can choose from List, Table, Cards, Calendar, Tabs and Side menu. ## [Overview](#overview) **Views = Different ways to arrange and visualize your information.** **Switching between views is like toggling the same data between a Microsoft Word to Excel document:** Changing views happens in a snap, and is effortless. Changing views doesn't undo the settings from the previous state; you can have several saved view states on the same set of information. **Views replace the traditional document:** Tana stores your information in an outline form—a document-agnostic way—that allows you to add views whenever you want and wherever you need it at the moment. ## [Basics](#basics) - Views work on nodes with children: This means they also work on [Search nodes](https://tana.inc/docs/search-nodes), as well as [Fields](/docs/fields). - **Add a view to any plain node**: Go to the node options (ellipsis button) and turn on "Show view options". This will visualize its child nodes in the selected view, and show a range of different options that change based on the chosen view. - **Available views include**: List, Table, Cards, Calendar, Tabs and Side menu. More are in development and being added on a regular basis. - **Granular control of what you see**: Customize your views through view options like Filter, Group, Sort and Display. These options give you a lot of control over what you see, and how you see it. Bonus: for long lists, use pagination to limit how many results you see at the time. ## [Details](#details) ### [Add/change/remove a view from a node](#add-change-remove-a-view-from-a-node) #### [Add a view to a node](#add-a-view-to-a-node) Add a view to a node using one of these methods: - Click on Node option ⋯ or right-click on the node bullet > Show view options - Command line: Cmd/Ctrl+K > Show view options, or Show as \[view\] This will bring up the View options next to the node. These view options apply to the child nodes, and the parent node becomes the "frame" that contains this view. #### [To change/remove view type](#to-change-remove-view-type) Change the view type using one of these methods: - Click on View options button > View as > \[list of options\] - Command line: Cmd/Ctrl+K > Show as \[view\] You can switch between any of the view types below. To remove and return to the default, choose "Discard all view options" ### [View types](#view-types) #### [List view](#list-view) **List view shows nodes in outline view**, with additional Filter/Sorting/Display capabilities that isn't possible without a view applied. Available View options: - [Filter](#filter) - [Group](#group) - [Sort](#sort) - [Display](#display) #### [Table view](#table-view) **The table view shows child nodes as rows and their fields as columns.** Add child nodes using the empty placeholder row at the bottom of the table, or add in-between rows using Enter at the end of any node on the left-most column like you're adding a node underneath it. Adding a column to a table adds a field to the node. If the table is showing results based on a supertag search, Tana will suggest incorporating the new field into the supertag definition. You can move columns around by: - Using the keyboard shortcut Cmd/Ctrl+Shift+Arrow Up to move to the left; Arrow Down to move to the right - Right-click the field header and choose Move column left/right **Calculations** Calculations are allowed in columns with numeric field type. Turn on by right-clicking on the field and choosing one of the options in the Calculation menu. When turned on, calculations show up on the bottom row. Filtering values will change the calculated value. Choose between the following calculations: - Sum: Adds all values up. - Average: Adds all values and divides by count. - Median: Sorts values and displays the value of the one that appears in the middle - Min: Shows the smallest value in the list - Max: Shows the largest value in the list - Count all: Counts all rows and returns this value - Count values: Counts all rows with numbers in them and returns this value - Count unique: Counts number of unique numbers and returns this value Available View options: - [Filter](#filter) - [Sort](#sort) - [Display](#display) #### [Cards view](#cards-view) **Cards view shows each child node as a card.** Add child nodes via the +Add button. Group by a field that contains data like Status, Dates, or Categories will arrange the cards in grouped columns, and you can drag cards between columns to change their Status, Date, or Category. Use Display to choose which fields are always shown on the bottom of the card. If a field contains an image, the image will fill the bottom of the card. Available View options: - [Filter](#filter) - [Group](#group) - [Sort](#sort) - [Display](#display) #### [Calendar view](#calendar-view) **The Calendar view shows nodes in one of three different time granularities: day, week and month.** It looks for a date field in each child node and plots it in the month/week/day view. Add child nodes by clicking in the calendar and creating a new entry. Flip between month/week/day by using the navigation arrows on the top right of the view. The calendar symbol in the middle takes you to Today's date. Child nodes without date information are set aside in a list called "\[number of\] nodes with no date >" at the bottom left of the calendar view. You can drag-n-drop these nodes into the calendar and this will add a date to an existing date field, or add a system date field if none other date field exists. Child nodes with two or more date fields will show in the calendar twice. You can control which dates to use in the "Date fields" view option. Available View options: - [Filter](#filter) - **Date fields:** Choose which date fields to turn on/off for all child nodes. - **Day length:** Choose the time range for agenda views. Default is 00:00 -> 24:00. - [Display](#display) #### [Tabs view](#tabs-view) **Tabs show each child node as a horizontal tab on the top that you can click to see its contents.** Add child nodes via the +Add tab button at the end of all the tabs. Move menu items around using the usual shortcuts for moving nodes up/down: Cmd/Ctrl+Shift+Arrow up/down Open menu items in a new panel by holding Cmd/Ctrl when you click on it. Each child node can have their own view options applied to show their contents differently. Applying Filter settings will change which tabs show up on the top bar. Available View options: - [Filter](#filter) #### [Side menu view](#side-menu-view) **Side menu shows each child node as a menu item to the left that you can click on to see its contents.** Add child nodes via the +Add button. Move menu items around using the usual shortcuts for moving nodes up/down: Cmd/Ctrl+Shift+Arrow up/down Open menu items in a new panel by holding Cmd/Ctrl when you click on it. Each child node can have their own view options applied to show their contents differently. Applying Filter settings will change which items show up on the menu bar. Available View options: - [Filter](#filter) ### [View options](#view-options) #### [Filter](#filter) - Available for all views. - A quick way to filter child nodes based on certain requirements. - **Filter by title:** Enter text to filter nodes based on matches in node titles. Doesn't look at field values or node contents. - **Field names**: Filter nodes based on their field values. #### [Group](#group) - Available for List and Cards view. - Allows you to group nodes based on values in user-defined fields or system fields. #### [Sort](#sort) - Available for List, Table and Cards view. - Lets you to sort child nodes based on any user-defined field or system field, in ascending or descending order. - Press the +add sort button to further apply sort criteria. Tana prioritizes sort requirements from the top going down the list. - Remove sort settings by pressing the minus button to the right of each sort. - Making changes to sort may require you to hit the Reapply sort button to see changes. - Hit the Reset button to remove all sort settings. #### [Display](#display) - Available for List, Table, Cards and Calendar view. - Lets you pick which fields you want to have values displayed from. - Values are displayed in the same style as Node descriptions: smaller grey font under the title of the node. ### [View options](#view-options) If you are in your private workspace, Tana will save what view you left it on last, along with the options you made. Options are saved per view, so even if you switch between views, it'll appear like the lsat time you looked at it. ### [Save view for everyone](#save-view-for-everyone) If you're in a Workspace with two or more members, you have the option to save default view settings that all will see as default. If any changes are made to the default setting by any member, they will see the green button to "Save for everyone", which will change the default saved view for everyone. You can change the view as much as you want without clicking on the "save for everyone" button, and Tana will remember your personal settings for next time. ### [Remove all view options](#remove-all-view-options) You can remove all view options, which will delete all saved view settings: - Command line: Cmd/Ctrl+K > Remove all view options ### [Pagination in views](#pagination-in-views) Any collection of child nodes have a limit of displaying 100 nodes before it turns on pagination. This is on by default to ensure speed and performance. You can adjust the number if needed, though this might affect performance. Pagination is set in node configuration. See [Nodes and references](https://tana.inc/docs/nodes-and-references) on how to control pagination through Page File. ### [Content widths](#content-widths) Tana shows content using different width settings, which depends on what view type is activated. All nodes are set on Auto, and you have the choice to override it. Access content widths in the dropdown on the top right corner of the panel. Options: - Auto: Switches between Medium and Full automatically. List view is set on Medium, the rest are set for Full. - Medium: Provides a focused writing experience by setting generous white space on either side of the content - Full: Expands content as wide as possible, filling the view. Copy link Rate article ## Related release notes [See all](/releases) - FixedFix HTML formatting in tabs view in Tana Publish [(2025 / wk 6)](/releases/2025-wk06) ## Related FAQs [See all](/faq) - How does the "Set view definition" command work? Sep 27, 2024 Copy link There is a command called `Set view definition`. It can set the Group, Sort and Display settings of a node view. There is no good UX for this at the moment, so the instructions are not conventional nor friendly for beginners. But right now, this is one way of doing it: - Mock up a node that will have sample child nodes representing the data you'll be applying this command on - Then, create the exact view settings you want with Group, Sort and Display. - Go Cmd/Ctrl+K > Debug Node on the parent node and look at Views for node: ![](https://cdn.sanity.io/images/rfb95wph/production/f95d33c1e677b8a6c7ef213d43f7c7f1113af91a-1554x956.png?w=3840&q=75&fit=clip&auto=format) - Clone the fields over to the command node so it looks like this: ![](https://cdn.sanity.io/images/rfb95wph/production/8e3f3332193615a348bb2882a1bf4aeeeccba959-1476x916.png?w=3840&q=75&fit=clip&auto=format) When you run this command on a node, this should change the view settings according to your configuration. Related docs: - [Views](/docs/views) - [Command nodes](/docs/ai-command-nodes) # Daily notes # Daily notes Your daily notes is your main scratchpad. Every day you get a clean slate. Make it a habit to work here, operating your day. Don’t think about files and folders – just think, type, tag, and trust that your thoughts and tasks are captured. > Last updated: November 5, 2024 ## [Overview](#overview) **The daily notes meet a very simple need: to be a quick catch-all for random things that come up in your day.** Later, you can choose to process and move it elsewhere, but only if you captured it first. **Daily notes are also a place to store data where the _time of entry_ is important.** Every workspace provides two modes of writing: by _hierarchy_ (on the home/library nodes), or by _time_ (daily notes). The daily notes would be a very logical place to keep things like logs, journals, agendas, and daily work lists. **Finally, use the daily notes for staging your day's work and getting in the right frame of mind.** Using the #day template, you can customize your day node to be the best companion for guiding you through your day. It's a place you can set and build habits, give yourself a random quote of the day, or remind yourself of your close-out routine when you're ready to sign off. **If you like starting your day with a clean kitchen counter, using Tana's time-based _daily notes_ are perfect for you.** (However, if you prefer having a workshop table where things stay _exactly_ the way you left them the night before, you may prefer working in hierarchy-based nodes, using dashboards in the Home/Library nodes and the Pinned section in the sidebar to orient yourself.) ![](https://cdn.sanity.io/images/rfb95wph/production/8e6989171179cf79a160f8e698745935813b43fa-2851x1604.png?w=3840&q=75&fit=clip&auto=format) Your daily notes ## [Basics](#basics) - **Every day is represented by one node.** There are also week/month/year nodes, which you can navigate to through the breadcrumbs. - **Day nodes are tied to Date objects.** This means that all nodes with the date of the day node appear in the reference section of the day node. See the documentation on [Dates and Calendar nodes](/docs/dates-and-calendar-nodes) for more. This page can be seen as an extension of the aforementioned, diving into more detail on the day node specifically. But all principles about calendar nodes apply to day nodes as well. - **Having a day supertag is _optional_.** Supertags on your day nodes are only needed if you want to build out a template for your day. For inspiration, our [Daily notes showcase](/articles/showcase-daily-notes) has many examples from the community of different daily notes setups. - **Nodes created in a search node** will be sent to the current day node. - **Nodes synced via Tana Capture** (and soon, mobile) appear on the current day node. - **Nodes you send to a shared workspace via the Move to \[workspace\] suggestion** will, by default, go to the day node of that workspace. ## [Details](#details) ### [Daily notes in your private workspace](#daily-notes-in-your-private-workspace) A freshly opened account will have the daily notes already set up and ready to go for you. Doing a [workspace "factory reset"](/articles/how-to-factory-reset-a-tana-account) will give you a workspace without daily notes, but it's super simple to get them back, with all the instructions in the linked resource. #### [How to find your daily notes](#how-to-find-your-daily-notes) - **Sidebar button:** `Today` - **Keyboard Shortcut:** Ctrl+Shift+D - **Command line:** `Open calendar for -> [pick a day]` - **Sidebar shortcut:** Option/Alt+Shift+Click on the workspace names - **On your workspace home node:** click on the Daily notes bullet #### [On Tana paid plans](#on-tana-paid-plans) Your private daily notes have a central role in the following features: #### [—Calendar integration: the Agenda](#calendar-integration-the-agenda) A Related content section called Agenda gets installed when you set up your calendar integration. It shows you your events for the day. #### [—AI chat: Save location](#ai-chat-save-location) All AI chats get saved to the day node under a node called AI chat. Tip: If you add a node called this to your supertag template, you can choose where the AI chats end up. Note that the template node has to be a direct child of the day node. ### [Daily notes in shared workspaces](#daily-notes-in-shared-workspaces) #### [How to find the daily notes of a shared workspace](#how-to-find-the-daily-notes-of-a-shared-workspace) - If on your own daily notes page: `Switch workspace` - Option/Alt+Shift+Click on your workspace in the sidebar #### [How to move nodes from your private to the shared workspace](#how-to-move-nodes-from-your-private-to-the-shared-workspace) There's a very easy workflow you can use to ensure that you start drafts of nodes in your private workspace, then when you're ready to let others see it, you can send it over easily. It uses the home workspace of a supertag to hint at where it ought to live. 1. In your private daily notes (or anywhere in your workspace), create a new node and add a supertag from the shared workspace 2. Hit Esc to toggle the node editor toolbar. The first option should be a prompt to move it to the workspace the supertag belongs to. 3. Click it to send the node to that workspace's day node, which leaves a reference in the original workspace. ![](https://cdn.sanity.io/images/rfb95wph/production/17e87b6c46043675bed976dba4bfc8ee118df5bf-1896x481.png?w=3840&q=75&fit=clip&auto=format) The node editor toolbar ### [Searching for nodes relative to your day node](#searching-for-nodes-relative-to-your-day-node) There are many ways to find things based on the day node, this is an overview with links to further descriptions. - Nodes that live on your day nodes - **Search term `ON DAY NODE`:** Restricts search to find any child of a day node - **System calculated field `>Date from calendar node`:** This system field will be automatically filled if it lives under/is a descendant of the day node. You can use it in search queries, and for sorting, filtering, grouping, or displaying in your [views](/docs/views). Note: This field is independent from the node's created and edited times. It will change if you move the node to another day node. - Nodes that mention the date of the day node - **Search term `PARENT`/`GRANDPARENT`:** To match a date in a field, use the P/GP terms as the field value to refer to the day node. The day node can only be one (`PARENT`) or two (`GRANDPARENT`) levels away from the search node. Tip: You can use `PARENT+3`/`PARENT-3` to find future/past dates relative to the target. - **Search operator `>DATE OVERLAPS`**: Used together with the above, this operator allows you to find nodes where the date values you're searching through overlaps with the target P/GP day node. Example: a date value of Nov 20 - Dec 5 will overlap with the Nov 29 day node. - **Search operators `>LT`/`>GT`**: Short for Less Than and Greater Than, with this you can create a more precise and wider range of dates you want to match than `>DATE OVERLAPS`. Use this with `P`/`GP` combined with the `+`/`-` for some very powerful searches. For more information on searching for dates, see the [Date searches](https://tana.inc/docs/dates-and-calendar-nodes#date-searches) section of the Dates and Calendar notes documentation, and also [this example](/faq/i-need-help-with-date-search-how-do-i-do-x) on common date searches. For further information on Search nodes, see [Search nodes](/docs/search-nodes) documentation. Copy link Rate article ## Related release notes [See all](/releases) - FixedFixed bug where Generate image was not available on calendar nodes [(2024 / wk 47-49)](/releases/2024-wk47-49) ## Related FAQs [See all](/faq) ## Question - Can I open the day node of another workspace by default? Sep 27, 2024 - How can I setup Unsplash banners on my daily notes? Sep 27, 2024 ## Examples - How can I get the Task list on my daily notes (back again)? Sep 27, 2024 Copy link You may have seen a Tana setup that had a task list on the daily notes page, or even had one from early prototypes from us, and it somehow disappeared now. There is a simple way to get it back. Go to any daily note, and make a search that looks for: 1. all `#task` nodes 2. `NOT DONE` Run it to confirm it's fetching the right things. Adjust how you want your tasks to look (Set all view options here, like Display, Group, Sort options) Confirm changes to the view options and the query. Right-click on the title of the search, and select Move to Related content. Here's a video showing the steps above: Related docs: - [Related content](/docs/related-content) - [Daily notes](/docs/daily-notes) - [Search nodes](/docs/search-nodes) # Command line # Command line Tana's command line gives you access to every possible action at your fingertips. ## [Overview](#overview) Tana has a **command line** that gives you access to all actions you can take in Tana. The command line is accessible via Cmd/Ctrl+K If you're looking for a modular system for creating and assembling custom commands, see [command nodes](/docs/command-nodes). ## [Documentation](#documentation) ### [Command line](#command-line) The command line can be launched from any node using the shortcut Cmd/Ctrl+K A modal pops up which you type into to search for available commands. #### [Essential commands](#essential-commands) Remind me Sends your node to a date of your choice, like tomorrow or a specific date Find nodes Gives you the possibility to set up list or tables based on time created, dates, information in fields and much more View as Show you quickly the different views from the command line Move to When you have a shared workspace, you can move a node there #### [A Tana backbone function: _Find nodes_](#a-tana-backbone-function) The **Find nodes** command gives every user the magical powers of developers, allowing you to create what would have been complex database queries, lightning fast and easy in one command: - find nodes with a specific tag, and view them in a list or table, like "**_Find nodes with tag #todo as list_**" - find nodes created within a certain timeframe "_**Find nodes created last 7 days as list**"_ - or combine them with "**_Find nodes with tag #todo created last 7 days as list_**" - find nodes with specific fields, and the values in these fields "_**Find nodes with tag #todo created last 7 days with field Owner=John Doe as list**"_ #### [Custom Keyboard Shortcuts](#custom-keyboard-shortcuts) You can define custom shortcuts for any command in the command line, all the way down to setting specific tags or field values. To trigger shortcut recording, open the command line, find the command you want to set a shortcut for, and hit Cmd/Ctrl+Shift+K. To remove custom keyboard shortcuts, go to Settings in the Home node or Cmd/Ctrl+K > Open Settings, and look under "Private keyboard shortcuts" for the custom shortcut you want to delete. ### [All commands](#all-commands) #### [Calendar](#calendar) COMMAND DESCRIPTION Remind me A reference of the selected node will be sent to daily page of choice Open calendar for → Open a daily page Show today node Opens today node in full page layout Set up day tag for this workspace Only runs on workspace node. Creates the journal tags and nodes on the workspace root. #### [Collaboration](#collaboration) COMMAND DESCRIPTION Notify @ → Sends a notification to target user's Notification menu #### [Export](#export) COMMAND DESCRIPTION Get html link to node Copies URL of node along with node contents Export plain html Opens a new browser html page of the selected node and contents #### [Fields](#fields) COMMAND DESCRIPTION Show \[Field\] → Switch on chosen hidden field Set Optional → Toggle whether the field is Optional or not (Yes/No) Set Cardinality → Toggle what Cardinality a field is (single value/list of values) Set Datatype → Set the type of data the field can contain Set Autocollect options → Toggle whether a field will autocollect values to populate options Set Hide field conditions → Toggle Hide state of a field Set Source supertag → Set Source supertag for all field values Create field Creates a field node #### [Filter](#filter) COMMAND DESCRIPTION Sort by Not Done → Done Changes sorting of search results Sort by date created, Old → New Changes sorting of search results Sort by date created, New → Old Changes sorting of search results Sort by name, A → Z Changes sorting of search results Sort by name, Z → A Changes sorting of search results Show completed items In a list of checkbox nodes, show checked items Hide completed items In a list of checkbox nodes, hide checked items #### [Global Interface](#global-interface) COMMAND DESCRIPTION Join collaborative space → Add workspaces you've been invited to Open sidebar node Open the node that drives the sidebar content Open layout node Open the node that saves all layouts (Tana Labs savedLayout) Open in new browser Opens node in a new browser instance Go back Goes back to previous location navigated from Open workspace → Open the home node of chosen workspace Open quick add Open quick add Hide sidebar Hides the left sidebar Toggle sidebar Set theme to dark mode Toggles dark mode theme on Set theme to light mode Toggles light mode theme on #### [Navigation](#navigation) COMMAND DESCRIPTION Open trash (deleted) Opens node where all deleted items go Open library Open your Library page Open settings Open your Settings page Open home node of current workspace Open your home node Open schema Open your schema, where definitions for supertags and fields live by default Create keyboard shortcut Dumps keyboard shortcut nodes for manual input (do same while navigating to command line option you want, then hit Cmd+Shift+K to auto-record a shortcut which gets saved in Settings) #### [Nodes and references](#nodes-and-references) COMMAND DESCRIPTION Move to → Brings up a list of predetermined locations to move a node to. Defaults are Home, Library and Today. Delete node Deletes selected node and sub-nodes in trash Clone Reference Convert a Reference node into a non-referenced node with all contents cloned Duplicate node Duplicates selected node Hard delete including references Deletes a node and all References. Inline refs and refs in other workspaces stay, but with trash icon. Show edit attribution Show Edit Attribution of node Hide edit attribution Hide Edit Attribution of node Hoist children to siblings Move child nodes to the same level as selected node Configure node Opens configuration for selected node Configure node (legacy) Opens legacy configuration for selected node Create URL node Creates a node that receives and specially formats URLs Lock node Locks a node from being edited Unlock node Unlocks a locked node Paste as code Pastes contents in a special formatting code node Add description Opens the description of the selected node Set move target Adds selected node to list of places when using Move command Select node Selects the whole node Copy full content to clipboard Copies all contents of selected node as indented plain text Select children Selects child nodes of selected node Iterate and convert URLs to URL nodes Finds nodes that are just URLs and converts them to Tana URL nodes Add contextual content Creates contextual content (child node, field, column) that only appears in this specific context; doesn't add data to the node generally Remove Reference Remove a reference node Get link to node Retrieves reference link to node. Same as Cmd+C in an open node #### [Outline editing](#outline-editing) COMMAND DESCRIPTION Indent nodes below Indents nodes below selected node Expand Expands the selected node's child nodes Expand all Expands the selected node's child nodes and all their ancestors Collapse Collapses the selected node's child nodes Collapse all Collapses the selected node's child nodes and all their ancestors Move up Moves selected node up Move down Moves selected node down Insert after Insert new node after selected node Insert before Insert new node before selected node #### [Panels and Layout](#panels-and-layout) COMMAND DESCRIPTION Zoom full page Selected node opens to full page layout Zoom in panel Selected node is opened within the current panel layout Open in new panel Selected node is opened in new panel Close this panel Close panel that your cursor is in Close panel Closes the active panel (when multiple panels are open) #### [Search](#search) COMMAND DESCRIPTION Find nodes Starts query builder Find todos within Retrieves todos from within the parent node Search within Searches within the contents of selected node via main search bar Create search node Create an empty search node. Also invoked by typing "?" on an empty node Open search Puts cursor in main search bar at top #### [Supertags](#supertags) COMMAND DESCRIPTION Add tag # Starts searching for existing supertags to add to active node Remove tag # Removes selected supertag from node Create supertag Convert the contents of a node to a supertag definition Insert current date and time Adds text of current date and time (YY-MM-DD hh:mm) Insert current time Adds text of current time (hh:mm) Create supertag based on content Use node and contents (nodes, fields) to create a supertag Edit supertag definition for \[supertag\] Opens supertag configuration Set default tag for children Choose which supertag gets applied to all new child nodes of selected node #### [Views](#views) COMMAND DESCRIPTION View as list Set view of child nodes as list View as cards Set view of child nodes as cards View as table Set view of child nodes as table Show view options Make view options bar appear Remove all view options Removes view settings from a node (if they exist). Also accessible via Configure Node (legacy) Add column Table view only: Creates column which will appear as a field within nodes listed in the table Add contextual column Table view only: Creates contextual column/field for nodes listed in the table Show column → Table view only: Switch on chosen hidden column Hide column Table view only: Switch off column Move right Table view only: Move column to right Move left Table view only: Move column to left Delete column and values Table view only: Delete column/field and its values Add calculation → Table view only: On a numeric field, add a calculation type Set \[Field\] → Table view only: Set a field option on one or more selected nodes with the same field #### [AI](#ai) COMMAND DESCRIPTION Ask AI Ask AI anything. Write your prompt in the node and run this command. Accesses default GPT model. Ask AI to → Ask AI to do a task, which will run on the node you are on, looking at both the node and context. Node must have content. Ask AI (creative) Same as Ask AI, but with higher temperature. Run AI fields Runs all AI-enhanced fields on a node. Generate image(s) with DALL-E Returns an AI-generated image using DALL-E. Copy link Rate article ## Related release notes [See all](/releases) - ImprovedHold Shift when executing "Hard delete including references" to skip the "Are you sure?" dialog. [(2025 / wk 02)](/releases/2025-wk02) - ImprovedYou can now reprocess a voice memo in the browser/desktop client by running the Cmd/Ctrl+K command "Reprocess voice memo". Useful if something went wrong or wrong language was selected. [(2025 / wk 02)](/releases/2025-wk02) - FixedFixed bug where command line commands for expand and collapse children were not available on some nodes [(2024 / wk 47-49)](/releases/2024-wk47-49) ## Related FAQs [See all](/faq) ## Examples - One command to toggle the related content section on/off Nov 13, 2024 Copy link > 🙏 Thanks to Navigator **Theo** for sharing how to implement this "focus mode" idea on Related content sections! For more stuff like this, join our community to share and learn about all things Tana 🫶 ### [Goal](#goal) You want to dial up your focus by hiding the Related content sections. ![](https://cdn.sanity.io/images/rfb95wph/production/d06ade1f7def058b84c32382140b54700cd73bb9-811x499.png?w=3840&q=75&fit=clip&auto=format) ### [Instructions](#instructions) #### [Build the single-command toggle](#build-the-single-command-toggle) [See this example on how to build it](/faq/one-command-that-toggles-the-checked-unchecked-state-of-a-field). Build the first section called "In the schema", then come back here. #### [Configure visibility of related content](#configure-visibility-of-related-content) To configure the related content sections you want to toggle the visibility on, each section will need a node filter where the checked state of the _is visible_ field determines whether they show up or not: - Navigate to the Related content section in the configuration: - For supertags, Cmd/Ctrl+Shift click on the tag itself - For nodes, run the command `Configure node` - For every related content section - Run the command Add contextual content on the related content nodes, and add `>Node filter:: >is visible:: true (checked)` ![](https://cdn.sanity.io/images/rfb95wph/production/d564a107bde6bf9692eabfe964d7a1c9f8d3cc1a-3088x2006.png?w=3840&q=75&fit=clip&auto=format) The system field Node filters on related content sections. #### [Testing](#testing) Test the command by running the _Toggle visibility_ command on the node. It should make the related content sections appear/disappear. Optionally, you can add the _Toggle visibility_ command to the node as a button, and then use that instead. 🙌 That's it! Related docs: - [Command nodes](/docs/ai-command-nodes) - [Command line](/docs/commands) - [Related content](/docs/related-content) . - A single command that toggles the checked/unchecked state of a field Nov 12, 2024 Copy link > 🙏 Credit goes to **Ulises RJ** and Navigator **Theo** for coming up with this elegant solution! Join our community to share and learn about all things Tana 🫶 ### [Goal](#goal) You want to build _one_ command that toggles the state of something, like a checkbox. The key that unlocks this is the obscure `Run commands in parallel` command, and this is an excellent use for it. The uses for a toggle are endless; this example will demonstrate how to build a visibility switch for command buttons. Let's call it the _single-command toggle_. **Note**: This is more like a proto-command, something that isn't useful on its own, but unlocks many creative uses. ### [Instructions](#instructions) #### [In the schema](#in-the-schema) 1. Create a checkbox field called _is visible_. 1. In the _Hide field_ setting, choose `Always` 2. Create a command node for checking the _is visible_ field: 1. Name: _visibility ON_ 2. Add node filter: `>NOT:: >is visible:: true (checked)` 3. Add command Set field values 4. In parameter `Fields to set: >is visible:: true (checked)` 3. Make another command node that removes the field: 1. Name: _visibility OFF_ 2. Add node filter: `>is visible:: true (checked)` 3. Add command Remove fields 4. In parameter `Fields to remove: is visible (field definition)` 4. Create a third command node for toggling between the two commands: 1. Name: _Toggle visibility_ 2. Add command Run commands in parallel 3. In the parameter `Commands to run`, add references to the two commands you created earlier 5. Test the command out: 1. On any node, run the command _Toggle visibility_. It should add the _is visible_ field to it, checked. Running it again should remove the field. ![](https://cdn.sanity.io/images/rfb95wph/production/e65a6d1e0ed8b7188418905bbff7edd1c0361e3a-2165x1901.png?w=3840&q=75&fit=clip&auto=format) Setup for the commands The commands are now ready to go. #### [Configure visibility of command buttons](#configure-visibility-of-command-buttons) To configure the commands you want to toggle the visibility on, each command will need a node filter where the checked state of the _is visible_ field determines whether they show up or not: - Create or find a node that has many command buttons you want to hide - For every command, add the `>Node filter:: >is visible:: true (checked)` - As you do this, the buttons should, one by one, disappear from the node. ![](https://cdn.sanity.io/images/rfb95wph/production/1f350542b43eba1400591750ec2bb9a4da47f9b1-1122x1107.png?w=3840&q=75&fit=clip&auto=format) A node filter applied to the command button #### [Testing](#testing) Test the command again by running the _Toggle visibility_ command on the node. It should make the buttons appear/disappear. 🙌 That's it! ### [Further ideas](#further-ideas) - **Bind a custom keyboard shortcut** to _Toggle visibility_ so you can easily toggle the visibility of buttons with the same keystrokes. See video above. - **Add the toggle command as a button:** then you can toggle things with a mouse-click instead - Use the same thing to [**toggle the visibility of related content**](/faq/one-command-to-toggle-the-related-content-section-on-off) sections Related docs: - [Command nodes](/docs/ai-command-nodes) - [Command line](/docs/commands) . ## Question - What are all the ways I can copy data out of Tana? Sep 27, 2024 - How can I bulk set a value to fields? Sep 27, 2024 - How can I bulk add/remove supertags? Sep 27, 2024 - How can I merge two or more nodes/fields/supertags? Sep 27, 2024 # Dates and Calendar nodes # Dates and Calendar nodes Dates in Tana give you the power to connect all your data in relation to time, and to resurface data that is the most important to you now. ## [Overview](#overview) **There are two important ways that Tana treats date information.** Date objects are a concept of time that you can link to, meanwhile a calendar node is a place in the graph you can write on that is related to a date. The two are intertwined but not the same. **Date objects can be mentioned on any node using @-mention.** They have flexible date granularities so you can be as broad or specific as you want to be, allowing you to say "meet Henry at 2:15pm tomorrow", as well as "yearly goal for 2024". **Calendar nodes are what drive your daily page.** They are automatically set up for days, weeks, months, and years, and allow you to take notes and set up searches that capture items in those date intervals. ## [Basics](#basics) ### [On date objects](#on-date-objects) - **Dates in Tana keep everything connected to time in your graph.** To reference date objects in Tana, use @ and write out the date/time you want in natural language. Try typing `@today` in Tana, and you'll see it bring up today's date. - **Tana has a date field type so you can add date information to any node.** You can use just the field under a node, or add them via supertag templates. - **Date objects allow for different date granularities.** Try typing `@November`, `@Wednesday last week`, or `@5pm next Saturday`. Once you have a date object, you can click it to bring up the date picker. - **A negative year is parsed as BC/BCE.** To know what it is in astronomical years, add one. Example: input "`-101`" = "`101 BC`" = "`-100`" in astronomical years ### [On calendar nodes](#on-calendar-nodes) - **Calendar nodes are the day/week/month/year nodes on the root of a workspace.** They're automatically generated for your private workspace, and can be generated for other workspaces too. They are connected to the dates they represent, so you can take notes connected to that date granularity, and it also retrieves references based on that. - **The Today page is a calendar node.** They exist within week nodes, that exists within year nodes. You can see all the calendar nodes in Tana by going to your Home page and expanding the Calendar. - **The supertag on a calendar node can be customized.** Create your own time-based templates for things like reviews, reminders, and logs. You don't need a supertag on your calendar nodes (they function just as well without them) but they're handy for making daily/weekly/monthly/yearly templates. Use the command "`create default day/week/month/year tag`" on the calendar node to create them. - **Tana has Month nodes.** Months do not appear as nodes under the Calendar node like Week/Day do, so you must navigate to months via the Today page, or from a date object with month granularity. - **Use search nodes with field values PARENT/GRANDPARENT on any calendar node.** This allows you to retrieve all nodes within a time span ie. a PARENT search on month will find all nodes with a specific date within that month ## [Documentation](#documentation) ### [Date objects](#date-objects) #### [To add a date on a node](#to-add-a-date-on-a-node) - Type @ and write out the date (or in natural language) what you want. Examples: "`today at 5pm`", "`Nov 15`", "`yesterday`", "`last month`", "`in two weeks`". #### [To add a date in a date field](#to-add-a-date-in-a-date-field) - To create a date field, see [Date fields](https://tana.inc/docs/fields#date-field-type) - Date fields show a small calendar icon on the right. - On an empty field, press the small calendar icon to the right, or hit space to insert today's date and bring up the date picker. #### [To open the date picker](#to-open-the-date-picker) - Using mouse: On any date object, click on it, or right-click > Show Calendar - Using keyboard: Select the date object and hit Enter #### [To change an existing date/time and granularity](#to-change-an-existing-date-time-and-granularity) - Via date picker: Click on the date object to bring up the date picker and click on a date to change it. For larger granularity, clear the selected date options by pressing the (x) in the corners. For smaller granularity select/input the finer granularity you want. - Change granularity: Arrow keys + Spacebar to add/change/remove granularities. Hit Enter/Esc to commit the changes. - Week granularity: Select a week as a date by clicking on the weeks to the left. - Using keyboard shortcuts on a selected date object: When a date object is selected, you can use these shortcuts to quickly change date and time: - Go forward in time = key, Go back in time = Shift+key - Keys - 5 minutes: J - 1 hour: H - 1 day: D - 1 week: W - 1 month: M - 1 quarter: Q - 1 year: Y - Increment by one granularity: +/\- keys. - Using command line on a selected date object: Run command line (Cmd/Ctrl+K) > Change date. - This command gives you the following options: - Switch granularities (day/week/month/year) - Add/remove time - Next minute/5min/hour/day/week/month/quarter/year - Previous minute/5min/hour/day/week/month/quarter/year - Change increment/decrement #### [To make a date range](#to-make-a-date-range) - In the date picker: add an end date using `add end`. Use `remove end` to remove the range. - In @-mention: Write `@[date] to [date]`. Example: `@Nov 21 to Nov 30` - In command node: see [Insert relative date](#insert-relative-date) ### [Calendar nodes](#calendar-nodes) #### [To reach your private day node/Today](#to-reach-your-private-day-node-today) - Using mouse: Use the Today button on the sidebar, or the Today button on every calendar node - Using keyboard: Ctrl+Shift+D - In the sidebar, Alt+click on your private workspace header, or expand the workspace and click on the calendar node. #### [To reach the day node of another workspace](#to-reach-the-day-node-of-another-workspace) - In the sidebar, Alt+click on the workspace header, or expand the workspace and click on the calendar node. - In your private day node, use the dropdown `Switch calendars` #### [To go to the calendar node from any date object](#to-go-to-the-calendar-node-from-any-date-object) - `Alt`+click the date object to navigate to that corresponding calendar node - Right-click > `Go to calendar date node`/`Open calendar date node in new panel` #### [To go to calendar nodes of higher level of granularity than the day node](#to-go-to-calendar-nodes-of-higher-level-of-granularity-than-the-day-node) - From a date object: If the date object references a higher level date granularity like `Week 45`, or `November 2023`, you can `Alt`+click to navigate to that corresponding calendar node - From a day node: The breadcrumbs at the top of calendar nodes show the different granularities. You can click to navigate to them. `✨NEW` You can also right-click the Today button under the title to navigate to this week/month/year. #### [To traverse between previous/next calendar node](#to-traverse-between-previous-next-calendar-node) - Using mouse: use the < / \> buttons right under the node title - Using keyboard: use Ctrl+\[ / \] to traverse to past/future calendar nodes of that granularity. #### [To create calendar nodes for other workspaces](#to-create-calendar-nodes-for-other-workspaces) - Unlike your private workspace, new workspaces do not come with default calendar nodes. - To create them, go to any existing calendar node like any one in you private workspace, then `change workspace` to a different one. - To add default tags, use the "`create default day/week/month/year tag`" command action. This can be accessed via the node options button to the right of the calendar node, or by running the command on the title of the node. #### [The reference section in calendar nodes](#the-reference-section-in-calendar-nodes) At the bottom of each node is a reference section. For calendar nodes, it will collect all nodes in the workspace that mention that particular date granularity, either mentioned in name or in a field. Example: week nodes will capture any node that have date objects using the `Week WW` granularity, month nodes will capture `November YYYY` granularity and so on. #### [Linking to calendar nodes](#linking-to-calendar-nodes) ### [Date searches](#date-searches) There are many search operators that are specifically designed to handle date queries, as well as general purpose numeric ones that work with date queries as well. #### [Search operators](#search-operators) #### [_LT/GT_](#lt-gt) LT/GT is the only field operator in this list. Find nodes with date that are Less Than/Greater Than a particular date. Less = earlier, greater = later. To use LT/GT, insert a date field and the value to compare to. Example: To find all appointments you've had up until a certain date, you can build a search like this: - `>LT: >Appt date: [Date object]` If the value you access through `PARENT` or `PARENT.field` is a date value, you can increment/decrement it using +/-. For example, to find all the tasks due during the next three days on a daily node, write a search like this: - `>GT: >Due Date: PARENT` - `>LT: >Due Date: PARENT+3` #### [_Date object as string match_](#date-object-as-string-match) Use a date object to find any node that mentions that date as a date object. #### [_FOR DATE YYYY-MM-DD_](#for-date-yyyy-mm-dd) A keyword operator that matches any node that mentions that date as a date object. Insert a date in the YYYY-MM-DD format, like this: `FOR DATE 2023-11-21` #### [_IS CALENDAR NODE_](#is-calendar-node) A keyword operator that matches with calendar nodes. Is most useful for excluding from searches: - `>NOT: IS CALENDAR NODE` #### [_ON DAY NODE_](#on-day-node) A keyword operator that matches children of any #day node #### [_...(NUMBER) DAYS_](#number-days) Several search operators will look for nodes with date values within (NUMBER) of days: - `DONE LAST (N) DAYS` - `CREATED LAST (N) DAYS` - `EDITED LAST (N) DAYS` #### [_`OVERDUE` + "Due date" field (legacy)_](#overdue) The search operator OVERDUE only works when used in tandem with system field Due date. We discourage using Due date because system fields in general are very inflexible. They cannot be configured and customized like other user-created fields with default hide state, default value, auto-initialization and so on. We can now replicate the functionality of OVERDUE for any date field using LT/GT. For more date-related searches, [check this FAQ out](https://tana.inc/faq/i-need-help-with-date-search-how-do-i-do-x). #### [Field values](#field-values) #### [_PARENT/GRANDPARENT_](#parent-grandparent) `PARENT`/`GRANDPARENT` refers to the immediate ancestors in the outline hierarchy relative to the search node. If the parent/grandparent is a calendar node, you can add these search operators as a date field value. This will replace the field value with the date represented by the calendar node. Example: If you create search nodes on your day node, you can use PARENT/GRANDPARENT to fetch all #tasks that are due today (PARENT), or this week (GRANDPARENT) You can use `PARENT+3`/`PARENT-3` to find future/past dates relative to the target. See [LT/GT](#lt-gt) for more. If a node has a date field, you can use PARENT.field to target that field value for date searches. See [LT/GT](#lt-gt) for more. #### [_FOR RELATIVE DATE \[term\]_](#for-relative-date-term) Add this in the date field value, and it will be replaced with a date that is relative to the current date. Compare [PARENT/GRANDPARENT](#parent-grandparent) with FOR RELATIVE DATE, the former let's you look back at what you wrote yesterday relative to the calendar node you're on, whereas the latter shows results relative to today's values (which will change every day), and can be placed anywhere in the graph (not just nested as a child/grandchild of a calendar node). - Present time: Today, this week, this month, this year - Past: Yesterday, last week, last month, last year - Future: Tomorrow, next week, next month, next year ### [Command nodes with date function](#command-nodes-with-date-function) #### [Insert relative date](#insert-relative-date) Accepts the following parameters - Relative date string (required) - Reference date - Date/time granularity - Set only start or end of date - Target node Suggested uses: - time tracking setups (set present date/time) - scheduling commands (postpone start date by +5 days) - extract start and end of a ranged date object into two separate fields - combine two separate fields (for example from imported data) into a ranged date object Unfortunately we don't have a search expression that can be used in a node filter for dates that have a start/end or not. See [Command nodes > Insert relative date](https://tana.inc/docs/command-nodes#insert-relative-date) for more. ### [Auto-initialization of date fields](#auto-initialization-of-date-fields) Date fields used in supertags can be made to auto-populate a date upon use. Use a date field in the supertag config, and the following auto-initialize options will be available: - **to current date:** inserts today's date - **to date of ancestor day node:** inserts the date of an ancestor journal node - **to value from ancestor with this field:** Get the field value from an identical field on a node nested above. For example you could have a #quote tag with an Author field, and it could automatically initialize with the value from the Author field of the #book that it is nested underneath ### [Default date/time system fields](#default-date-time-system-fields) Every node stores a some default system fields that record date/time information based on certain events. This information are not editable, but can be queried. - **Created time:** Date/time a node was created - **Last modified time:** Date/time a node was last edited - **Done time:** Date/time a node was registered "done". Has to be manual toggle, doesn't work with done state mapping/kanban-style setups. - **Date from calendar node:** Calendar node that a node is a descendant of. ### [Date/Time settings](#date-time-settings) #### [Time zones](#time-zones) - Tana has a bare-bones implementation of time zones, which was necessary because when people are collaborating in Tana across timezones and search for "what happened today", they're not interested in only what happened "today" in their own time zone, they want to know what happened in "today"s everywhere, possibly in every timezone. - Timezones are set per workspace, stored in Settings. - Timezones uses the tz format. It can be changed manually by using one of the names from this list (use larger cities just to be sure): [https://en.wikipedia.org/wiki/List\_of\_tz\_database\_time\_zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) #### [Time format](#time-format) - Time format settings are per user, stored in Settings - Dictates how Tana displays time. Choose between: - 12H - 24H - Auto (based on your local settings) #### [First day of the week](#first-day-of-the-week) - First day of the week setting are per user, stored in Settings - Allows you to choose whether to start your week on Sunday or Monday. - Currently the daily nodes in the calendar hierarchy are all organized starting Monday though, this only affects what you see in the various date pickers and in the calendar view. - You can also set this using command line > Set start of week to... ### [The calendar view](#the-calendar-view) See any list of nodes plotted in a calendar. - By default you can use their system fields "Created at"/"Edited at", or "Done time" if it has checked status. - Otherwise you can use any date field on the node that you have created (like Due date, Launch date, Publish date etc). - Choose to plot nodes using one or more specific fields with date values. For more, see [Views > Table view](https://tana.inc/docs/views#table-view) ## [Examples](#examples) ### [See all captured items from a day/week/month](#see-all-captured-items-from-a-day-week-month) Create a search node under a day/week/month to see all captured items from that period. - Grab a reference to the Inbox and paste in the query builder - Add the system field Created date and make the field value PARENT - Your search node should look like this: - Inbox (reference) - \>Created date::PARENT Copy link Rate article ## Related release notes [See all](/releases) - FixedFixed bug where Generate image was not available on calendar nodes [(2024 / wk 47-49)](/releases/2024-wk47-49) ## Related FAQs [See all](/faq) ## Examples - How can I extract the start date of a range using Commands? Sep 27, 2024 Copy link Use `Insert relative date` command, here's an example: ![](https://cdn.sanity.io/images/rfb95wph/production/286e55bb7d957a46382074d8fde194908ac6e8b4-1602x1168.png?w=3840&q=75&fit=clip&auto=format) Related docs: - [Command nodes](/docs/ai-command-nodes) - [Dates and calendar nodes](/docs/dates-and-calendar-nodes) . ## Question - Should I use the DUE DATE field? Sep 27, 2024 - Can you have a different supertag applied to your day nodes based on a specific interval? Sep 27, 2024 - I have dates written as text, how can I convert them to Tana dates? Sep 27, 2024 - The calendar nodes I made in other workspaces doesn't have the default tags. How do I make them? Sep 27, 2024 - Where is the calendar in Tana? Sep 27, 2024 - I need help with date search! How do I do X? Feb 14, 2024 - How can I retrieve tasks dated for today? Jan 18, 2024 # Workspaces # Workspaces Workspaces in Tana > Last updated: October 29, 2024 ![](https://cdn.sanity.io/images/rfb95wph/production/69b79336d481ea8cebb579fa2f568ef4a66242df-1804x1318.png?w=3840&q=75&fit=clip&auto=format) ## [Overview](#overview) A workspace in Tana is a space where you have control over who has access, what is contained within it, and what is allowed to show up in other workspaces. You can have workspaces that are completely separate from other workspaces, or they can exist in near parallel with your private workspace such as an archive of highlights. They can exist for your own personal use, or they can be used for collaborative efforts with other Tana users. ## [Basics](#basics) - **Everything you create in Tana is in _a_ workspace:** The workspace is a node with settings such as a list of its members, avatar, move targets, separate daily notes, library, trash, and workspace publish settings. - **Everyone has a private workspace:** all nodes that live here can only be seen by you and no one else. - **Other workspaces can be places where big projects and collaborative efforts happen:** Workspaces allow you to create separation between efforts that require their own space and schema in Tana. - **See your workspaces in the sidebar**: Workspaces have a separate section in the sidebar. You can also manage workspaces there and you can reorder the list as you like. - **Add members to collaborate**: Workspaces have rudimentary collaboration tools like adding members to a workspace, seeing the edit history is (time and user), and being able to notify users within a workspace of a node. - **Workspaces can be published as read-only:** This allows any Tana user with a HTML link to a node in this workspaces top open and view it. ## [Details](#details) ### [General workspace features and options](#general-workspace-features-and-options) #### [Workspace nodes](#workspace-nodes) All workspaces come with the following nodes of their own: - Home - Daily notes\* - Schema - Library - Settings - Trash #### [—Home node](#home-node) The home node is the _first node of every workspace_. It's the place you end up when you click on any of the workspaces in the sidebar, or if you click on the avatar of your workspace in the breadcrumbs. > Curious to know how others organize their home nodes? Check out the [Home node showcase](/articles/showcase-home-node) showing different entries from the community! #### [—Daily notes](#daily-notes) Your private workspace has Daily notes created by default. New workspaces you create have the option to activate Daily notes. You can navigate to your private daily notes by: - Going to `Today` in the sidebar - Using the shortcut Ctrl+Shift+D See [Create daily notes](#create-daily-notes) on how to set them up in new workspaces. #### [—Schema](#schema) The schema node is the place Tana will store any supertags and fields that are created ad-hoc, or sent to be "discoverable". It's a bit of a legacy node at this point, and the conventions for how to use this are currently in flux. To go to the schema node: - **Option 1:** On the home node, go to the node options (ellipsis ⋯ button) > `Open Schema` - **Option 2:** Run the command `Open schema` #### [—Library](#library) The library node is used for nodes that don't have a "place", either under the Home node or the Calendar nodes. Also, nodes are created in the Library if they're made inline using @-mention and they don't exist yet. To go to the library node: - **Option 1:** On the home node, go to the node options (ellipsis ⋯ button) > `Open Library` - **Option 2:** Run the command `Open library` #### [—Settings](#settings) Each workspace has settings of their own. To go to the workspace settings: - **Option 1:** On the home node, go to the node options (the ellipsis ⋯ button) > `Open settings` - **Option 2:** Run the command line `Open settings` #### [—Trash](#trash) Each workspace has its own trash. To go to the trash of the workspace: - **Option 1:** On the home node, go to the node options (ellipsis ⋯ button) > `Open Trash` - **Option 2:** Run the command `Open trash (deleted)` #### [Allow content from...](#allow-content-from) This controls which adjacent workspaces can populate the results of search nodes and autocomplete actions like @-mentions within a particular workspace context. This setting can be custom set from all workspaces. Examples: - You can set it so all content from every workspace you're a member of is available to you from within your private workspace by allowing content from everything there. - You can keep Workspace A completely isolated from retrieving anything from other workspaces you're a member of by unchecking everything there, while allowing Workspace B to find things from Workspace A still. #### [Export workspace as JSON](#export-workspace-as-json) Each workspace can be exported in JSON format. To export the JSON of a workspace: - On the home node, go to the node options (ellipsis ⋯ button) > `Export workspace as JSON`. It will immediately prompt you to enter a name for the file and will proceed to download if you accept. This is a raw JSON export of your workspace. For technical reasons, there is currently no way for users to import these files back into Tana again. They can be used by our engineers to restore a workspace if need be, but our servers also take frequent backups of all workspaces so even if you don't download a JSON of your workspace and think that data has gone missing that used to be there, we can look at backups to find it again. ### [Your private workspace](#your-private-workspace) ![](https://cdn.sanity.io/images/rfb95wph/production/167f7661b60ce8fe8ff415f13dfbf169daa51788-1804x1318.png?w=3840&q=75&fit=clip&auto=format) A private workspace Your private workspace is also called your "root" workspace. All settings and many user-related features are tied to this workspace, such as Inbox, Quick Add, your timezone, keyboard shortcuts and much more. If you look at the Workspaces section in your sidebar, you can always see your private workspace at the top. This is _your_ workspace, and content that lives here cannot be accessed by anyone else, even if you leave references to your private content on shared workspaces. #### [Settings in your private workspace](#settings-in-your-private-workspace) The settings in your private workspace are a mix of workspace and global user settings. Usually they contain the following: - Journaling: For managing the tags applied to your journal/calendar nodes - Date/time settings: To save your default timezone, time format and first day of the week preferences - Private keyboard shortcuts: If you have made a custom keyboard shortcut, they will appear here - Preferences: Global user settings are located here - Move targets: A legacy setting. If you have set move targets, they will appear here. There are other settings that might appear here for users with a Tana paid subscription, or for experimental purposes. ![](https://cdn.sanity.io/images/rfb95wph/production/9c161fef4f44daac8bfd051180eb6e2c734bb849-1978x1113.png?w=3840&q=75&fit=clip&auto=format) ### [Multiple workspaces](#multiple-workspaces) You can create additional workspaces, and they will appear underneath your private workspace. #### [Creating a new workspace](#creating-a-new-workspace) To create a workspace: - **Option 1:** In the sidebar, go to `Manage workspaces` and click on `Create workspace`. - **Option 2:** On any node, use the command `Convert to workspace`. All nodes that are owned by this node will be associated with this new workspace. There are some considerations to keep in mind when working with multiple workspaces: #### [Create daily notes](#create-daily-notes) New workspaces come without the default daily notes. You can create them by - **Option 1: from your private day node.** Go to `Switch workspace` and select the new workspace to navigate there. By virtue of having navigated there, Tana will create the necessary structure for the daily notes to exist in that workspace. - **Option 2: command line.** On the workspace title, run the command `Set up calendar for workspace` ![](https://cdn.sanity.io/images/rfb95wph/production/9f05934f6072b290fe5515325133363d4dd69796-1570x883.png?w=3840&q=75&fit=clip&auto=format) Then, you may want to create a new default day tag. On a day node, press the ellipsis ⋯ button > `Create default day tag` #### [Schema setup](#schema-setup) You just created a new workspace and now you want to use the same `#task` tag from your private workspace in this new shared environment. First let's talk about what _not_ to do: ![](https://cdn.sanity.io/images/rfb95wph/production/bbda44511c3dadff3e8a692ef13be1bf790d0fb3-651x383.png?w=3840&q=75&fit=clip&auto=format) **Why is it not simple to move supertags over from one workspace to another?** When you create new supertags and fields, there are _many_ hidden dependencies that get created in the background. This links them to the current workspace context. It's very hard and time-consuming to ferret them all out by deleting them or bringing them to live within the container of the supertag/field. In most cases it is easier and faster to recreate the supertags and fields in the new workspace. If you really want to try to move an existing supertag, [read this FAQ](/faq/how-do-i-share-a-supertag-from-my-private-workspace-to-a-shared-one) for some guidance. #### [Date/Time settings (timezones)](#date-time-settings-timezones) A new workspace will be set to the timezone of the user that created the workspace. This means that if other members are added that are in other timezones, the way the dates and times appear to them will be adjusted based on their local timezone. Example: If a workspace is set to an APAC timezone, 5pm EST will still appear as "Today" in AMER timezones even though it is technically "Tomorrow" in APAC time. #### [Workspace limitations](#workspace-limitations) Currently you can only use Input API on a workspace that has less than 750k nodes. [See this for more.](/faq/does-tana-have-a-500k-node-limit) While the Input API won't work on this workspace, you can still continue entering content into the workspace using the keyboard, AI or live transcription. #### [Merging two workspaces](#merging-two-workspaces) There is no simple way of doing this. The work is basically to manually move nodes from one workspace to another, and then leaving/deleting the one you don't want anymore. #### [Deleting a workspace](#deleting-a-workspace) **Your private workspace:** You are not able to delete your main private workspace. You can, however, swap your old private workspace with a new one, and then you can delete it like a regular workspace. To do this: - Create a new workspace, and in the title of the workspace, run the command `Set [workspace name] as new root workspace` Any default tags and setups you had in your old workspace will not be brought over to the new workspace. The old workspace can still be accessed via the sidebar. **Other/shared workspaces:** You can delete a workspace by being the last person to leave it. It becomes completely unavailable, nobody has access to the encrypted data and it is queued for deletion. ### [Working collaboratively in a workspace](#working-collaboratively-in-a-workspace) #### [Workspace membership](#workspace-membership) You can invite members to a workspace you create: - Go to the workspace home, then click on the "members" in the top right. You can invite another Tana user here. ![](https://cdn.sanity.io/images/rfb95wph/production/1ff83e31f0b23d0725e2389109bf4f96d5fba907-1389x771.png?w=3840&q=75&fit=clip&auto=format) #### [Node access and visibility across workspaces](#node-access-and-visibility-across-workspaces) Everyone who is a member of a workspace can access the nodes that are _owned_ by that workspace. This also applies if the reference appears in a different workspace that you also are a member of. For example: let's say your company has a _company_ workspace for all staff, and one for _management_ only. If a manager copies meeting notes from the management workspace into her _standup_ in the _company_ workspace: - Managers will be able to see it because they are members of the management workspace. Meanwhile, - Staff will only see an _alias_ of the node. They can't open or interact with it because it is owned by a workspace that they're not a member of. In summary, whether a user can see a node depends on 1. where the node lives, and 2. if the user is a member of that workspace. Anything that lives inside your private workspace can never be referenced to anyone else. #### [How nodes flow from private to shared workspaces](#how-nodes-flow-from-private-to-shared-workspaces) This is how most of the Tana team collaborates in Tana: 1. For a fluid work experience, we make sure that our private workspace has `Allow content from...` the team workspace we work collaboratively in. This means that all content from the team workspace is available to be referenced from within our private workspace. 2. We use supertags from the team workspace to draft nodes in private. On your Today page, start with the supertag (like, your team's task/meeting/bug/standup tag) and fill what you need. When ready, select the node to bring up the node editor toolbar (it's sometimes easier to toggle selection with `Esc`). The first suggestion should be to `Move to [workspace]:` ![](https://cdn.sanity.io/images/rfb95wph/production/17e87b6c46043675bed976dba4bfc8ee118df5bf-1896x481.png?w=3840&q=75&fit=clip&auto=format) This is the basic flow going from private to the shared workspace, and very handy for those of us who work primarily from our private spaces.. You can of course go to the shared workspace and work from there too, which means you don't need to move anything to make your work visible to your teammates. Copy link Rate article ## Related release notes [See all](/releases) - FixedOnly show 'Unshare' for published read-only workspaces on the home node. [(2024 / wk 45-46)](/releases/2024-wk45-46) ## Related FAQs [See all](/faq) ## Question - Does Tana have a 500k node limit? Jan 21, 2025 - Can you build a wiki in Tana? Sep 27, 2024 - Should I have just one or multiple workspaces? Sep 27, 2024 - Can I open the day node of another workspace by default? Sep 27, 2024 - How do I share a supertag from my private workspace to a shared one? Sep 27, 2024 - How are AI credits used on shared workspaces? Sep 06, 2024 - Why can I not drag nodes from one workspace to another? Jan 12, 2024 ## Examples - How can I find references in one workspace that are owned by another? Sep 27, 2024 Copy link To find all references in a workspace that are owned by another workspace: 1\. Go to your workspace home 2\. Create this search _as a direct child_ of the workspace home node: - GRANDPARENTS DESCENDANTS WITH REFS - `>NOT` GRANDPARENTS DESCENDANTS To limit the search to specific workspaces, add the system field `Workspace` and specify the workspaces you want to target there. ![](https://cdn.sanity.io/images/rfb95wph/production/f98201f0282ff0c01a7e405bc94f942ba079280c-1871x1197.png?w=3840&q=75&fit=clip&auto=format) Related docs: - [Workspaces](/docs/workspaces) - [Nodes and references](/docs/nodes-and-references) - [Search nodes](/docs/search-nodes) # Node types # Node types This is an overview of all the different types of nodes that exist in Tana. ## [Overview](#overview) Tana has many different types of nodes, and icons to reflect what these types are. Below is a list of all the different types you may encounter. ## [Content nodes](#content-nodes) ### [Plain node](#plain-node) Plain nodes show up as dark grey, solid dots. Plain nodes with content show up with a lighter halo around them. ![](https://cdn.sanity.io/images/rfb95wph/production/d1ec0fb48c1d999db0d020ab9d2964ba30d3912d-1298x366.png?w=3840&q=75&fit=clip&auto=format) Related doc: [Nodes and References](/docs/nodes-and-references) ### [Reference](#reference) References show up with dashed outlines. You can also have an inline reference or a link to a node, signified by the grey background. ![](https://cdn.sanity.io/images/rfb95wph/production/bfab13d5715d92d3a73a82912bb7770c826aba4e-1280x394.png?w=3840&q=75&fit=clip&auto=format) Related doc: [Nodes and References](/docs/nodes-and-references) ### [Search node](#search-node) Search nodes show up with a magnifying glass in the node. ![](https://cdn.sanity.io/images/rfb95wph/production/9ceace16d35043b5114c5ba06bbf6306373e9810-1298x376.png?w=3840&q=75&fit=clip&auto=format) Related doc: [Search nodes](/docs/search-nodes) ### [Node with contextual content](#node-with-contextual-content) Nodes with contextual content show up as diamond shaped. ![](https://cdn.sanity.io/images/rfb95wph/production/f271c8947497a2e81920f683e0130e22ac48989c-1298x411.png?w=3840&q=75&fit=clip&auto=format) Related doc: [Nodes and References](/docs/nodes-and-references) ### [Supertag definition](#supertag-definition) Supertag definitions show up as a hashtag inside a circle. ![](https://cdn.sanity.io/images/rfb95wph/production/44c7b77566632869f99ed06b21ce7339a6f9da58-1298x363.png?w=3840&q=75&fit=clip&auto=format) Related doc: [Supertags](/docs/supertags) ### [Field definition](#field-definition) Many field definitions show up as a square icon with the various symbols signifying different field types. Others have just the symbol of their types with no framing square. ![](https://cdn.sanity.io/images/rfb95wph/production/5420a690d108c0e3d9ae1d457c7f1df31ffc33a9-1298x814.png?w=3840&q=75&fit=clip&auto=format) Related doc: [Fields](/docs/fields) ### [Fields](#fields) Fields show up similarly as field definitions, but with an empty node as placeholder for entering a value. ![](https://cdn.sanity.io/images/rfb95wph/production/76cfbf8908ca7aa28ab3ecf47814a77f2d5e21c7-1712x1031.png?w=3840&q=75&fit=clip&auto=format) Related doc: [Fields](/docs/fields) ### [Command node](#command-node) A command node shows up as a typical command line symbol `>_` , and inside a dashed circle as a reference. ![](https://cdn.sanity.io/images/rfb95wph/production/287f53cd78fce39800cfc618e935c0fdcf34119c-1298x355.png?w=3840&q=75&fit=clip&auto=format) Related doc: [Command nodes](/docs/command-nodes), [AI command nodes](/docs/ai-command-nodes) ### [URL node](#url-node) A URL node shows up with an external link icon. ![](https://cdn.sanity.io/images/rfb95wph/production/acb0e612dc012d1fc510a2d515e8052088a79393-1298x284.png?w=3840&q=75&fit=clip&auto=format) ### [Code node](#code-node) A code node shows up as two angled brackets. ![](https://cdn.sanity.io/images/rfb95wph/production/7e02c5bd747a7bb195b12fb51ad728559d89a0f1-1298x266.png?w=3840&q=75&fit=clip&auto=format) ### [Workspace node](#workspace-node) A workspace node shows up with a rainbow halo. ![](https://cdn.sanity.io/images/rfb95wph/production/4ebda98e46f03e78472591ad245c6621be1c83bf-1392x289.png?w=3840&q=75&fit=clip&auto=format) Related doc: [Workspaces](/docs/workspaces) ### [Audio node](#audio-node) A node with an audio file looks like a regular node with a play button next to it. Expand it, and you will see more controls for playback. ![](https://cdn.sanity.io/images/rfb95wph/production/68b3fcd14097cdaf351962b2daea42e820c2a90c-1371x440.png?w=3840&q=75&fit=clip&auto=format) Related doc: [Voice memo](/docs/voice-memo) ### [Video node](#video-node) A node with a video file looks like a regular node with content that auto-expands to show the video with playback controls. ![](https://cdn.sanity.io/images/rfb95wph/production/004e3e176b99c3534b7170303e2d98b9929d0fd3-1392x900.png?w=3840&q=75&fit=clip&auto=format) ### [Image node](#image-node) A node with an image looks like a regular node with content that auto-expands to show the image. ![](https://cdn.sanity.io/images/rfb95wph/production/56d63ed1225593d5810414192d98b6c0f8b2d3a7-1392x1005.png?w=3840&q=75&fit=clip&auto=format) ### [Node with Youtube link](#node-with-youtube-link) A node with a link to Youtube looks like a URL node. It will auto-embed to show the video with playback controls. You can undo the embed by hitting the X in the top-right corner. ![](https://cdn.sanity.io/images/rfb95wph/production/47d8d71fee25b88a296d2a24482bab5bd43245cf-1392x860.png?w=3840&q=75&fit=clip&auto=format) ### [Node with Vimeo link](#node-with-vimeo-link) A node with a link to Vimeo looks like a URL node. It will auto-embed to show the video with playback controls. You can undo the embed by hitting the X in the top-right corner. ![](https://cdn.sanity.io/images/rfb95wph/production/64b9cde4f3023d720900f9d193e4affc85006111-1392x886.png?w=3840&q=75&fit=clip&auto=format) ### [Node with Spotify link](#node-with-spotify-link) A node with a link to Spotify looks like a URL node. It will auto-embed to show the playlist or album with playback controls. You can undo the embed by hitting the X in the top-right corner. ![](https://cdn.sanity.io/images/rfb95wph/production/c344710414050eda51fedbe93d1da30a3b9baba7-1392x592.png?w=3840&q=75&fit=clip&auto=format) ### [Figma node](#figma-node) A node with a link to a Figma file. It will auto-embed to show a screenshot of the most recent view of the file. You can undo the embed by hitting the X in the top-right corner. ![](https://cdn.sanity.io/images/rfb95wph/production/8856045e38f87553daed63c1d10689d3cbdc9500-1876x1188.png?w=3840&q=75&fit=clip&auto=format) ### [Unavailable node](#unavailable-node) A node with a 🚫 bullet. Hover over the node to get more information. ![](https://cdn.sanity.io/images/rfb95wph/production/4b70e067907d4f1c73791ec7a3951ffc4624a94a-1073x257.png?w=3840&q=75&fit=clip&auto=format) Deprecated: Unknown (or no access) node. Showed a dashed box node with a no access sign. Means that the source that used to be referenced is unable to load / no longer accessible. ![](https://cdn.sanity.io/images/rfb95wph/production/277d7837b02a1e81da3f7941e24d1dcf05f9c98e-1392x329.png?w=3840&q=75&fit=clip&auto=format) Deprecated node type ### [External alias node](#external-alias-node) A dashed circle with no bullet, and the words "(alias)" at the end. This is a reference with no available content except the name, due to access restrictions. ![](https://cdn.sanity.io/images/rfb95wph/production/40a58bd035048c2feff0accd747fb0bb18544e02-1114x282.png?w=3840&q=75&fit=clip&auto=format) ## [Function nodes](#function-nodes) ### [Saved layout](#saved-layout) A saved layout shows up with a bento box icon. ![](https://cdn.sanity.io/images/rfb95wph/production/2ca0461cb50c598ff452faf06c4ad0def643f260-1298x360.png?w=3840&q=75&fit=clip&auto=format) ### [Keyboard Shortcut](#keyboard-shortcut) In Settings > Private keyboard shortcuts, custom shortcuts show up with the command (for Mac) / place of interest / Bowen knot symbol. ![](https://cdn.sanity.io/images/rfb95wph/production/c27a63fd8b4ca53a04724b02d3702b533e1de6f2-1392x323.png?w=3840&q=75&fit=clip&auto=format) Copy link Rate article ## Related release notes [See all](/releases) - ImprovedDownloading an image will now use the images file name, not "Image" [(2025 / wk 6)](/releases/2025-wk06) - FixedFixed bug where AI-generated images could not be shown full screen. [(2025 / wk 03)](/releases/2025-wk03) - FixedFixed bug where code blocks where default collapsed [(2025 / wk 03)](/releases/2025-wk03) - ImprovedWhen copying text from Tana as HTML (Cmd/Ctrl+C on a node or selection), URL nodes will now be turned into proper HTML links [(2024 / wk 50)](/releases/2024-wk50) - FixedFixed bug where a reference to the Trash node itself looked like the node was "in trash". [(2024 / wk 47-49)](/releases/2024-wk47-49) ## Related FAQs [See all](/faq) ## Question - Where do deleted/trashed nodes go? Does the trash get emptied? Sep 27, 2024 - What are field definitions and how do I find them? Sep 27, 2024 ## Examples - How to find URL nodes Sep 05, 2024 Copy link While there isn't a search operator to target URL nodes, they all use a system-defined node to store the URL. You can grab the field definition for it in one of the URLs. and it will retrieve all nodes that use this field, which will be mostly URL nodes. Note that the pasting of the `URL search` node into the search is to limit the search to only children within that node. Related docs: - [Search nodes](/docs/search-nodes) - [Node types](/docs/node-types) # Related content # Related content Related content is a way to display content that is related to a node, placed adjacent to its main content. ## [Overview](#overview) **Related content is a handy feature for displaying content that is related to a node, placed adjacent to its main content.** Like the reference section, it is meant to be a way to provide easy access to contextually-relevant information without taking up space in the main content area of a node. They show up as floating boxes to the bottom or to the right of the main content. You can simply plug in a reference as static content, or a search node to make it dynamic. Say for example, you want to start your day by triaging bugs. In your day tag, you could create a related content area that contains a search for all new #bugs filed on that day. This is a search you might have had as part of your supertag template. Now, it can live in the Related content section instead, removing clutter from the main content of the node. ## [Basics](#basics) ![](https://cdn.sanity.io/images/rfb95wph/production/8e6989171179cf79a160f8e698745935813b43fa-2851x1604.png?w=3840&q=75&fit=clip&auto=format) - Related content can be configured on any node, and in a supertag so it appears on any tagged node. - Related content can contain search nodes and references. Plain nodes will _not_ render in Related content. - Related content can appear either to the right of or on the bottom of the node content. Default is to the right. ## [Detail](#detail) ### [To get to related content setup](#to-get-to-related-content-setup) #### [On a supertag](#on-a-supertag) Right-click on a tag > Configure tag > Advanced options > Related content #### [On a node](#on-a-node) - Run the command `Configure node` on the node - Go to the field Related content where you can set it up and add content ![](https://cdn.sanity.io/images/rfb95wph/production/3008467052bf169544baeebbf2c7f5192ad7b505-1569x993.png?w=3840&q=75&fit=clip&auto=format) ### [To add content](#to-add-content) Related content only accepts search nodes and references. Plain nodes will not be rendered. ![](https://cdn.sanity.io/images/rfb95wph/production/0d8f5ff11da7233500a517b0f190bf9a46c9b522-968x1028.png?w=3840&q=75&fit=clip&auto=format) #### [Content type: Search nodes](#content-type-search-nodes) _Useful for adding content that changes based on search conditions or is specific to the instance._ To add a search node, use any method: - slash `/` -> `Search node`, - `?` -> `Create search node`, or - command line `Find nodes` Search nodes that live in the node/supertag config are expanded by default. #### [—Ideas for configuring your search node:](#ideas-for-configuring-your-search-node) **Note on PARENT:** When setting up searches, if you want to reference the instance of the supertag you are on (for example, the #day node), you need to add the searches on the top level in the Related content and use `PARENT` where you want to use the instance as a field value. `GRANDPARENT` won't work because that means your search node is nested within a plain node, which won't render in Related content. - **Meetings of the day:** This search is on the #day tag. If you're configuring a supertag, use `PARENT` as a field value to refer to the instance. In the example below, `PARENT` is used in the Date field to refer to the day node. This will show meetings happening only on that day ("FT" is the workspace node): ![](https://cdn.sanity.io/images/rfb95wph/production/c7b5de6e0fc58ecc2f2b19ff646388aeef213686-1302x830.png?w=3840&q=75&fit=clip&auto=format) - **Alternative Reference section:** With related content, you can for instance create a custom reference section that displays references to a page, but with the flexibility offered through searches and view options to tailor it to your needs. Use this to search: `LINKS TO:: PARENT` (doesn't include unlinked mentions). See the image [here](#on-a-node) for a visual example of the search query. - **Other search ideas:** Bugs related to a feature, thoughts related to a topic, tasks related to a project #### [Content type: References](#content-type-references) _Useful for adding dashboard-type content._ To add a reference, use any method: - `@`\-mention any reference - Copy-paste a reference - Write a plain node → move it to Library (or elsewhere) and leave a reference in its place References are collapsed by default, even if it is a reference to a search node. If you turn on heading on the reference, it should expand by default. ### [To change the placement of related content](#to-change-the-placement-of-related-content) #### [The easy way](#the-easy-way) When you have added nodes to the related content section, they appear to the right of the node by default. Hover over the related content, and you'll see a button with three dots/ellipsis appear on the top right corner (1). Click it and go to `Prefer area` to change its default position (2). #### [The difficult way](#the-difficult-way) The area configuration is a contextual content node with a system field in it ("Preferred related content area") with options to change the position there. #### [Other changes](#other-changes) If related content is set up on the supertag level and you change it on the instance level, it will save to the supertag level and appear like this on all instances. ### [To move related content from one context to another](#to-move-related-content-from-one-context-to-another) If you want to move a related content node from one config to another, copy a reference of it to the new location and use the command `Bring referenced node here` ### [To remove related content](#to-remove-related-content) Hover over the related content, and you'll see a button with three dots/ellipsis appear on the top right corner (1). Click it and select Remove from /node to remove it (2). ![](https://cdn.sanity.io/images/rfb95wph/production/0c0f22429d0ee0cc806e85ee9eff3fe62368f7f8-1104x720.png?w=3840&q=75&fit=clip&auto=format) Alternatively, go to the Supertag advanced options/Configure node and delete the nodes in the configuration. ### [Deep dive into related content](#deep-dive-into-related-content) Brage is here to share some tips on cool stuff you can do with related content: ### [Related content in Tana paid subscriptions](#related-content-in-tana-paid-subscriptions) If you upgraded to a Tana paid subscription and synced your calendar, your daily notes will show a related content area called Agenda. This gives you easy access to all the calendar events you have for the day. If you already had a related content area called Agenda, the existing one will be called "Agenda (old)" with the new one installed underneath. You can choose which one to keep and remove the other. For more on the calendar sync, see [Calendar integration](/docs/calendar-integration) Copy link Rate article ## Related FAQs [See all](/faq) ## Examples - One command to toggle the related content section on/off Nov 13, 2024 Copy link > 🙏 Thanks to Navigator **Theo** for sharing how to implement this "focus mode" idea on Related content sections! For more stuff like this, join our community to share and learn about all things Tana 🫶 ### [Goal](#goal) You want to dial up your focus by hiding the Related content sections. ![](https://cdn.sanity.io/images/rfb95wph/production/d06ade1f7def058b84c32382140b54700cd73bb9-811x499.png?w=3840&q=75&fit=clip&auto=format) ### [Instructions](#instructions) #### [Build the single-command toggle](#build-the-single-command-toggle) [See this example on how to build it](/faq/one-command-that-toggles-the-checked-unchecked-state-of-a-field). Build the first section called "In the schema", then come back here. #### [Configure visibility of related content](#configure-visibility-of-related-content) To configure the related content sections you want to toggle the visibility on, each section will need a node filter where the checked state of the _is visible_ field determines whether they show up or not: - Navigate to the Related content section in the configuration: - For supertags, Cmd/Ctrl+Shift click on the tag itself - For nodes, run the command `Configure node` - For every related content section - Run the command Add contextual content on the related content nodes, and add `>Node filter:: >is visible:: true (checked)` ![](https://cdn.sanity.io/images/rfb95wph/production/d564a107bde6bf9692eabfe964d7a1c9f8d3cc1a-3088x2006.png?w=3840&q=75&fit=clip&auto=format) The system field Node filters on related content sections. #### [Testing](#testing) Test the command by running the _Toggle visibility_ command on the node. It should make the related content sections appear/disappear. Optionally, you can add the _Toggle visibility_ command to the node as a button, and then use that instead. 🙌 That's it! Related docs: - [Command nodes](/docs/ai-command-nodes) - [Command line](/docs/commands) - [Related content](/docs/related-content) . - How can I get the Task list on my daily notes (back again)? Sep 27, 2024 Copy link You may have seen a Tana setup that had a task list on the daily notes page, or even had one from early prototypes from us, and it somehow disappeared now. There is a simple way to get it back. Go to any daily note, and make a search that looks for: 1. all `#task` nodes 2. `NOT DONE` Run it to confirm it's fetching the right things. Adjust how you want your tasks to look (Set all view options here, like Display, Group, Sort options) Confirm changes to the view options and the query. Right-click on the title of the search, and select Move to Related content. Here's a video showing the steps above: Related docs: - [Related content](/docs/related-content) - [Daily notes](/docs/daily-notes) - [Search nodes](/docs/search-nodes) . ## Question - I have two Agendas on the daily node. How do I fix this? Sep 27, 2024 # Meeting agent # Meeting agent The meeting agent is an all-in-one virtual assistant wrapped up in a supertag. Now available on Tana Pro and Plus. > Last edited: January 7th, 2025 ## [Overview](#overview) The meeting agent is a life hack for people who spend lots of time in meetings, but don't want to spend time following up and post-processing the notes. Add the meeting agent to your calls, and it will transcribe what each participant is saying, and extract useful, actionable items that are immediately sent to the relevant context - without you lifting a finger. **Sync your meetings with Tana straight from your calendar.** Our calendar integration brings all your meetings into Tana, and shows them on your daily notes page. It can also send desktop notifications for upcoming meetings. For more on this, see [Calendar integration](/docs/calendar-integration). If you don't use Google Calendar you can add meetings manually by tagging them as meetings. **Allow Tana to take notes during your meetings.** Send a meeting agent to any virtual meeting with a link, or have it automatically show up if your meetings are scheduled via your calendar. Works with Google Meet, Zoom, and Microsoft Teams. **See a summary of what was discussed, and all the action items mentioned during the meeting.** Everything is linked to the transcript so you can see where it came from. **Meeting agent is only available on a Tana paid subscription**. It uses AI credits to transcribe and process meeting notes. ## [Basics](#basics) ![](https://cdn.sanity.io/images/rfb95wph/production/e88fb10e1b4d041da6954737d352857eed69befb-2272x1504.png?w=3840&q=75&fit=clip&auto=format) The meeting agent is a set of special functions that can be added to a supertag. - **First time users: Setup of your first meeting agent.** If you start a Tana subscription from an existing account, a setup process helps you select existing tags and fields for the meeting agent. For new subscribers, the meeting agent will already be installed from the beginning, no setup required. - **It's easy to set up a meeting agent manually.** On any supertag, set the base tag to Meeting and start the setup process in tag config. For more detail, see [How to install another meeting agent](#how-to-install-another-meeting-agent) - **Add an agent to a meeting.** Click on the meeting (anything with the meeting tag is considered a meeting), make sure it has a meeting link and press "add meeting agent". It has now been invited and will ask to join the meeting once it's started. - **During the meeting, the agent is transcribing.** Everything that participants are saying is being transcribed to Tana, live, during the call. - **Finish your meeting to start processing.** Once you close the video call, the meeting notes processor begins. This uses Tana AI to distill important items from the meeting. A short meeting takes less than a minute, longer meetings can take several minutes. - **When processing is done, the meeting notes are complete.** Notes include a Summary, found tasks, future agenda items, new and existing entities—all with links to relevant parts of the transcript. - **Enrichment of your knowledge.** The meeting notes processor adds background information about persons and companies who attended and/or were talked about under their nodes. This helps with jogging your memory on what they've said about themselves before going into the next meeting you have with them! ## [Detail](#detail) ### [The synergy between the Calendar integration and Meeting agent](#the-synergy-between-the-calendar-integration-and-meeting-agent) The Meeting agent and Calendar integration are two intertwined features that are meant to work together. The calendar integration is not just a convenient way to see your events on the day node. It is an opportunity for AI to help build out your knowledge graph: - It syncs your meetings to Tana so you have a place to prepare for meetings, write notes and agenda points beforehand - The [Tana Desktop app](/docs/tana-for-desktop) can send you notifications about upcoming meetings, allowing you to add the meeting agent easily. - A meeting agent uses AI to attend and take notes during the meeting for you - All notes are saved back in Tana on the meeting node, and connects back to your knowledge base. When the Meeting agent creates notes, it does the following: **Writes a concise, interconnected meeting summary**: Your meeting summaries are no longer siloed on a different AI transcription platform just for meeting notes. They now live in Tana with the rest of your knowledge, connected to things in the transcript and in your graph. **Creates action items based on the conversation:** It picks up all the tasks, agenda items and decisions that come out of a meeting **Creates new nodes for entities if they don't exist yet:** Things will get mentioned in meetings that you don't have an existing node for. AI detects cities, states and countries, and will add them to your graph as references wherever they are mentioned. It also detects products (like "ChatGPT") and companies (like "OpenAI"). **Builds a CRM:** Meetings usually have Attendees. By syncing your contacts, AI can enrich the information on these contacts with facts that it learns from meetings. Joanne is not just a generic contact in your CRM anymore, they went to an escape room last weekend with their husband and really enjoy a good mystery novel (good to know when getting a birthday gift). Go here for more on the [Calendar integration](/docs/calendar-integration). ### [Setup](#setup) The meeting agent is a supertag that has meeting functionality under the hood. To get the meeting agent, you can install it in one of two ways: - **New user:** you don't have to do anything, it is already installed! - **Existing user before May 29:** when you start your trial/upgrade to a Tana paid subscription, you can opt to install a new #meeting supertag, or to map an existing tag and fields to be used for your meeting agent. For more detail, see [How to install another meeting agent](#how-to-install-another-meeting-agent) The meeting agent is meant to work seamlessly with Tana's calendar integration: - Connect with your calendar to sync your meetings to Tana where you can use the meeting agent. For more, see [Calendar integration](/docs/calendar-integration) - If you want to receive desktop notifications for upcoming meetings, install the [Tana Desktop app](/docs/tana-for-desktop) in addition to enabling the calendar integration. - You can still use the meeting agent without a calendar integration by adding the meeting tag manually. ### [Quick start guide](#quick-start-guide) ![](https://cdn.sanity.io/images/rfb95wph/production/4895533e3ba8c045189906478114575054a17208-1704x958.png?w=3840&q=75&fit=clip&auto=format) These are the steps for using a meeting agent. It looks like a lot but it's not actually _that_ difficult, there are more steps here than you actually have to do: 1. **Create/Find a meeting** 1. **If you're syncing a meeting from your calendar**, it should appear in your related content section on your daily page. Click on it to open it. 2. **If you're manually making a meeting**, apply the #meeting supertag to any node to make a new one (or the name of the supertag you specified during setup) 2. **Setup meeting.** In the meeting node, make sure the Meeting link field is filled with the link to a video call. 3. **Add meeting agent.** Click the button "Add Meeting Agent". 1. If there's no time in the Date time field, the agent enters immediately (usually within 30s after pressing button). 2. If there is a time specified, the agent will be scheduled to automatically enter at that time. 4. **Allow meeting agent in.** When the meeting is open, the agent will ask to join the meeting; let it in. Once it's in, it immediately starts live-transcribing the meeting to Tana. 5. **Processing meeting.** After the meeting has ended, the meeting agent will automatically start processing the transcript. This usually takes 1 - 3 minutes. **Do not close or reload your browser while the meeting agent is processing the transcript.** 6. **Done.** When it's done, you can explore the results which include: 1. A **summary** that has links to the full transcript. 2. An overview of **action items** (if any) such as tasks, agenda items, and decisions. 3. An overview of **discovered entities** (if any), including countries, cities, states, companies, and people. 4. **Background information** about meeting participants (including their role, where they are from, what they are working on etc.) as well as on company entities. ![](https://cdn.sanity.io/images/rfb95wph/production/8933d2808650e04523f18bcc14e1c0a32bfe5efa-3896x2192.png?w=3840&q=75&fit=clip&auto=format) #### [Enable/disable meeting notifications](#enable-disable-meeting-notifications) If you would like to disable desktop meeting notifications, you can go to the system menu for Tana desktop, click Options and toggle "Meeting notifications" off: ![How to enable/disable the Tana Desktop meeting notifications in system menu](https://cdn.sanity.io/images/rfb95wph/production/caa9149c437ef72370291935d5e1cedb139a3a1c-562x233.png?w=3840&q=75&fit=clip&auto=format) ### [How to install another meeting agent](#how-to-install-another-meeting-agent) You can have specialized meeting agents for the different types of meetings you have during the day. Here's how to set up another meeting agent that you can then customize: - Create a new supertag. This will become your new meeting agent - In the template, add the fields from your main meeting tag if you want to reuse them, or keep it empty if you want to have brand new fields created in the process. - Set the supertag's base tag as Meeting. - A new config option pops up at the bottom called Meeting agent. Open it and you'll see this: ![](https://cdn.sanity.io/images/rfb95wph/production/deec73a334b5714f1ec2f3cfa2ef2254869711ee-1748x607.png?w=3840&q=75&fit=clip&auto=format) - Press Set up agent and you'll see this. If the template is empty or no fields seem to be suitable, it will default to "Create new". If there are suitable fields, they will be pre-filled: ![](https://cdn.sanity.io/images/rfb95wph/production/733a87922cbf3cacacfcf3f8028c48c7d68b6576-1732x1193.png?w=3840&q=75&fit=clip&auto=format) - After the setup, the meeting will have a default command set up that dictates how the meeting agent works. To customize that, see the next section! ### [Advanced: How to customize your meeting agent](#advanced-how-to-customize-your-meeting-agent) Customizing your meeting agent requires you to have some knowledge of advanced supertag configurations and how to build commands from scratch. We think the best way to show you how it can be customized is to show you how it's built. So, this tutorial is actually on **how to build a meeting agent from the ground up**, with explanations on all the parts along the way. Grab your favourite beverage and let's dive in! #### [1\. Have the required fields in your meeting tag](#1-have-the-required-fields-in-your-meeting-tag) A meeting agent tag requires the following fields: - **Meeting link**: A URL field - **Transcript**: A plain field Optional but quite common in many meetings synced from the calendar: - **Attendees**: Usually a Options from supertag field linked to a supertag that represents people in your graph, and that uses the `Base tag: Person`. In the calendar integration, this is automatically made as a `#person` tag. In the absence of calendar integration, your own tag for persons with `Base tag: Person` is fine. - **Date time**: A date field Note: These are automatically configured/created for you if you run any meeting agent/calendar setup and you don't have suitable fields from before. Follow the steps above for [How to install another meeting agent](#how-to-install-another-meeting-agent) to get all the right fields. #### [2\. The Add meeting bot command](#2-the-add-meeting-bot-command) **This is what controls the transcription** operation during the live meeting (adding a bot, transcribing, where things go, what to do after) To edit the command running this, press the configure button: ![](https://cdn.sanity.io/images/rfb95wph/production/5f49282268ebdfcc7ab449a3f86a00d94a00a6c1-1273x716.png?w=3840&q=75&fit=clip&auto=format) This opens the command in an adjacent panel. The name of this command node is what appears on the purple button on the meeting. Here it's called "Add meeting agent". Nested within is the Add meeting bot command node. This is setup included in the default meeting tag: ![](https://cdn.sanity.io/images/rfb95wph/production/ef6c9a64c58ce9ea2a55fc0102f55949de1161cc-1634x1330.png?w=3840&q=75&fit=clip&auto=format) **Node filter**: this grabs the Meeting bot status system-defined field and makes sure it isn't running yet by checking there's no status value set. **Meeting link**, **Transcript**, **Attendees**, and **Meeting date** fields: These are self-explanatory in the description of the field. Plug in the field definitions for the fields you created above. **Post process command** (important): This command will be run on the transcript Other config settings that are not in this example - **Meeting bot name:** The name for the agent when it appears as a participant in the meeting. - **Recording target**: Field for inserting link to recording, if applicable - **Transcription provider:** Choose a transcription provider, currently Gladia, or Deepgram For all the possible settings, see the [Add meeting bot](/docs/ai-command-nodes) command. #### [3a. The Text processing agent command: Default meeting](#3a-the-text-processing-agent-command-default-meeting) **This is what controls the meeting notes processing.** It defines what happens after the meeting is done and the transcript is ready for processing. A lot of flavour can be added here, depending on your needs. This is the setup included in the default meeting tag: ![](https://cdn.sanity.io/images/rfb95wph/production/d79b330cab1bf0a102aea7b511552cb699b95e29-1622x2258.png?w=3840&q=75&fit=clip&auto=format) **Node context:** This command will reside inside the Add meeting agent command, on the config level of the main meeting node. In order to target the main meeting node correctly, we need to specify `GRANDPARENT` here. **Node filter:** The command will only run if the following criteria are met: - There is some contents in the `Transcript` field - The `Meeting bot status` is _Done_ (i.e. it has left the meeting and done transcribing) - The `Text processing agent status` (basically the status field for this command) does not exist yet **Transcript source:** The field that contains the transcript **New entities target:** The field that will contain Discovered items from the call **Action items target:** The field that will contain tasks, and could contain other things like agenda items or decisions **Tags to use for entities:** Entities that AI will look for when processing the transcript. **Tags to use for action items:** Action items that AI will look for when processing the transcript. Note: For the Tags to use for entities/action items, all the tags here would have special configurations (base tags set at a minimum, AI description for precision) to increase likelihood that AI correctly identifies these entities. For all the possible settings, see the [Text processing agent](https://tana.inc/docs/ai-command-nodes#text-processing-agent) command. #### [3b. The Text processing agent command: Onboarding agent](#3b-the-text-processing-agent-command-onboarding-agent) Here's another example of how another type of text processing can be set up. This is an _Onboarding agent_ that sits in on manual onboarding meetings with new users: ![](https://cdn.sanity.io/images/rfb95wph/production/a41034afe3170b139505414e5d6067b10b9cfb5a-1241x2805.png?w=3840&q=75&fit=clip&auto=format) **The node context/filters are the same** **Text processing agent mode:** Generic - Generic mode does not take into consideration attendees, and is better at non-meeting processing **Tags to use for item extraction:** Add a list of supertags the agent will try to identify from the transcript. Optimize each tag for AI by setting a base tag (if applicable) and AI instructions. **Action item/entities/extracted items prompt** (optional): Additional prompt to use for extracting above items **Summary/New entities/Action items/Extracted items target:** Set field to insert found items into For all the possible settings, see the [Text processing agent](https://tana.inc/docs/ai-command-nodes#text-processing-agent) command. Copy link Rate article ## Related release notes [See all](/releases) - FixedWe fixed a regression where the Meeting agent menu was not shown for expanded items any more. Whoops! [(2025 / wk 5)](/releases/2025-wk05) ## Related FAQs [See all](/faq) - How do I change the tags used in the meeting agent and calendar integration? Dec 03, 2024 - Does the GPT log monitor show AI credits usage by the Meeting agent? Sep 13, 2024 - How can I change the name of the meeting agent? Sep 06, 2024 - How can I revoke a meeting agent from a meeting I'm not hosting? Sep 06, 2024 # Calendar integration # Calendar integration Connect your calendar to start working effectively with meetings and events in Tana, and get notifications before upcoming meetings. Now available on Tana Pro and Plus. > Last edited: January 7th, 2025 ## [Overview](#overview) **Connect your Google Calendar to import calendar events to Tana.** **Easily take notes on all your video calls** that are synced from your calendar using the [Meeting agent](/docs/meeting-agent) **The connection is a one-way sync.** Changes you make in Google Calendar will sync to Tana, but not vice versa **Calendar sync is only available on a Tana paid subscription.** It requires AI credits to classify incoming events. ## [Basics](#basics) - **Initial setup:** When you sign up for a trial or upgrade to a Tana paid subscription, you will have the opportunity to connect your Google Calendar with Tana. **_It can be a different account than the one you use to log in to Tana._** - **See events on daily notes page:** By default we create a Related content section on your daily notes page where you will see all the synced events for the day. Click on events to zoom into them and take notes (or send your meeting agent, see below) - **Open events to schedule/send the Meeting agent to the meeting:** When a synced meeting has a Meeting link (Zoom, Google Meet... Coming soon: Teams), you can send a Meeting agent to take notes for you during the meeting. For more on that, see [Meeting agent](/docs/meeting-agent). - **Your calendar data gets enriched with each meeting:** When we sync your contacts to Tana, they all get tagged with #person. With every meeting you have with them attending, the Meeting agent can help you remember things they said about themselves by adding these facts under Background info. As you have more meetings, your CRM is basically making itself. - **Meeting notifications:** Get notifications for upcoming meetings 2 mins before the meeting starts, clicking the notification will open the meeting node in Tana + the meeting link, making it easy to take notes and add the meeting agent ## [Detail](#detail) ### [The synergy between the Calendar integration and Meeting agent](#the-synergy-between-the-calendar-integration-and-meeting-agent) The Meeting agent and Calendar integration are two intertwined features that are meant to work together. The calendar integration is not just a convenient way to see your events on the day node. It is an opportunity for AI to help build out your knowledge graph: - It syncs your meetings to Tana so you have a place to prepare for meetings, write notes and agenda points beforehand - The [Tana Desktop app](/docs/tana-for-desktop) can send you notifications about upcoming meetings, allowing you to add the meeting agent easily. - The meeting agent uses AI to attend and take notes during the meeting for you. - All notes are saved back in Tana on the meeting node, and connects back to your knowledge base. When the Meeting agent creates notes, it does the following: **Writes a concise, interconnected meeting summary**: Your meeting summaries are no longer siloed on a different AI transcription platform just for meeting notes. They now live in Tana with the rest of your knowledge, connected to things in the transcript and in your graph. **Creates action items based on the conversation:** It picks up all the tasks, agenda items and decisions that come out of a meeting **Adds new items to your knowledge base:** Things will get mentioned in meetings that you don't have an existing node for. AI detects cities, states and countries, and will add them to your graph as references wherever they are mentioned. It also detects products (like "ChatGPT") and companies (like "OpenAI"). **Builds a CRM:** Meetings usually have Attendees. By syncing your contacts, AI can enrich the information on these contacts with facts that it learns from meetings. Joanne is not just a generic contact in your CRM anymore, they went golfing last weekend with their husband and really enjoy a good Pinot Noir (good to know when getting a birthday gift). Go here for more on the [Meeting agent](/docs/meeting-agent). ![](https://cdn.sanity.io/images/rfb95wph/production/e88fb10e1b4d041da6954737d352857eed69befb-2272x1504.png?w=3840&q=75&fit=clip&auto=format) ### [Initial setup](#initial-setup) #### [Grant Google authorization](#grant-google-authorization) - When you start the setup, you will be asked for a separate authorization for the Google Calendar integration. **Note: You can use a different account than your Tana account for calendar sync.** - Checking the boxes grants Tana permission to access calendar events and contacts, nothing else. We recommend checking all the boxes for the calendar integration to work properly. - Then, select which calendar you want to sync. - Once you're through the flow, your Google calendar will be ready to do an initial sync. - Tana will sync one week of events at the time. The sync will also trigger when you navigate to days that haven’t been synced yet. #### [Google Calendar configuration](#google-calendar-configuration) - To change anything about the configuration of the calendar later, you can go to `Settings` > `Google Calendar settings` - For more on that, see [Calendar settings](#calendar-settings) #### [Desktop notifications](#desktop-notifications) When you install the Tana Desktop app, and have Google Calendar synched, Tana will by default send you meeting notifications. - A notification will be shown 2 mins before an upcoming meeting - Clicking the notification will open the meeting link (Google Meet, Teams, Zoom etc) and open the meeting node in Tana, so you can start taking notes or add the meeting agent. If you would like to disable desktop meeting notifications, you can go to the system menu for Tana desktop, click Options and toggle "Meeting notifications" off: ![How to toggle meeting notifications off in Tana Desktop system menu](https://cdn.sanity.io/images/rfb95wph/production/caa9149c437ef72370291935d5e1cedb139a3a1c-562x233.png?w=3840&q=75&fit=clip&auto=format) ### [What gets synced from the calendar, and where do they go](#what-gets-synced-from-the-calendar-and-where-do-they-go) Two nodes are created in the Library: `Google Calendar Events` and `Google Calendar Contacts`. We don't encourage users to go here often, this is just the place where things are stored. To change target nodes for people and events being synced, see [Calendar settings](#calendar-settings) ![](https://cdn.sanity.io/images/rfb95wph/production/884b198304b88e630ff770d148d3e672afeb699e-2000x1185.gif?w=3840&q=75&fit=clip&auto=format) #### [The integration is a one-way sync](#the-integration-is-a-one-way-sync) This means that some content coming from the sync cannot be edited by the users. If they are changed, the next sync will overwrite this with the existing information from the calendar. This means that any changes to events need to happen in Google Calendar, not in Tana. Here's a list of information coming from Google that is mapped to the corresponding Tana calendar sync settings. See [below](#raw-configuration) for the full list. These would be not editable in Tana due to their Google Calendar counterparts updating them regularly: - \["Google term"\] -> \[Tana calendar config term\] - "Summary" -> Node name - Start/End time -> Date field (user field) - Attendees -> Attendees field (user field) - HTML link -> Calendar link (system field) - Conference Link -> Event meet link URL (user field) - Description -> Event details (user field) - Status -> Event status (system field) #### [The Google Calendar Contacts node](#the-google-calendar-contacts-node) All contacts that are part of the invite list of an event are added here By default, a person looks like this: ![](https://cdn.sanity.io/images/rfb95wph/production/cabc823adc2953d35e427d4e625596d070f7fe48-2146x1072.png?w=3840&q=75&fit=clip&auto=format) #### [The Google Calendar Events node](#the-google-calendar-events-node) All events are added here By default, an event looks like this: ![](https://cdn.sanity.io/images/rfb95wph/production/4647cc71889f3c635a3e78a04742d5c4a7c26162-2134x980.png?w=3840&q=75&fit=clip&auto=format) #### [Changing the names of events](#changing-the-names-of-events) Event names are locked because the names are directly tied to Google Calendar. To change the name of the meeting, change it in Google Calendar, or use a title expression on the #meeting tag to override it. #### [Recurring events](#recurring-events) Recurring events have a special identifier so Tana knows which events happened previously or are upcoming for the series. These can be found in the Related content section on the meeting node: ![](https://cdn.sanity.io/images/rfb95wph/production/8c2a2178343f2f21600e6d1a11f67675deefd596-1716x736.png?w=3840&q=75&fit=clip&auto=format) #### [Events on your daily notes page](#events-on-your-daily-notes-page) If you are on a Tana paid subscription, the calendar events of the day will show up on your daily notes page as a search node in _Agenda_, a related content section. If you want to learn more about how this works, see [Related content](/docs/related-content). ![](https://cdn.sanity.io/images/rfb95wph/production/a2134684600b4070e6ac6ac441eaa7d8e7fcfb52-2324x1626.png?w=3840&q=75&fit=clip&auto=format) On this page, the `Configure calendar sync` option in the three-dotted menu on your daily notes navigation takes you to the Google Calendar settings: ![](https://cdn.sanity.io/images/rfb95wph/production/05b355e059c0db5271b7a46f46a078a26f52d562-4538x2553.png?w=3840&q=75&fit=clip&auto=format) #### [Triggering sync](#triggering-sync) Tana syncs new events from your calendar within set intervals. If you know a new event in your calendar hasn't shown up in Tana yet, you can manually force a refresh by running the command `Force calendar sync` on the title of the day/week node. ### [Calendar settings](#calendar-settings) The calendar settings give you the option to change which calendars are being synced from your Google account, which fields are used to map information from Google to Tana, and which supertags to use to classify events with. #### [How to get to Calendar settings](#how-to-get-to-calendar-settings) Go to Settings, then Google Calendar settings: #### [General config](#general-config) Here you can choose which calendars you want to sync to Tana. You can also disconnect your calendar connection with Tana. ![](https://cdn.sanity.io/images/rfb95wph/production/5d806aa7505a0b2a977fa011479413232a95657a-2058x1424.png?w=3840&q=75&fit=clip&auto=format) #### [Classification of events](#classification-of-events) When events are imported into Tana, they can be given a specific supertag according to the type of event it is. Here's a detailed description of what each of them means: Title: Description Parameters Meeting: The most common type of event. Attendees: Min. 2 Block: A block of time with no attendees Keywords: gym, lunch, dnd, busy, hold, traveling, driving, appt; Attendees: Must be 0 Full day event: An event that last the entire day Note: Must be checked as a full-day event in calendar Task: A chore that needs to be completed Keywords: prepare, send, draft, create, finish, follow up, review, action item, to-do; Attendees: Must be 0 Investor meeting: A meeting with an investor Keywords: investor meeting, VC touchpoint, funding discussion, venture meeting, capital call, shareholder update; Attendees: Min. 2, has external participants User interview: A discussion with a user about their experience with a product. Keywords: user feedback, onboarding, product usage interview, user experience research, usability test; Attendees: has external participants; Note: not recurring Hiring interview: An interview with a candidate or applicant for a job. Involves external participants. Keywords: interview, candidate, hiring, coding test, applicant, talent acquisition, job interview; Attendees: Min. 2, has external participants Out of office: Time away from home, business travelling, recreation or vacation Keywords: OOO, out of office, vacation, traveling, holiday, PTO, time off, annual leave, leave of absence; Attendees: must be 0 Two person meeting: A two person meeting that is not a 1:1 Keywords: NOT: 1:1, 1-1, one-on-one, check-in, catch up, personal meeting, individual sync; Attendees: Must be 2; Note: not recurring One-on-one: A two person check-in, sync or catch up aimed at providing mentorship, feedback, or discussing personal development. Keywords: 1:1, 1-1, one-on-one, check-in, catch up, personal meeting, individual sync; Attendees: Must be 2, only internal participants; Note: recurring Standup: A brief, regular meeting held to discuss team members' daily progress. Keywords: standup, huddle, scrum, daily meeting; Attendees: Min. 2, only internal participants; Note: recurring **Note: These classes can currently _not_ be changed, or added to.** You can specify which tag to apply for that kind of event ("Tags to set"), and you can set a command that will trigger whenever this event is identified ("On classified"). ![](https://cdn.sanity.io/images/rfb95wph/production/e18e9d5dab486cf199b9a7293190fa70a9655685-2055x1423.png?w=3840&q=75&fit=clip&auto=format) #### [Advanced](#advanced) #### [—Target configuration](#target-configuration) Setting an event and contacts target ensures that when they're created, they get saved in that target location. There are a number of restrictions on where you can save Event and Contact nodes. If you decide to choose another target, there will be some warning messages to guide you. ![](https://cdn.sanity.io/images/rfb95wph/production/16a33b1f5f312bdfe3349c52a9529f361f4ec64a-1573x885.png?w=3840&q=75&fit=clip&auto=format) #### [—Raw configuration](#raw-configuration) If you need to change a field or supertag that the calendar sync uses to populate Tana events, this is where you would do it. There's a lot of raw config exposed, so tread carefully when making changes. Note: You'll see supertag definitions and field definitions in the config. This is a reminder that they look like this, respectively: ![](https://cdn.sanity.io/images/rfb95wph/production/95f3acdf505427752876866543a52bc4667bf7f6-1111x625.png?w=3840&q=75&fit=clip&auto=format) **Enabled Calendars:** Shows the calendars that are being synced. Your personal calendar is usually shown as an email. **Attendees field:** The field in your meeting tag where attendees will be listed, if any. Default name: Attendees **Attendee supertag:** When attendees are downloaded from an event, Tana will try to match them to instances of this supertag using their email. Default name: person **Attendee email field:** The email field of the Attendee supertag that Tana will match incoming event attendees with. Default name: Email **Date field:** The field used to store the date and time of the event. Default name: Date **Event URL field:** The field used to store the link to the original calendar event. Default name: Calendar Link **Event details field:** The field that stores the details/description of an event. Default name: Action items **Event status field:** The field that stores the status of the event. Possible status options: Tentative, Confirmed, Cancelled, Declined. Default name: Event Status **Event classification config:** Same as [Classification of events](#classification-of-events) **Event Destination:** Same as [Target configuration](#target-configuration) **Contacts Destination:** Same as [Target configuration](#target-configuration) ![](https://cdn.sanity.io/images/rfb95wph/production/e2d1eccb843aa19cd99d627b5b4e5c70a6c69418-1450x2836.png?w=3840&q=75&fit=clip&auto=format) #### [Other calendar services](#other-calendar-services) The calendar sync is currently only available for Google Calendar. We hope to expand on these offerings in the future. #### [Multiple calendar sync](#multiple-calendar-sync) We do not support syncing multiple calendar accounts to Tana at the moment. There is a workaround where you can have other calendars sync to a single Google Calendar account, so they appear in Tana. For instructions on this, see [Can I sync multiple calendars to Tana?](/faq/can-i-sync-multiple-calendars-to-tana) Copy link Rate article ## Related FAQs [See all](/faq) - How do I change the tags used in the meeting agent and calendar integration? Dec 03, 2024 - Can I sync multiple calendars to Tana? Sep 27, 2024 - Can I sync a calendar to other workspaces? Sep 27, 2024 - Does Tana provide two-way calendar sync? Sep 27, 2024 - Why are my synced calendar events not getting tagged? Sep 27, 2024 - I have two Agendas on the daily node. How do I fix this? Sep 27, 2024 - Where is the calendar in Tana? Sep 27, 2024 # Voice memo # Voice memo Transform your voice memos into structured content with Tana mobile. Record, transcribe, and organize your thoughts with powerful AI-powered features. Who knows, your brain dump could turn into a list of tasks, or your next magnum opus. > Last updated: January 27th, 2025 ## [Overview](#overview) **Voice memos in [Tana mobile](/docs/tana-mobile) are a fast way to get your thoughts out of your head and into Tana for further processing.** Your recordings are instantly transcribed on the server and can be automatically structured with the guidance of supertags and fields. The new iOS app (and soon Android!) provides instant transcription, supports 91 languages, and maintains easy access to original recordings through source material. **When a voice memo is recorded, it gets sent to your current daily note** and is instantly transcribed and enriched by entities in your Tana. **You can further process voice memos using Rewrite**, an AI feature for rewriting transcripts into other types of content. ## [Basics](#basics) - **Quick start**: In Tana mobile, go to Capture and start a voice memo. Speak, then stop it when you're done - your memo will be automatically transcribed and sent to the default Destination. - **While recording:** - **Select supertag to add structure**: Tap "Supertag" to select a Supertag and to see its fields. Mention the field names explicitly for better auto-fill (e.g., if your field is called "Next steps", say "_Next steps... send the proposal to client for review_") - **Change target Destination**: Tap "Destination" before recording to send to a different location. Pick from Today, Inbox, and pinned nodes. - **Select transcription language:** Tana mobile will default to the system language of the device the first time it records a voice memo. You can choose another language from here. - **Recording limit:** 1 hour per memo - **Rewrite:** Once the voice memo is transcribed in Tana, you can take the transcript and turn it into something else using AI. The default options include _Summary_, _Pros and cons_, _Article_ and _Tweet._ If a custom rewrite command is present, it will hide the default ones. Supertags may offer custom rewrite options, tailored to that content. - **Access the original recording**: Find a voice wave icon next to any voice memo node to access the original recording - **Only available on paid subscriptions:** This feature requires AI and is not available on plans that do not include AI credits. It uses approximately 50 AI credits per 15 minutes of transcription ## [Details](#details) ### [How to record a voice memo on mobile](#how-to-record-a-voice-memo-on-mobile) In the Tana mobile app, open the Capture tab and start a voice memo: ![](https://cdn.sanity.io/images/rfb95wph/production/3938fc8edbaac8a843785a6c6cb5a1085538536a-1881x1881.png?w=3840&q=75&fit=clip&auto=format) The Capture tab Once started, you will see the blue wave bars respond to what it hears: ![](https://cdn.sanity.io/images/rfb95wph/production/86b5a6c9f758ba7c40a7cb22dce7249bfb2d1f1b-1881x1881.png?w=3840&q=75&fit=clip&auto=format) Voice recording view While recording, you can do the following: - Select a Supertag to use as a template (optional) - Select a Destination (default shown as Today) - Select a Language (bottom left, default shown as English) Once done, complete the voice memo by hitting the blue send button, and it will be sent to the destination specified. #### [Select a supertag](#select-a-supertag) ![](https://cdn.sanity.io/images/rfb95wph/production/1c8e69bb6e7118ed46e64916fd42672a3007b1b2-1881x1881.png?w=3840&q=75&fit=clip&auto=format) Pick a supertag to see fields that Tana will pick up content for Select a supertag to make its fields appear in the recorder interface. - For supertags with many fields, scroll down to see the rest. - Mention the field names for better auto-fill accuracy (e.g., "_Highlight of the week_... having lunch with an old friend")for Supertags with many fields, you can scroll down. - Additional content will appear below auto-filled fields #### [Select a destination](#select-a-destination) ![](https://cdn.sanity.io/images/rfb95wph/production/5d5071fc9ec0146442edb801904159085aa5f603-1793x1793.png?w=3840&q=75&fit=clip&auto=format) Destinations include Today, Inbox, and any pinned node Today is the target destination by default. - To change that, long-press on the new target and confirm. - Options for destinations include Today and Inbox, plus any pinned node. #### [Note for Inbox users](#note-for-inbox-users) If you have set up your own command looking for audio files, or have tweaked the standard _Inbox Audio Processing Command_ on the Inbox – this will still work, but you will not get the new voice memo processing. Existing commands on the Inbox will continue to work as before, but be aware that these will require activity on the desktop client to run the processing, so the output will not be instantly available on mobile like with the new processing. **If you want to keep using the Inbox, you have two options (open link for instructions):** A) [I want to keep using the Inbox as destination, but with the new processing](https://tana.pub/3TTiLJ92Pvp5/a-i-want-to-keep-using-the-inbox-as-destination-but-with-the-new-processing) B) [I want to keep using the Inbox with my own command/processing](https://tana.pub/d4RtQBswCYa0/b-i-want-to-keep-using-the-inbox-with-my-own-commandprocessing) #### [Select a language](#select-a-language) ![](https://cdn.sanity.io/images/rfb95wph/production/b4fb9c96fa5e8e58ca4b6b06bf492ecfa82f7f03-1881x1881.png?w=3840&q=75&fit=clip&auto=format) 91 language options - **Default**: Uses your phone's system language - **Auto-detect**: Works best for most common languages - **Manual selection**: For best results with short memos in non-English languages, manually select the language. Choose from 91 supported languages. #### [Recording Limits](#recording-limits) - **Current limit:** 1 hour per recording - System notifies you when approaching the limit #### [Other ways to invoke voice recording on Tana mobile](#other-ways-to-invoke-voice-recording-on-tana-mobile) There are several ways to initiate voice memos using Tana mobile: - **From the Capture tab**: Press Capture, and select Voice memo - **From Supertag tab**: Click the voice icon on a Supertag to start recording immediately. - **From any node**: Press the blue plus button on the bottom right to get all the capture options - **From the iOS lock screen**: Add the voice memo widget to your lock screen ### [Processing mobile voice memos](#processing-mobile-voice-memos) Once you have recorded a mobile voice memo, it will immediately be available on desktop and mobile: - **If no tag was selected:** it will contain a cleaned-up transcription and will offer default options to **Rewrite** content. - **If a supertag was selected:** Tana will run AI processes to fill in as much of its contents as possible, including title, description and fields - **Source material:** Access the original recording and raw transcript via the voice wave icon present on the main node or node options menu. #### [Rewrite](#rewrite) You can find the Rewrite options on the top-right of the voice recording. _Pre-installed Supertags, or Supertags installed from Templates, may offer **custom** rewrite options tailored to that content, and the built-in Rewrite option will then not be shown._ The built-in rewrite offers these options, and will open a suggestion in a temporary draft panel: **Summary**: Generates a summary of the transcript **Pros and cons**: Generates a list of pros and cons. Tag the title with #article to publish and share immediately with Tana Publish **Article**: Generates an article you can publish and share immediately with Tana Publish **Tweet**: Generates drafts of short-form social media posts ### [How to adjust your voice memo workflows](#how-to-adjust-your-voice-memo-workflows) #### [AI instructions](#ai-instructions) In addition to using the supertag/field name and description as context for AI, Tana lets you add AI instructions on supertags or fields. This helps AI understand what the content is about, how you want the output formatted and give specific instructions. The AI instructions will be used when a supertag or field is included in autofill or mobile voice memo processing. AI instructions support plain text, references and markdown. Common markdown formatting that may be useful: - \[ \] for checkbox - \# for Heading _Search nodes are not supported in AI instructions._ Open supertag/field configuration panel to edit the AI instructions: ![Field for adding AI instructions in Tana](https://cdn.sanity.io/images/rfb95wph/production/083f718b98a68052d757125a98e2fc7389e5787a-773x486.png?w=3840&q=75&fit=clip&auto=format) #### [Custom Autofill options](#custom-autofill-options) If you enable "Custom Autofill behavior" on a supertag, you can decide if you want Tana to try to autofill the node title, description and content/body. This includes the ability to set AI instructions specifically for each of these. - **Title** - This could be used e.g. if you want to include the date in a certain format. - **Description** - how you want the description of the node, e.g. "Make a one line summary of what the memo was about" - **Content** - This could be used to specify a format you want for the body text instead of a basic transcript, e.g. "Make it a 140 character tweet" for a #tweet tag, or "Format it as an email". To enable Custom Autofill behavior for voice memos, open the supertag configuration panel > AI and Commands. ![Example of custom autofill settings in Tana](https://cdn.sanity.io/images/rfb95wph/production/97f901d25248f3a73263cb9e2b72114a0a3a97d1-787x979.png?w=3840&q=75&fit=clip&auto=format) #### [Extract items](#extract-items) If you have a supertag that you use for voice memos, where you would like Tana to try to extract multiple tagged items from one recording, you can select a supertag in the Extract items field under Custom Autofill behavior. Tana will also try to autofill any fields on the tagged items it finds. It's only possible to select one supertag to extract items for. ![Example of extracting multiple items from one voice memo](https://cdn.sanity.io/images/rfb95wph/production/4ac28c3545618ac98e10c87d529fdb06880fdbe9-883x499.png?w=3840&q=75&fit=clip&auto=format) #### [Exclude fields from autofill](#exclude-fields-from-autofill) If you have some fields you never want Tana to autofill, you can add them in the "Fields to exclude" section under Custom Autofill behavior. Open the field you want to exclude, copy the field, and paste it into the "Fields to exclude" section. You can exclude a field by right-clicking and selecting: Disable autofill for field ![Right-click to disable autofill for field](https://cdn.sanity.io/images/rfb95wph/production/9884e6bd2b3a017e86bf53ee7765f0f8471e8664-416x349.png?w=3840&q=75&fit=clip&auto=format) #### [Edit Rewrite prompts in Prompt editor](#edit-rewrite-prompts-in-prompt-editor) If you have [AI commands](/docs/ai-command-nodes) that appear as [command button](https://tana.inc/docs/command-nodes#commands-as-buttons)s for voice memos, you can iterate on the prompt directly in the draft panel by clicking "Run again": ![Run again button in draft panel will open prompt editor](https://cdn.sanity.io/images/rfb95wph/production/7df8479679c5caaa11673f16d795987da16b253c-844x553.png?w=3840&q=75&fit=clip&auto=format) By clicking Edit, you open the prompt from the underlying command, and can edit this to get the output you want. Changes will be saved to the underlying command when you click "Run again", and a new draft will be generated: ![Prompt editor allows editing of the prompt in the underlaying rewrite command](https://cdn.sanity.io/images/rfb95wph/production/c6cbdde69ee012fb8f57bbba656fb63906dd0b93-876x787.png?w=3840&q=75&fit=clip&auto=format) If you want to make more advanced prompts, referencing specific parts of the node or your graph, see [Prompt expression keywords](https://tana.inc/docs/ai-command-nodes#prompt-expressions). ### [Known issues with mobile voice memos](#known-issues-with-mobile-voice-memos) - Auto-initialization of fields works only for date fields - Search nodes not supported in AI instructions - Multiple items from single recording currently limited - Auto-fill can't be disabled ## [Desktop voice memos](#desktop-voice-memos) There are two ways to record voice memos in Tana on desktop: 1\. Live transcription 2\. Record an audio file ### [Live transcription](#live-transcription) See the notes in real-time as you talk, either for voice memos or in meetings. There are several ways to start real-time transcription in Tana: - **Type / (slash)** on an empty node, and choose "Live transcription" from the menu. The transcript will be shown below a new node where you can set a title. - **Create new button in sidebar > Start live transcription**: Transcribes into the new node you created. New nodes like this are created on your Today page. - **Audio-enabled fields**: Enables an audio button on the field. Pressing it triggers live transcription, with the transcript stored into the field. Set this up in [field configuration](/docs/fields). ![](https://cdn.sanity.io/images/rfb95wph/production/934a13a57f69d37452bbd0473e302eb1fc251b7c-1050x591.png?w=3840&q=75&fit=clip&auto=format) Live transcription currently supports these languages: - Chinese - English - French - German - Italian - Korean - Portuguese - Spanish #### [Change live transcription language](#change-live-transcription-language) To change the transcription language: - Live transcription on a node: Click on the globe 🌐 icon - Audio-enabled fields: Shift+click on the record button ![](https://cdn.sanity.io/images/rfb95wph/production/08a82ead62319ddc97bbecc51c6c3a1d93685bf0-998x446.png?w=3840&q=75&fit=clip&auto=format) Audio-enabled field ### [Record an audio file](#record-an-audio-file) To start capturing a voice memo (no live transcription, no output shown until you stop the recording), you can type `Ctrl/Cmd+K` > `Capture voice memo`. A recording indicator will be shown in the sidebar, and you can click this to stop the recording. If you're using the [Tana Desktop app](/docs/tana-for-desktop), you can do `Cmd/Ctrl+Shift+E`: This starts global live transcription that runs in the background. A floating recording menu will appear, and lets you stop the recording: ![Recording indicator for global voice memo in Tana Desktop app](https://cdn.sanity.io/images/rfb95wph/production/36afaf18d513705eae392237d70210e13e8d1c66-990x578.png?w=3840&q=75&fit=clip&auto=format) All recordings will be **sent to the Inbox**, which you'll see in the sidebar. If your voice memo is not automatically transcribed, you can put your cursor on the title and do `Ctrl/Cmd+K` >`Transcribe audio`. Unless you specified a default language to use during onboarding, your language is likely set to `auto-detect`. If you're not having good results with this, you can specify a preferred language: - Command line: `Set default transcription language to →` or `Transcribe audio as..` and select a language Desktop voice memos support more than 90 languages. Copy link Rate article ## Related release notes [See all](/releases) - ImprovedWe now have an option to manually transcribe audio from audio files, available in the right click context menu when a node has audio [(2025 / wk 6)](/releases/2025-wk06) - FixedFixed an issue with supporting language codes with 3 letters such as Cantonese [(2025 / wk 6)](/releases/2025-wk06) - InfoDisabled support for Basque (eu) when transcribing using Whisper as OpenAI throws an error for these calls now. [(2025 / wk 6)](/releases/2025-wk06) - InfoOptional field will no longer be shown in audio recorder in iOS app, as they will not be autofilled [(2025 / wk 6)](/releases/2025-wk06) - FixedWe fixed an issue where the voice memos did not respect the users timezone when filling out date fields. No more jetlag. [(2025 / wk 5)](/releases/2025-wk05) - FixedAutofill when capturing using mobile voice memo will override default values in fields. The autofill fields command behavior is unchanged, and will not override existing field values. [(2025 / wk 5)](/releases/2025-wk05) - FixedWe improved quality of our voice memo flow by giving the LLM more context when reviewing the filled fields. [(2025 / wk 5)](/releases/2025-wk05) - ImprovedCustom Autofill improvements for voice memo only: 1. Toggle to include or exclude for autofill, 2. AI instructions for content and support for autofilling based on that. [(2025 / wk 02)](/releases/2025-wk02) - ImprovedRewrite as - should now be more likely to use the same language in the output as the transcript [(2024 / wk 47-49)](/releases/2024-wk47-49) # Tana AI # Tana AI Tana AI provides access to the best LLMs in the world (OpenAI, Claude), pairing each task with the ideal model for the job. ## [Overview](#overview) **Since the beginning, Tana was always meant to work with AI.** After extensively testing with our users on the possibilities, we are now officially building and integrating AI into Tana. **We're calling this Tana AI.** **Tana AI provides access to the best LLMs in the world.** We pair each task with the ideal model for the job. Every model will already be fine-tuned for use in Tana, so you don't have to worry about that. **All savings we receive on volume pricing are yours.** When you sign up to a Tana paid subscription, you get access to not only all the fine-tuned AI models we subscribe to, but also the volume pricing we receive. **There is no need to bring your own AI API keys to Tana anymore.** But if you want to use your own key for some things, we have left two commands (Ask AI + Ask AI (non-streaming) that you can use with your own OpenAI key. **AI should be like electricity: you turn it on, and it just works.** ## [Basic](#basic) - There are many features in Tana that work with AI. For an extensive list, see the next section on [Features using AI](#features-using-ai). - **You can chat with your knowledge using AI in Tana!** AI chat comes in two flavours: `Ask AI` where you get a standard chat, and `Ask AI about` this content which takes into consideration the context you add into the chat. - **Talk to Tana and get your thoughts transcribed straight where you want it.** Use live transcribe or audio-enabled fields and tags to speak straight into Tana. - **Tana AI requires a paid subscription.** You can only use AI in Tana if you are on a paid plan. - **AI actions require credits to run.** Monthly AI credits are included in any paid subscription. Credits can be topped up as you need. ## [Features using AI](#features-using-ai) ### [Mobile voice memos](#mobile-voice-memos) Instantly capture ideas, thoughts or plan your day by talking to your phone. Tana will transcribe your memo and turn it into structured content by autofilling fields if you apply a supertag. See more in [Voice memo](/docs/voice-memo) ![](https://cdn.sanity.io/images/rfb95wph/production/1c8e69bb6e7118ed46e64916fd42672a3007b1b2-1881x1881.png?w=3840&q=75&fit=clip&auto=format) Pick a supertag to see fields that Tana will pick up content for ### [AI chat](#ai-chat) Helps you iterate on, rewrite or get insights from your content. Edit AI responses and apply Supertags to parts of responses to add them directly into your notes. See more in [AI chat](/docs/ai-chat). ![Getting AI responses formatted as table](https://cdn.sanity.io/images/rfb95wph/production/23844fde427dd58ae1c45ea8b2a29d75b89e8e0c-1802x1436.png?w=3840&q=75&fit=clip&auto=format) ### [Meeting agent](#meeting-agent) Records, transcribes and extracts tasks from you meetings, and generates a shareable summary. See more in [Meeting agent](/docs/meeting-agent). ![](https://cdn.sanity.io/images/rfb95wph/production/8933d2808650e04523f18bcc14e1c0a32bfe5efa-3896x2192.png?w=3840&q=75&fit=clip&auto=format) ### [Calendar integration](#calendar-integration) The Google Calendar integration will import your meetings, classify them with the right supertag and show them in a calendar on your Today page, so you can start taking notes with one click. Get notifications for upcoming meetings to take notes with one click. See more in [Calendar integration](/docs/calendar-integration). ![Get meetings into Tana with calendar integration](https://cdn.sanity.io/images/rfb95wph/production/56016960bdfd2653aa6f715ab73da48ee117a230-2274x1696.png?w=3840&q=75&fit=clip&auto=format) ### [Live transcription](#live-transcription) See the notes in real-time as you talk, either for voice memos or in meetings. See more in [Live transcription](https://tana.inc/docs/voice-memo#live-transcription). ### [AI commands and events](#ai-commands-and-events) #### [AI commands](#ai-commands) Several new AI commands have been added that provide powerful AI tools to a Tana near you: - **Add meeting bot**: Sends a meeting agent to a video call to transcribe what participants are saying - **Text processing agent**: Takes a transcript, extracts information and puts it in a target location. For more on command nodes, see [AI command nodes](/docs/ai-command-nodes) #### [Events](#events) We have added a new way to trigger commands to happen when nodes are added or removed from another node. They are called Events, and can be set up for any node and supertag. **For nodes**: Run Configure node and go to On child added/On child removed: ![](https://cdn.sanity.io/images/rfb95wph/production/c83fade8e5d7a09f9cbb25fc7fa0a0319b2e843b-994x559.png?w=3840&q=75&fit=clip&auto=format) **For supertags**: Go to Supertag config > AI and Commands > On added/on removed ## [Details](#details) Tana comes with several tools for managing AI work: ### [AI credits](#ai-credits) ![](https://cdn.sanity.io/images/rfb95wph/production/31168987be7425f562158ca0222e2b107d88ffce-2046x1151.png?w=3840&q=75&fit=clip&auto=format) All Tana paid subscribers get 5000 credits every month to spend on AI actions. This translates to the following: - **22x30** min meetings - **125** AI generated images - **570** blogposts generated - **25** hours of transcribed voice transcription If you are out of credits, you can buy more from the AI credits section here. ### [GPT log monitor](#gpt-log-monitor) The command line `Open GPT log monitor` will open a monitor that shows you how many credits are being used for various AI work. Right now it only shows credits spent using OpenAI models. We hope to add support for other models in the future. Click on the line items to expand and see the payloads. ### [AI for builders](#ai-for-builders) The Tana Labs experiment _AI for builders_ is what kickstarted the work on AI in Tana over a year ago. All the things you were able to do with AI for builders, you can do with a Tana paid subscription, without the need to bring your own key. For more detail, read the [AI for builders](/docs/ai-for-builders) page. Copy link Rate article ## Related release notes [See all](/releases) - ImprovedWe now support o3-mini in most AI commands, such as Ask AI and AI Chat. We currently only offer "reasoning effort" set to the default, which is medium. This has improved cost per token over GPT-4o, which about the same performance. However, reasoning tokens might cause costs to increase in total. [(2025 / wk 6)](/releases/2025-wk06) - ImprovedThe new prompt expression system nodes are now also available in the System prompt field on chat agents [(2025 / wk 6)](/releases/2025-wk06) - FixedWe made a change to AI prompt processing to automatically expand all search nodes, but this caused far too much irrelevant content to be sent to AI processing in some cases. We are reversing this change for now, note that you can always specify that reference nodes should be expanded by using the Expand references system field. [(2025 / wk 6)](/releases/2025-wk06) - FixedFix for Claude not working with custom agents that have an initial prompt [(2025 / wk 6)](/releases/2025-wk06) - NewClaude from Anthropic is now available as a custom model in commands where you can configure model. [(2025 / wk 5)](/releases/2025-wk05) - ImprovedAsk AI command (streaming) now supports the prompt workbench [(2025 / wk 5)](/releases/2025-wk05) - FixedWe fixed a bug where some users could not use Claude in Ask AI command nodes [(2025 / wk 5)](/releases/2025-wk05) - ImprovedWe added a new parameter to Ask AI command nodes, to request output to be opened in new panel. (See Draft Panel) [(2025 / wk 5)](/releases/2025-wk05) - FixedThe Transcribe audio system command now supports nodes with source material. [(2025 / wk 5)](/releases/2025-wk05) - FixedMade sure that prompt workbench uses the same default AI model as the AI command nodes [(2025 / wk 5)](/releases/2025-wk05) - ImprovedAutofill will now set default values for fields from extract tagged entities. (E.g., when using the Extract tagged item-fields, autofill will now work better for the tagged nodes extracted into those fields) [(2025 / wk 5)](/releases/2025-wk05) - FixedWe fixed an issue where the voice memos did not respect the users timezone when filling out date fields. No more jetlag. [(2025 / wk 5)](/releases/2025-wk05) - NewWe introduced the command node Start AI Chat, and support for custom chat agents, which can specify model, temperature, system prompt, initial prompt and initial greeting (all with support for prompt expressions). They can also be given commands available to run from inside the chat. [(2025 / wk 5)](/releases/2025-wk05) - NewWe introduced the new Draft panel! With prompt editing! The updated draft panel makes it easier to review and edit AI generated results. In combination with the new ability to view and edit the prompt, Tana now offers a simple and powerful way to iterate together with AI. [(2025 / wk 5)](/releases/2025-wk05) - ImprovedWe now use Tana headings when appropriate for content received from AI (you can ask for "Markdown headers" explicitly in your prompt if you want) [(2025 / wk 03)](/releases/2025-wk03) - ImprovedWe have added meta-prompt generation for the generate image dialogue (ie. we first ask GPT to rewrite to a more complete prompt, before generating the image) which gives better results. We also stopped writing the result of the meta-prompt generation into the description of images, when using the Generate image with DALL-E command node. [(2025 / wk 03)](/releases/2025-wk03) - FixedFixed bug where AI-generated images could not be shown full screen. [(2025 / wk 03)](/releases/2025-wk03) - ImprovedCustom Autofill improvements: 1. AI instructions for the title, 2. AI instructions for the description, 3. Actually support autofill description when enabled (disabled by default), 4. Update the default values in the configuration panel for custom autofill behavior to reflect the actual defaults and resolve the bug with toggling those values. [(2025 / wk 02)](/releases/2025-wk02) - ImprovedCustom Autofill improvements for voice memo only: 1. Toggle to include or exclude for autofill, 2. AI instructions for content and support for autofilling based on that. [(2025 / wk 02)](/releases/2025-wk02) - ImprovedRemoved global system prompt from Ask AI, no longer necessary given improved LLM models. [(2024 / wk 47-49)](/releases/2024-wk47-49) - InfoAdded GPT4o-2024-11-20 as a model choice (not yet default model) [(2024 / wk 47-49)](/releases/2024-wk47-49) ## Related FAQs [See all](/faq) ## Question - Can I use my own OpenAI API key in Tana? Jan 29, 2025 - How much AI is included in Tana's subscription plans? Jan 08, 2025 - How fast does Tana update to the latest AI models? Sep 13, 2024 - Does the GPT log monitor show AI credits usage by the Meeting agent? Sep 13, 2024 - How are AI credits used on shared workspaces? Sep 06, 2024 ## Examples - Use AI to connect Readwise tags to my list of topics Sep 13, 2024 Copy link The Tana API that is used to power the Readwise integration is exactly the same (and therefore has the same limitations) as the Input API. It can only write new nodes to Tana, and the API can only write a single value to new fields. So, to get all your tags out of Readwise, we recommend a comma-separated format, and then using AI to link to the correct nodes in your graph. Here's a video of how it works (no audio): Here is the prompt: PROMPT Look at each keyword separated by the commas: Input: \[${rwTags}\] And try to find equivalents in this list of all keywords: //Insert search node here that finds all keywords/topics EXAMPLE: Input: \[arbitrage, cities, dikw, economy\] Output: \- \[\[Arbitrage\]\] \- \[\[Cities\]\] \- \[\[DIKW\]\] \- \[\[Economy\]\] Just print the output, nothing else. For best results, ensure that the tags in Readwise match the topic nodes in your Tana graph as closely as possible. Related docs: - [Readwise integration](/docs/readwise-integration) - [Tana AI](/docs/tana-ai) # AI Chat # AI Chat Chat with AI, anywhere in Tana. ## [Basics](#basics) - **Chat with AI from anywhere:** On an empty node, hit Space to get started. Or, use the AI chat button in the sidebar. - **AI chat works like ChatGPT**: Type in your question, hit Enter to send it, and receive an answer instantly. - **Chat with your content:** Insert a reference in the chat (by typing @ and selecting a node) to talk about its contents with AI. (Note: You cannot chat with your whole graph yet, this requires a different approach entirely.) - **We send the entire chat as context for each answer.** So, the longer the chat gets, the larger the AI credit cost becomes. - **Saved AI chats on your daily notes:** All your AI chats are saved under a node on Today called `AI chats`. You can control where it appears in your template by adding a node with the same name. - **Limitations**: AI chat does not handle images and files currently. - **AI Chat Agents (advanced):** [Create your own AI chat agents](/docs/ai-agents) to tailor your chats and workflows. ## [Details](#details) ### [How to use AI chat](#how-to-use-ai-chat) Start an AI chat directly from the sidebar, by writing a question or prompt. The AI chat will not use any of your notes as context, unless you explicitly include them (see how below). ![Ask AI questions in AI chat in Tana](https://cdn.sanity.io/images/rfb95wph/production/784b46a7a6840dea2cff61e2f2aa9ae80ae61989-1770x1990.png?w=3840&q=75&fit=clip&auto=format) Once a chat is open you can: - **Take default actions:** Before typing anything into the chat, you have the default options to `Summarize`, `Explain`, `Continue writing` or `Translate` the content in the reference - **Ask a question or provide a prompt:** write above the reference and hit Enter to receive a response - **Add, change or remove the context that is included in the chat:** Paste more references to add context, or delete the nodes to remove. (Note that AI credit use depends on how big of a context you are sending to AI.) On AI responses you can take further actions, or copy the content into your notes: ![On AI reponses you can take further actions, or copy the content into your notes](https://cdn.sanity.io/images/rfb95wph/production/a29e287f81ffa0c3769ccd74dae8afa795b49895-1824x958.png?w=3840&q=75&fit=clip&auto=format) #### [Things you can do on AI responses](#things-you-can-do-on-ai-responses) - You can make edits right in the chat. - You can **apply Supertags**, to add parts of the result into your notes. - You can create a `New thread` based on the conversation up until that point, if you want to take the conversation in a new direction. This puts the full chat up to that point into the chat context. - Hover over an AI response, and you can `Insert` the latest response to the parent of the chat (the place you initiated the chat from), `Copy` the response to your clipboard, or continue chatting to it. - You can `Stop/rerun` an AI job if you want to tweak the prompt. This will delete the AI response up to that point. Hold Alt+click to create a branched path of conversation that keeps the history of the previous response(s). You can also ask for have the results formatted as a table. ![Getting AI responses formatted as table](https://cdn.sanity.io/images/rfb95wph/production/23844fde427dd58ae1c45ea8b2a29d75b89e8e0c-1802x1436.png?w=3840&q=75&fit=clip&auto=format) For more tips on how to use AI chat, check out the AI chat guide by pressing the `i` (info) button in the chat. ### [Use _AI chat_ to chat to your notes](#use) You can also include your own notes as context in the AI chat. Type @ and then select the node you want to reference. ![Include your notes as context by typing @](https://cdn.sanity.io/images/rfb95wph/production/0b3db7d0481aedb32b1cb2624d28b686f1683eb2-1714x1380.png?w=3840&q=75&fit=clip&auto=format) ![See included nodes as context for AI chat prompts](https://cdn.sanity.io/images/rfb95wph/production/e131f118d07404aee4fb77a40d246d4a0b601a53-1712x722.png?w=3840&q=75&fit=clip&auto=format) ### [Start an AI chat from any note](#start-an-ai-chat-from-any-note) You can invoke AI chat within any node to ask questions about it. Press space on an empty node on the bottom of any node to start an AI chat with that node as context: ![Press space below any node to start an AI chat about that content](https://cdn.sanity.io/images/rfb95wph/production/7ec8ea5c052291fac95801641892eab2e923398f-1670x1250.png?w=3840&q=75&fit=clip&auto=format) You can also click the purple sparkle icon (1) next to the node options to start an AI chat in a new panel. Notice in the screenshot above that a reference to the node is loaded in the chat (2): ![Start an AI chat with a node as context by pressing AI button](https://cdn.sanity.io/images/rfb95wph/production/5fc847a37fddaab60439890d4bbad14b942ceb94-2168x1238.png?w=3840&q=75&fit=clip&auto=format) #### [What and how much gets included in the context?](#what-and-how-much-gets-included-in-the-context) When you add context to an AI chat (a reference to a node you want to include in the prompt), all nodes in the tree are included. If there are references, it includes them but not any nodes nested under them: ![](https://cdn.sanity.io/images/rfb95wph/production/6cdde6a48b3a963a31a045133c953e4e8c6d2f2b-1682x1835.png?w=3840&q=75&fit=clip&auto=format) ### [AI chat agents (advanced)](#ai-chat-agents-advanced) [AI chat agents](/docs/ai-agents) allows you to make AI chat in Tana much more powerful, by letting you customize look and feel, “personality”, how conversations start, and what the user can do with chat content. You can build your own agents (advanced use, requires knowledge of [command nodes](/docs/command-nodes) and [AI commands](/docs/ai-command-nodes)), or install a template. If you want to see what others are building or get help, join our [community on Slack](https://tana.inc/community). Copy link Rate article ## Related release notes [See all](/releases) - NewClaude from Anthropic is now available as a custom model in commands where you can configure model. [(2025 / wk 5)](/releases/2025-wk05) - ImprovedWe cleaned up the way referenced nodes and search node results are sent in AI chat, and fixed a few bugs. We'd love to hear reports if AI chat is still not giving you the results you expect. [(2024 / wk 47-49)](/releases/2024-wk47-49) - ImprovedWe've now simplified the AI chat prompt for chats without references to Tana nodes. We welcome feedback about the quality of interactions with the AI chat. [(2024 / wk 47-49)](/releases/2024-wk47-49) # AI for builders # AI for builders AI for builders is an advanced set of tools for those who want to build their own AI functionality in Tana. Note: This Tana Labs experiment feature was replaced by Tana AI in June 2024. ## [Overview](#overview) The Tana Labs feature `AI for Builders` was the first generation of AI functionality in Tana. It introduced a modular toolkit to build AI workflows and embed AI processing into Tana actions. This included things like command line actions, command nodes, the prompt workbench, Autofill, Autotag, generate image and much more. With the introduction of [Tana AI](/docs/tana-ai), `AI for Builders` will graduate from being an experimental project to being an integral feature in Tana, and will therefore cease to exist as a Tana Labs option moving forward. AI work will be powered by [Tana AI](/docs/tana-ai) and not through OpenAI API keys brought by the user (BYOK), with the exception of one general purpose command called `Ask AI` commandthat will accept BYOK. The advanced tools that were introduced under the `AI for Builders` feature will remain mostly the same. You do not need to fix or change anything once this change is in effect. ## [Basics](#basics) - All AI functionality that previously worked with your own API key will now be powered by Tana AI. For more on how Tana AI works, see [Tana AI](/docs/tana-ai). - Any functionality that was created as part of AI for builders will continue to exist until further notice. This page will be integrated into the main Tana AI page eventually. ## [Details](#details) ### [AI: ](#ai-prompt) Start a node with `ai:`, and add your prompt. You'll see an Ask AI button pop up. Press it, and this generates the AI response for you. You can also do the same through the command line, either pre-writing your prompt in a node and running `Ask AI`, or taking an existing node with content and running `Ask AI to →` and type out your prompt in the command line. The plug-and-play AI commands will let you: - 📝 quickly query GPT, or 🎨 generate art with DALL-E, using your nodes as prompts. - 🗃️ cluster/sort your nodes using AI. - 🗣️ transcribe audio files into text. There are seven standard commands that are accessible via the command line: **📝 Ask AI commands** - Ask AI - Ask AI to → - Ask AI (creative) **🎨 DALL-E commands** - Generate image(s) with DALL-E - Generate image(s) with DALL-E (enhanced prompt) **⌨️ Other commands** - Cluster children with embeddings - Transcribe ### [AI Fields / Autofill](#ai-fields-autofill) _Desktop only_ **AI fields are super-powered fields:** through GPT, they can be automatically filled in with useful data, based on what the AI can see of the field and its context. Turn it on by going to Field configuration, and turn on `✨AI-enhanced field`. An ✨AI button will appear next to the name of the field. To autofill the fields, click it. ![](https://cdn.sanity.io/images/rfb95wph/production/86ab6e5bdd853d2c9b4a5b4f95e9a692aeb37f0c-800x478.gif?w=3840&q=75&fit=clip&auto=format) By default, the AI looks at the node the field is attached to plus the node's children, other fields and description. ![](https://cdn.sanity.io/images/rfb95wph/production/2c861bffb811584e23f811271b1e7e300a6f8dc7-1832x914.png?w=3840&q=75&fit=clip&auto=format) This is packaged into a prompt and sent to the AI, with the task `Decide a value for the field: [field name]`. The AI then does its best to answer. ![](https://cdn.sanity.io/images/rfb95wph/production/7f1770d652a25f1458ee0c02b3e1d648e8a460af-1124x332.png?w=3840&q=75&fit=clip&auto=format) #### [┳┳ Smart tables](#smart-tables) AI fields can be run on a single node, or as a part of a table. ![](https://cdn.sanity.io/images/rfb95wph/production/59d4e8a0190dc043fdfbedc7f8877f95d3fd059b-800x216.gif?w=3840&q=75&fit=clip&auto=format) #### [Suggest AI fields](#suggest-ai-fields) You can also have GPT suggest appropriate AI fields for you, from the "Add column" area in tables. ## [Builder's corner](#builders-corner) For more advanced implementations of AI, we have created a highly modular set of building blocks which are covered below. It is a higher threshold of entry, but allows for customizations that are not possible anywhere else. ### [Prompt Workbench](#prompt-workbench) See When triggering an AI lookup field or running a custom Ask AI command, the AI is given a prompt composed of your data + a request. See The key to creating powerful AI functionality in your Tana workflows, is understanding what is sent to the AI when you run a command. You can view, test and edit your prompt in the Prompt Workbench. Access the workbench in the following ways: - When you turn on AI-enhanced field in the field configuration (see image below) - On the Ask AI command node ![](https://cdn.sanity.io/images/rfb95wph/production/22f6c1c430c8d4bb4b812ee35733ea1fecf5485c-1004x924.png?w=3840&q=75&fit=clip&auto=format) When you open the prompt workbench, you'll see this: ![](https://cdn.sanity.io/images/rfb95wph/production/5ce676c25ec652fc0906c97ef0563097a10ac7f6-1403x1690.png?w=3840&q=75&fit=clip&auto=format) The prompt workbench consists of a few sections: #### [Test node](#test-node) You can set which node is used for testing and setting up your prompt #### [Custom Prompt](#custom-prompt) The Custom Prompt is the window where you feed your own prompt into the AI function you are configuring. ![](https://cdn.sanity.io/images/rfb95wph/production/b31c6b08d1c01af19a3ed9231b16cfc78fc65d66-2136x780.png?w=3840&q=75&fit=clip&auto=format) Prompt expressions in Tana are built like Title expressions, with some extra functionality: - To get the name of the node that you are targeting, use `${name}` - To reference field values, use `${field label}`. - To reference the entire node context with all fields and children in Tana Paste format, use `${sys:context}` - To return a node's supertags, use `${sys:tags}` - To show a node's children (excluding content inherited from supertag), use `${sys:content}` - To insert the current date/date and time, use `${sys:currentDate}` and `${sys:currentDateTime}` respectively. Keep in mind that GPT doesn't know the current date or time natively. - To return the URL and ID of the node, use `${sys:nodeURL}` and `${sys:nodeId}` respectively. - All of the normal title expressions are also available. To get the full context of a field's content, use the _field definition_. - To get the field definition, put your cursor on the name of a field, Cmd/Ctrl+C to copy, put your cursor inside the prompt and Cmd/Ctrl+V to paste a reference to the field definition The video shows the difference between the title expression pointing to a field versus the field definition in terms of what gets sent in the prompt: You can also use dynamic content in your prompts: use a reference to a node directly in your prompt (including search nodes), or create search nodes in the prompt. #### [Side note: Tana Paste and AI prompts](#side-note-tana-paste-and-ai-prompts) All output from the AI is parsed with Tana Paste before being inserted into Tana. For smaller texts, this should make no difference for you, but it does offer the possibility of teaching the AI to generate rich Tana data structures. For example, you can tell it to generate a list of cities, and tag each as city, with the population as a field. Providing examples are really helpful: \- Rio de Janeiro #city - Population:: 4M Other useful tricks you can tell AI to do to output in a more Tana Paste friendly format: - “Output as Markdown table” - “Output as Markdown code block” - “Output as hierarchical Markdown, and use indentation instead of # for headers” - “use - \[ \] for tasks” You can even make it generate search nodes. For more on that, read up on [Tana Paste](/docs/tana-paste). #### [Expanded Prompt](#expanded-prompt) The expanded prompt section shows what is being sent to the OpenAI API. To see what is being sent from and to Tana when you're using AI, use the GPT Log Monitor. #### [Temperature](#temperature) If you frequently get unsatisfying responses that start with "As a language model”, try turning the temperature up for your prompt. Increasing the model's creativity seems to often get it to loosen up a bit. A rule of thumb: - If you are generating new content, use a high temperature. - If you are restructuring your existing data, use a low temperature. ### [AI Command nodes](#ai-command-nodes) To learn about all custom AI command nodes, see [AI Commands](https://tana.inc/docs/command-nodes#all-ai-commands). Some commands are covered below. #### [Ask AI command](#ask-ai-command) _Renamed from Generic AI command on Jan 21, 2025._ This command node only works with an OpenAI key you provide. (See [BYOK setup](#byok-setup) for more info on how to connect your own key to Tana.) ![](https://cdn.sanity.io/images/rfb95wph/production/9f099a7b14c9d0f19ab94868afdeb0e9da955def-1071x602.png?w=3840&q=75&fit=clip&auto=format) #### [Autotag](#autotag) Autotag is an AI Command that is designed to help users sort and organize their content. Autotag uses AI to analyze different items, recognize what they are, and apply the relevant tags. Set up the command _Autotag_ with parameter _Tag candidates_, list a few supertag candidates in the configuration, and now run this custom command on a list of nodes. ![](https://cdn.sanity.io/images/rfb95wph/production/392d3f3cf488f3214e6b7e1cc8cf1ef53275082d-734x276.png?w=3840&q=75&fit=clip&auto=format) Once supertags have been assigned, you can use [Autofill](#autofill) to fill in fields based on the contents of the name. For example, AI can provide suggestions to fill fields, such as deadline, topic, even follow-up task, based on what it finds. You can also set it to auto-generate a new title and description. You can also exclude fields from the action, and choose to run on GPT-4 for different results. All of this can be switched on in the Supertag configuration as _AI-enhanced tag_. ![](https://cdn.sanity.io/images/rfb95wph/production/5fa894ba8d38e28109abf4c0dd07177f6d1a8b03-602x146.gif?w=3840&q=75&fit=clip&auto=format) ### [BYOK Setup](#byok-setup) #### [**🔑** Your OpenAI keys](#) All interactions with the APIs require you to connect your own OpenAI API key. To get it, go to [OpenAI's API Key page](https://platform.openai.com/account/api-keys). Once you have your API key at hand, 1️⃣ open the command line and run the "Set OpenAI API Key" command. Then 2️⃣ paste your key in the field and you're good to go. #### [🗄️ Your data and privacy](#your-data-and-privacy) The different AI commands require us sending your data to the OpenAI API. There is no functionality in the system that sends data to OpenAI unless you take a specific action that sends data (e.g. using the AskGPT command.) If we ever introduce the option of automatic/background processing, we will change our terms, and have an explicit opt-in. #### [💸 Your spend limit](#your-spend-limit) ❗️IMPORTANT: Since you are using your own API key, you will be responsible for your own Pricing. When experimenting, it can be easy to use a lot of tokens (AI in Tana is a lot of fun 🤖). We strongly recommend setting Usage limits in your OpenAI API. ![](https://cdn.sanity.io/images/rfb95wph/production/a8c67b83f6fbe2f3e707362f4c83a64d5b3750c1-702x359.png?w=3840&q=75&fit=clip&auto=format) ❗Note: if you are a trial user of OpenAI you are likely to be hit with rate limiting. Entering a payment method (credit card information) will improve this. ### [](#block-83b54b7fbcab) ## [](#block-0750c788473f) Copy link Rate article ## Related release notes [See all](/releases) - InfoWe have renamed the command node "Ask AI" to "Ask AI (non-streaming)", and the "Generic AI Query" to "Ask AI", to make the difference more clear. Mostly you should be using "Ask AI", since it's streaming. It has fewer parameters than "Ask AI (non-streaming)" but most of those are not useful anymore (let us know if there are any that are important to you). (Nothing will change with the commands you've already configured, or what happens when you hit Cmd+K Ask AI. ) [(2025 / wk 5)](/releases/2025-wk05) - ImprovedAsk AI command (streaming) now supports the prompt workbench [(2025 / wk 5)](/releases/2025-wk05) - FixedWe fixed a bug where some users could not use Claude in Ask AI command nodes [(2025 / wk 5)](/releases/2025-wk05) - ImprovedWe added a new parameter to Ask AI command nodes, to request output to be opened in new panel. (See Draft Panel) [(2025 / wk 5)](/releases/2025-wk05) - InfoAdded GPT4o-2024-11-20 as a model choice (not yet default model) [(2024 / wk 47-49)](/releases/2024-wk47-49) ## Related FAQs [See all](/faq) - Can I use my own OpenAI API key in Tana? Jan 29, 2025 - I activated "AI for Builders" but using AI commands keeps on producing errors? Sep 27, 2024 - How can I save the image from AI-generated banners? Sep 27, 2024 - How do I fix "The aiForBuilders feature is not enabled" error? Sep 27, 2024 - What do the AI error messages Out of budget and 0/1 left mean? Sep 27, 2024 - Can I retrieve the prompt I used for an AI request? Sep 27, 2024 - What does "Retrying AI requests failed, giving up operation" error mean? Mar 25, 2024 - I already pay for ChatGPT Pro, can I use that to run AI on Tana? Dec 20, 2023 # AI for builders # AI for builders AI for builders is an advanced set of tools for those who want to build their own AI functionality in Tana. Note: This Tana Labs experiment feature was replaced by Tana AI in June 2024. ## [Overview](#overview) The Tana Labs feature `AI for Builders` was the first generation of AI functionality in Tana. It introduced a modular toolkit to build AI workflows and embed AI processing into Tana actions. This included things like command line actions, command nodes, the prompt workbench, Autofill, Autotag, generate image and much more. With the introduction of [Tana AI](/docs/tana-ai), `AI for Builders` will graduate from being an experimental project to being an integral feature in Tana, and will therefore cease to exist as a Tana Labs option moving forward. AI work will be powered by [Tana AI](/docs/tana-ai) and not through OpenAI API keys brought by the user (BYOK), with the exception of one general purpose command called `Ask AI` commandthat will accept BYOK. The advanced tools that were introduced under the `AI for Builders` feature will remain mostly the same. You do not need to fix or change anything once this change is in effect. ## [Basics](#basics) - All AI functionality that previously worked with your own API key will now be powered by Tana AI. For more on how Tana AI works, see [Tana AI](/docs/tana-ai). - Any functionality that was created as part of AI for builders will continue to exist until further notice. This page will be integrated into the main Tana AI page eventually. ## [Details](#details) ### [AI: ](#ai-prompt) Start a node with `ai:`, and add your prompt. You'll see an Ask AI button pop up. Press it, and this generates the AI response for you. You can also do the same through the command line, either pre-writing your prompt in a node and running `Ask AI`, or taking an existing node with content and running `Ask AI to →` and type out your prompt in the command line. The plug-and-play AI commands will let you: - 📝 quickly query GPT, or 🎨 generate art with DALL-E, using your nodes as prompts. - 🗃️ cluster/sort your nodes using AI. - 🗣️ transcribe audio files into text. There are seven standard commands that are accessible via the command line: **📝 Ask AI commands** - Ask AI - Ask AI to → - Ask AI (creative) **🎨 DALL-E commands** - Generate image(s) with DALL-E - Generate image(s) with DALL-E (enhanced prompt) **⌨️ Other commands** - Cluster children with embeddings - Transcribe ### [AI Fields / Autofill](#ai-fields-autofill) _Desktop only_ **AI fields are super-powered fields:** through GPT, they can be automatically filled in with useful data, based on what the AI can see of the field and its context. Turn it on by going to Field configuration, and turn on `✨AI-enhanced field`. An ✨AI button will appear next to the name of the field. To autofill the fields, click it. ![](https://cdn.sanity.io/images/rfb95wph/production/86ab6e5bdd853d2c9b4a5b4f95e9a692aeb37f0c-800x478.gif?w=3840&q=75&fit=clip&auto=format) By default, the AI looks at the node the field is attached to plus the node's children, other fields and description. ![](https://cdn.sanity.io/images/rfb95wph/production/2c861bffb811584e23f811271b1e7e300a6f8dc7-1832x914.png?w=3840&q=75&fit=clip&auto=format) This is packaged into a prompt and sent to the AI, with the task `Decide a value for the field: [field name]`. The AI then does its best to answer. ![](https://cdn.sanity.io/images/rfb95wph/production/7f1770d652a25f1458ee0c02b3e1d648e8a460af-1124x332.png?w=3840&q=75&fit=clip&auto=format) #### [┳┳ Smart tables](#smart-tables) AI fields can be run on a single node, or as a part of a table. ![](https://cdn.sanity.io/images/rfb95wph/production/59d4e8a0190dc043fdfbedc7f8877f95d3fd059b-800x216.gif?w=3840&q=75&fit=clip&auto=format) #### [Suggest AI fields](#suggest-ai-fields) You can also have GPT suggest appropriate AI fields for you, from the "Add column" area in tables. ## [Builder's corner](#builders-corner) For more advanced implementations of AI, we have created a highly modular set of building blocks which are covered below. It is a higher threshold of entry, but allows for customizations that are not possible anywhere else. ### [Prompt Workbench](#prompt-workbench) See When triggering an AI lookup field or running a custom Ask AI command, the AI is given a prompt composed of your data + a request. See The key to creating powerful AI functionality in your Tana workflows, is understanding what is sent to the AI when you run a command. You can view, test and edit your prompt in the Prompt Workbench. Access the workbench in the following ways: - When you turn on AI-enhanced field in the field configuration (see image below) - On the Ask AI command node ![](https://cdn.sanity.io/images/rfb95wph/production/22f6c1c430c8d4bb4b812ee35733ea1fecf5485c-1004x924.png?w=3840&q=75&fit=clip&auto=format) When you open the prompt workbench, you'll see this: ![](https://cdn.sanity.io/images/rfb95wph/production/5ce676c25ec652fc0906c97ef0563097a10ac7f6-1403x1690.png?w=3840&q=75&fit=clip&auto=format) The prompt workbench consists of a few sections: #### [Test node](#test-node) You can set which node is used for testing and setting up your prompt #### [Custom Prompt](#custom-prompt) The Custom Prompt is the window where you feed your own prompt into the AI function you are configuring. ![](https://cdn.sanity.io/images/rfb95wph/production/b31c6b08d1c01af19a3ed9231b16cfc78fc65d66-2136x780.png?w=3840&q=75&fit=clip&auto=format) Prompt expressions in Tana are built like Title expressions, with some extra functionality: - To get the name of the node that you are targeting, use `${name}` - To reference field values, use `${field label}`. - To reference the entire node context with all fields and children in Tana Paste format, use `${sys:context}` - To return a node's supertags, use `${sys:tags}` - To show a node's children (excluding content inherited from supertag), use `${sys:content}` - To insert the current date/date and time, use `${sys:currentDate}` and `${sys:currentDateTime}` respectively. Keep in mind that GPT doesn't know the current date or time natively. - To return the URL and ID of the node, use `${sys:nodeURL}` and `${sys:nodeId}` respectively. - All of the normal title expressions are also available. To get the full context of a field's content, use the _field definition_. - To get the field definition, put your cursor on the name of a field, Cmd/Ctrl+C to copy, put your cursor inside the prompt and Cmd/Ctrl+V to paste a reference to the field definition The video shows the difference between the title expression pointing to a field versus the field definition in terms of what gets sent in the prompt: You can also use dynamic content in your prompts: use a reference to a node directly in your prompt (including search nodes), or create search nodes in the prompt. #### [Side note: Tana Paste and AI prompts](#side-note-tana-paste-and-ai-prompts) All output from the AI is parsed with Tana Paste before being inserted into Tana. For smaller texts, this should make no difference for you, but it does offer the possibility of teaching the AI to generate rich Tana data structures. For example, you can tell it to generate a list of cities, and tag each as city, with the population as a field. Providing examples are really helpful: \- Rio de Janeiro #city - Population:: 4M Other useful tricks you can tell AI to do to output in a more Tana Paste friendly format: - “Output as Markdown table” - “Output as Markdown code block” - “Output as hierarchical Markdown, and use indentation instead of # for headers” - “use - \[ \] for tasks” You can even make it generate search nodes. For more on that, read up on [Tana Paste](/docs/tana-paste). #### [Expanded Prompt](#expanded-prompt) The expanded prompt section shows what is being sent to the OpenAI API. To see what is being sent from and to Tana when you're using AI, use the GPT Log Monitor. #### [Temperature](#temperature) If you frequently get unsatisfying responses that start with "As a language model”, try turning the temperature up for your prompt. Increasing the model's creativity seems to often get it to loosen up a bit. A rule of thumb: - If you are generating new content, use a high temperature. - If you are restructuring your existing data, use a low temperature. ### [AI Command nodes](#ai-command-nodes) To learn about all custom AI command nodes, see [AI Commands](https://tana.inc/docs/command-nodes#all-ai-commands). Some commands are covered below. #### [Ask AI command](#ask-ai-command) _Renamed from Generic AI command on Jan 21, 2025._ This command node only works with an OpenAI key you provide. (See [BYOK setup](#byok-setup) for more info on how to connect your own key to Tana.) ![](https://cdn.sanity.io/images/rfb95wph/production/9f099a7b14c9d0f19ab94868afdeb0e9da955def-1071x602.png?w=3840&q=75&fit=clip&auto=format) #### [Autotag](#autotag) Autotag is an AI Command that is designed to help users sort and organize their content. Autotag uses AI to analyze different items, recognize what they are, and apply the relevant tags. Set up the command _Autotag_ with parameter _Tag candidates_, list a few supertag candidates in the configuration, and now run this custom command on a list of nodes. ![](https://cdn.sanity.io/images/rfb95wph/production/392d3f3cf488f3214e6b7e1cc8cf1ef53275082d-734x276.png?w=3840&q=75&fit=clip&auto=format) Once supertags have been assigned, you can use [Autofill](#autofill) to fill in fields based on the contents of the name. For example, AI can provide suggestions to fill fields, such as deadline, topic, even follow-up task, based on what it finds. You can also set it to auto-generate a new title and description. You can also exclude fields from the action, and choose to run on GPT-4 for different results. All of this can be switched on in the Supertag configuration as _AI-enhanced tag_. ![](https://cdn.sanity.io/images/rfb95wph/production/5fa894ba8d38e28109abf4c0dd07177f6d1a8b03-602x146.gif?w=3840&q=75&fit=clip&auto=format) ### [BYOK Setup](#byok-setup) #### [**🔑** Your OpenAI keys](#) All interactions with the APIs require you to connect your own OpenAI API key. To get it, go to [OpenAI's API Key page](https://platform.openai.com/account/api-keys). Once you have your API key at hand, 1️⃣ open the command line and run the "Set OpenAI API Key" command. Then 2️⃣ paste your key in the field and you're good to go. #### [🗄️ Your data and privacy](#your-data-and-privacy) The different AI commands require us sending your data to the OpenAI API. There is no functionality in the system that sends data to OpenAI unless you take a specific action that sends data (e.g. using the AskGPT command.) If we ever introduce the option of automatic/background processing, we will change our terms, and have an explicit opt-in. #### [💸 Your spend limit](#your-spend-limit) ❗️IMPORTANT: Since you are using your own API key, you will be responsible for your own Pricing. When experimenting, it can be easy to use a lot of tokens (AI in Tana is a lot of fun 🤖). We strongly recommend setting Usage limits in your OpenAI API. ![](https://cdn.sanity.io/images/rfb95wph/production/a8c67b83f6fbe2f3e707362f4c83a64d5b3750c1-702x359.png?w=3840&q=75&fit=clip&auto=format) ❗Note: if you are a trial user of OpenAI you are likely to be hit with rate limiting. Entering a payment method (credit card information) will improve this. ### [](#block-83b54b7fbcab) ## [](#block-0750c788473f) Copy link Rate article ## Related release notes [See all](/releases) - InfoWe have renamed the command node "Ask AI" to "Ask AI (non-streaming)", and the "Generic AI Query" to "Ask AI", to make the difference more clear. Mostly you should be using "Ask AI", since it's streaming. It has fewer parameters than "Ask AI (non-streaming)" but most of those are not useful anymore (let us know if there are any that are important to you). (Nothing will change with the commands you've already configured, or what happens when you hit Cmd+K Ask AI. ) [(2025 / wk 5)](/releases/2025-wk05) - ImprovedAsk AI command (streaming) now supports the prompt workbench [(2025 / wk 5)](/releases/2025-wk05) - FixedWe fixed a bug where some users could not use Claude in Ask AI command nodes [(2025 / wk 5)](/releases/2025-wk05) - ImprovedWe added a new parameter to Ask AI command nodes, to request output to be opened in new panel. (See Draft Panel) [(2025 / wk 5)](/releases/2025-wk05) - InfoAdded GPT4o-2024-11-20 as a model choice (not yet default model) [(2024 / wk 47-49)](/releases/2024-wk47-49) ## Related FAQs [See all](/faq) - Can I use my own OpenAI API key in Tana? Jan 29, 2025 - I activated "AI for Builders" but using AI commands keeps on producing errors? Sep 27, 2024 - How can I save the image from AI-generated banners? Sep 27, 2024 - How do I fix "The aiForBuilders feature is not enabled" error? Sep 27, 2024 - What do the AI error messages Out of budget and 0/1 left mean? Sep 27, 2024 - Can I retrieve the prompt I used for an AI request? Sep 27, 2024 - What does "Retrying AI requests failed, giving up operation" error mean? Mar 25, 2024 - I already pay for ChatGPT Pro, can I use that to run AI on Tana? Dec 20, 2023 # Input API # Input API Tana Input API (addToNodeV2) allows users to POST basic data to a Tana workspace. > Updated January 20, 2025 - Workspace node limit increased from 500k to 750k ## [Overview](#overview) The Tana Input API gives you a set of basic tools to send (and edit, to a limited degree) data to the Tana graph. This API is useful for initializing data, automating repetitive tasks, and inputting data to Tana from custom workflows and external applications. On the roadmap is to expand the API to enable reading from Tana graphs. ### [Restrictions](#restrictions) The API has the following restrictions: - POST only - One call per second per token - A maximum of 100 nodes created per call - The payload size is limited to 5000 characters - ! Will not sync on workspaces with more than 750k nodes. If you are expecting to sync a lot of data, use a fresh workspace. ## [Basics](#basics) The API can do the following: - **Create nodes:** Create nodes, including children - **Create fields:** Define new fields, their description, and their field type - **Create supertags:** Define supertags, and their template fields and nodes - **Edit nodes:** Update name of node. - **File uploads:** Upload files and associate them with specific nodes. To access the API, you need: - A **Tana API token** - **Endpoint**: `https://europe-west1-tagr-prod.cloudfunctions.net/addToNodeV2` ## [Documentation](#documentation) ### [How to get a Tana API token](#how-to-get-a-tana-api-token) You need an API token to work with the Input API. Tokens are assigned per workspace and can be generated in the Tana client: 1. In the lower left corner of Tana, go `Settings` > `API Tokens` 2. Select which workspace you want to create a token for, and click `Create token` 3. Click `Copy` to copy the token you just created ### [nodeID](#node-id) With Tana's Input API, you'll need to know how to retrieve the `nodeID` for a node. Everything is a node in Tana, and so, everything has a `nodeID`. Nodes, field definitions, supertags all have `nodeID`s. To retrieve the `nodeID` for different types of objects, use the command `Copy link` to get the URL, and grab the part after the `=` sign. Example: - URL: `https://app.tana.inc?nodeid=z-p8LdQk6I76` - nodeID: `z-p8LdQk6I76` For supertags, you can retrieve the API Schema for the supertag template. Open the Supertag configuration panel, and in the title of the supertag run the command `Show API Schema` ### [JSON](#json) The API is based on JSON. Below are examples of payloads for different situations: ### [Creating nodes](#creating-nodes) Creating a node is done by sending a JSON object to the addToNoteV2 endpoint. The object has two keys: - `targetNodeId` refers to where the nodes will be created. By default, nodes will be placed in the Library. Other targets include `SCHEMA`, `INBOX`, or any `nodeID`. - The `nodes` key is an array of one or more objects. These are Tana nodes. When creating nodes, you can use the following keys: - `dataType` refers to what type of node it is. Valid values: `plain`, `field`, `url`, `date`, `reference`, `boolean`, `file`. Default is plain. - `name` refers to the name of the node. - Cannot contain newlines - Formatting available in nodes: `bold` `italic` `striked` `highlight` `**bold**` `__italic__` `~~striked~~` `^^highlight^^` - You can also include links and dates: - `` - `` - `` - `description` refers to the description of the node - Cannot contain newlines - `id` refers to a nodeID. Use when making a [reference node](#reference-node), or when [applying a supertag to a node](#plain-node-with-two-supertags). - `attributeId` refers to the field definition. Use when adding an existing field to a node. - `supertags` is used for creating supertags and fields, and also applying existing supertags to a node. - To create a supertag, use `"supertags": [{"id": "SYS_T01"}]` - To create a field, use `"supertags": [{"id": "SYS_T02"}]` - To apply existing supertags to a node, use its `nodeID`. - Get the nodeID of a supertag in Tana by going to the supertag config panel and use the command line `Show API schema` - For more examples, see [Fields and Supertags](#fields-and-supertags) below. - `children` refers to the children to add to the node, including fields. #### [Plain node](#plain-node) An example of a plain node with text in the name, and in the description: // Creating a plain node { "nodes": \[ { "name":"My plain node", "description": "This is a plain node example." } \] } #### [Plain node with a field](#plain-node-with-a-field) An example of a plain node that contains an existing field and a field value in it: // Creating a plain node with a field (existing) and value { "nodes": \[ { "name":"My plain node", "children": \[ { "type": "field", "attributeId": "nodeID", "children": \[ { "name": "Field value" } \] } \] } \] } #### [Plain node with two supertags](#plain-node-with-two-supertags) An example of a plain node that has two different supertags applied, which will be created in the Inbox: // add a node with two supertags, targeting Schema { "targetNodeId": "INBOX", "nodes": \[ { "name": "The Hobbit", "description": "A book by J.R.R. Tolkien", "supertags": \[{"id": "nodeID-1"}, {"id": "nodeID-2"}\] } \] } #### [Reference node](#reference-node) An example of creating a reference, where you need to define the dataType as reference, and the nodeID: // Creating a reference { "nodes": \[ { "dataType": "reference", "id": "nodeID", } \] } #### [Date node](#date-node) An example of creating a date node, where you need to define the dataType as date, and add the name in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: // Creating a date node { "nodes": \[ { "dataType": "date", "name":"2023-12-01 08:00:00" } \] } The API can receive different types of dates: - Day: `2024-01-01` - Week: `2024-W12` - Month: `2024-05` - Year: `2024` - Timestamp: `2024-01-01 00:00:00` - Ranges: `2024-01-01/2024-01-05` - All dates and times are sent as UTC. Timezone information is stripped. #### [URL node](#url-node) An example of creating a URL node (for EH review): // Creating a node with a URL { "nodes": \[ { "name": "Webpage", "description": "A webpage node with URL information", "children": \[ { "type": "field", "attributeId": "URLFieldId", "children": \[ { "dataType": "url", "name": "https://example.com", } \] } \] } \] } #### [Checkbox node](#checkbox-node) An example of creating a node with a checkbox (boolean state): // Creating a checkbox node { "nodes": \[ { "dataType": "boolean", "name":"My checkbox node", "value": true, // or false } \] } #### [Node with file attachment](#node-with-file-attachment) // Creating a node with a file attached { "nodes": \[ { "dataType": "file", "file": "base64encodedfiledata...", "filename": "myFile.pdf", "contentType": "application/pdf", } \] } Tana supports most MIME types in the `contentType` key. Tana will allow interactions with some common filetypes like images, audio, video and PDFs. Otherwise, a file will be uploaded as a plain attachment. Note: The `file` key should contain the base64-encoded file data. ### [Creating fields and supertags](#creating-fields-and-supertags) Creating fields and supertags follow a slightly different pattern. As a best practice, it is recommended to send these nodes to Schema. #### [Creating fields](#creating-fields) To create new fields, create a node with the supertag set to `SYS_T02`. You'll likely want to target the `SCHEMA`, which is a default place for supertag and field definitions to live. { "targetNodeId": "SCHEMA", "nodes": \[ { "name": "Author", "description": "Who wrote the book?", "supertags": \[{"id": "SYS\_T02"}\] } \] } #### [Creating supertags](#creating-supertags) To create a supertag, set the supertag value to `SYS_T01`: { targetNodeId: 'SCHEMA', nodes: \[ { name: 'Book', description: 'A supertag for my books', supertags: \[{id:'SYS\_T01'}\], } \] } #### [Using existing supertags](#using-existing-supertags) Run the command line `Show API schema` on the title of the supertag in the config panel or on the supertag definition to get all the information you need on how to compile your JSON to properly enter information for existing supertags in the API. A typical schema looks like this: type Node = { name: string; description?: string; supertags: \[{ /\* meeting \*/ id: 'MaaJRCypzJ' }\]; children: \[ { /\* Date \*/ type: 'field'; attributeId: 'iKQAQN38Vx'; children: \[{ dataType: 'date'; name: string; }\]; }, \]; }; And comes with a payload example: { "nodes": \[ { "name": "New node", "supertags": \[ { "id": "MaaJRCypzJ" } \], "children": \[ { "type": "field", "attributeId": "iKQAQN38Vx", "children": \[ { "dataType": "date", "name": "2023-05-10T08:25:59.059Z" } \] }, { "name": "Child node" } \] } \] } Use the payload example to properly compile the JSON for the Tana API. ### [Editing the name of a node](#editing-the-name-of-a-node) The name of a node can be changed. Replace `nodes` in the payload with `setName: 'new name'` like this: { targetNodeId:'xxx', setName: 'hello', } ### [Current limitations](#current-limitations) Rate limiting: - One call per second per token - Max 100 nodes created per call - Max 5000 chars in one request Other limitations: - You cannot target a relative Today-node - To add supertags/fields, you’ll have to know the IDs of the Supertag. To get it, run the command “Show API schema” on a supertag - The payload is currently capped at 5K. Let us know if this is too low (and why) - There’s a new endpoint for the updated API - You cannot send a checkbox as a child to a normal node - We don’t support the initialization function - We don’t support child templates - We do not support non http/https links (in-app links) - The API will only sync to workspaces under 750k nodes - On added/removed events for nodes and supertags are not triggered ## [TanaAPIHelper](#tana-api-helper) In the GitHub repository is a basic client for Tana's Input API and example scripts. For instructions on how to use that, go to the [Github repository](https://github.com/tanainc/tana-input-api-samples/tree/main) and look at the readme. Copy link Rate article ## Related FAQs [See all](/faq) - Does Tana have a 500k node limit? Jan 21, 2025 # Readwise integration # Readwise integration Sync your highlights from Readwise into Tana. ## [Overview](#overview) Readwise integration with Tana is available for those with a Readwise subscription or if you started their free trial which allows for export of 10 most recently highlighted documents. For more on what Readwise is, check out their webpage: [https://readwise.io/](https://readwise.io/) ## [Documentation](#documentation) Before you begin, you must read the following important information about this integration: ### [Setup](#setup) #### [Step 1: Connect Readwise to Tana](#step-1-connect-readwise-to-tana) Log into your Readwise account and go into Tana as Export option or head over to this page for the Tana Export settings: [https://readwise.io/export/tana/preferences](https://readwise.io/export/tana/preferences) It will prompt you to create a Tana API and to paste it into Readwise. Do this by going to your Settings > API tokens, then pick the workspace you want them synced to, and hit Create. A token is immediately created and copied to your clipboard. Head back to Readwise and plug that into the setup and hit Save. #### [Step 2: Review the Export settings](#step-2-review-the-export-settings) This is an overview of all the options available on the Tana Export page: ![](https://cdn.sanity.io/images/rfb95wph/production/b999f5061a8525f3ca51645edce94eb41172cc39-4444x4444.png?w=3840&q=75&fit=clip&auto=format) 1. **Button to initiate an export:** Press to initiate sync. NOTE: You'll likely want to tweak some of the settings before exporting all your highlights at the same time, so we do not recommend pressing this until you've reviewed at least all of Step 3. 2. **Export Automatically** (when new highlights are added): Turn this on to have Readwise automatically push new highlights to Tana as they're made. We advise to wait with turning this on until you are satisfied with the export from Readwise. 3. **Use Compact Layout** (Merge multi-lines highlights in one-line, disabling will split lines in multiple nodes.): Tana doesn't support soft line-breaks in nodes, so this gives you the option to either have highlights with soft line-breaks exported as separate nodes, or to have the line-breaks removed which keeps the highlight as one node. 4. **Send documents to Inbox** (It will send documents to Inbox instead of your Library): New documents and highlights are by default sent to a special Readwise node created in the Library. Turn this on to instead have these forwarded to your Inbox instead. NOTE: Inbox is not recommended for first imports if you have hundreds of documents/highlights in Readwise. 5. **Use Custom Formatting** (Customize the format of your Tana page using [Readwise templates](https://help.readwise.io/)): Turn this on to customize how content is exported. Readwise has a highly customizable template language that you can use to change how your documents and highlights are exported. 1. **5A. Page title:** This will determine the format of the Document node 2. **5B. Highlight:** This formats the Highlights 3. **5C. Page fields:** This determines the names of the fields. You can turn them on or off. 6. **Select items to be Exported** (Filter which books/articles/tweets to sync to Tana): Turn this on to select which documents you want to export (6A). #### [**Step 3: How to fine tune your export until it's perfect**](#step-3-how-to-fine-tune-your-export-until-its-perfect) We know Tanarians care a lot about how incoming information is structured when it comes from elsewhere! Below are instructions on how to responsibly tweak your export settings without making a huge mess in the process that will need a lot of cleanup. **1\. When fine tuning your settings, turn on the following settings, and the rest keep off:** ![](https://cdn.sanity.io/images/rfb95wph/production/56f3b7cfb102718af8ef337b4a9254b152b50c94-2027x1293.png?w=3840&q=75&fit=clip&auto=format) **2\. For your first export, pick a few documents to export at the time to see what they look like in Tana:** Pick ones with many different features used, like document tags and notes, highlight tags and notes and images, books and videos, etc. so you're testing every possibility you're likely to see in your highlights. ![](https://cdn.sanity.io/images/rfb95wph/production/44c1440babba01d86f3443c1d3233d195e633d97-2726x956.png?w=3840&q=75&fit=clip&auto=format) **4\. Find the exported node and take a look:** Look in Library, or try to @-mention a node called "Readwise". Reminder that upon initial export, Readwise will create supertags and fields in your workspace, saving them in the Schema. From this initial export, you may want to change some things in the export settings, and try again. Hard-delete (Cmd/Ctrl+Shift+Backspace) the document nodes in Tana before re-exporting. Do NOT delete the main Readwise node. **5\. Tweak export settings:** Make adjustments in Readwise based on what you saw. **6\. To make a fresh export of a document after making adjustments:** You must tell Readwise to "refresh" a document which will reset Readwise's memory of having synced that particular document before. (This essentially makes Readwise forget the nodeID associated with this document) ![](https://cdn.sanity.io/images/rfb95wph/production/9b2f4e47498cf2b8739937baf41c36aa75293a2c-1394x750.png?w=3840&q=75&fit=clip&auto=format) **7\. Repeat steps 3 to 6 until you're happy!** **8\. Once you're satisfied, feel free to turn "Export Automatically" ON and "Select items to be exported" OFF**. This will make Readwise sync everything in the next sync cycle, and every other document and highlight that gets added thereafter. If you have many highlights, this may take some time and occasionally freeze Tana. The work happens in the background, so it's safe to close it or leave it open while it's doing a big sync. #### [Step 4: Once it's in Tana](#step-4-once-its-in-tana) **Properly making the supertags:** You can promote the fields to the supertags, rearrange them anyway you see fit, pick a colour, and even add fields of your own. **Ideas for surfacing your Readwise content:** By default, Readwise will sync to a special Readwise node in the Library. Below is some inspiration on how you can surface this content: - To see your whole Readwise Library: - Make a Reference to the Readwise node somewhere prominent or memorable - Pin the Readwise node - To see parts of your library: - To see your highlights by the day they were synced - Highlight tag - Created on day node: parent - To see your latest documents from the past 30 days: - Readwise tag - edited last 30 day ### [**Advanced considerations, or if you have existing Readwise content in your workspace**](#advanced-considerations-or-if-you-have-existing-readwise-content-in-your-workspace) If you have previous imports to Tana from Readwise, either through Reader Export via clipboard or other custom implementation from our very inventive community such as Brandon's readwise.toolsfortana, you may be wondering whether to merge your existing information with the new setup, or not. The following section will be important to read for your considerations. **Readwise does not retrieve any information from your workspace, other than the nodes, tags and fields that it creates and saves the nodeID from.** For the first iteration of this integration we've decided to only permit Write permissions and limit Read permissions. From a security perspective it's good because it means that Readwise has no access to your workspace content other than the nodes it creates. From an automation perspective it may leave a bit to desire because your imports will not automatically link to nodes that exist in your workspace. That said... **Tana AI and commands can fill a lot of last mile connections:** A workaround is to use AI to connect plain text with nodes in your graph once the content is there. **It's currently not possible to create multiple nodes inside of a field:** This means that a highlight Tag field for instance will export tags as just words in a single node. However, if you use AI in Tana, this info can be extracted (see point above). **Merge direction is super important:** When merging your tag/field/node with a Readwise-equivalent object, always merge in the direction of what Readwise had created. This ensures that the Readwise-synced nodeID is preserved so it can send updates to it in the future. **Above is important because deleted nodes still get synced to:** If you delete a document node that Readwise creates, Readwise will continue to push changes to it because it looks for a nodeID match, no matter where it is in the graph. See Step 3 on how to properly disassociate document nodes created by Readwise. **For a full reset, make a new API token:** Replacing the API token with a new one will prompt a fresh export, no matter what was exported to your workspace in the past. Readwise relinquishes all previous nodeIDs it has saved, and all new tags, fields and nodes will be created. Useful if you want to do something like change which workspace it gets synced to, or start from scratch. Copy link Rate article ## Related FAQs [See all](/faq) - How can I find nodes based on a field value of an ancestor? Sep 27, 2024 Copy link There is no way to build a search that is able to read the fields of an ancestor node. But, using title expressions, you can grab the field value of an ancestor node and have it part of the title of the node you're running the search on, making that information searchable. TLDR: Use the `${sys:owner}` title expression to pick up content from ancestor nodes and their fields. This solution is great for Readwise users and came about when Maggie from the community wanted to search her Readwise highlights by the tags of the article/book it was taken from. To do this, use `${sys:owner.Field}`, and repeat `sys:owner` as many levels up as you need to go to target the right ancestor. In the case of Readwise highlights, you usually need to go up two levels. Check out the demo video: Now with the information you need from the ancestor node baked into the title of the highlight itself, it can be used to search and filter those nodes. While this solution came up in the context of the Readwise integration, it is a reusable pattern that can be applied elsewhere. Related docs: - [Readwise integration](/docs/readwise-integration) - [Supertags](/docs/supertags) - [Fields](/docs/fields) . - Use AI to connect Readwise tags to my list of topics Sep 13, 2024 Copy link The Tana API that is used to power the Readwise integration is exactly the same (and therefore has the same limitations) as the Input API. It can only write new nodes to Tana, and the API can only write a single value to new fields. So, to get all your tags out of Readwise, we recommend a comma-separated format, and then using AI to link to the correct nodes in your graph. Here's a video of how it works (no audio): Here is the prompt: PROMPT Look at each keyword separated by the commas: Input: \[${rwTags}\] And try to find equivalents in this list of all keywords: //Insert search node here that finds all keywords/topics EXAMPLE: Input: \[arbitrage, cities, dikw, economy\] Output: \- \[\[Arbitrage\]\] \- \[\[Cities\]\] \- \[\[DIKW\]\] \- \[\[Economy\]\] Just print the output, nothing else. For best results, ensure that the tags in Readwise match the topic nodes in your Tana graph as closely as possible. Related docs: - [Readwise integration](/docs/readwise-integration) - [Tana AI](/docs/tana-ai) # Tana Capture # Tana Capture A mobile companion app to capture your thoughts and send them to Tana, anywhere and anyhow. ## [Overview](#overview) Tana Capture is a mobile companion app designed for quick capture of thoughts and moments of genius on your mobile, sending them straight to your Tana inbox. Available for Android (iOS being deprecated, use [Tana mobile](/docs/tana-mobile) instead): [Android download](https://play.google.com/store/apps/details?id=com.tanacapture) ![](https://cdn.sanity.io/images/rfb95wph/production/d64c292bf085a514bf9068023d3957b5a6c60f38-1920x1080.png?w=3840&q=75&fit=clip&auto=format) ## [Basics](#basics) - 🌊 **Seamless Text Capturing**: Jot down ideas, notes, or tasks on the go with Tana Capture's intuitive and user-friendly interface. Stay organized and never miss a vital piece of information again. - **💬 Talk and transcribe**: Record voice memos, interviews, or meetings quickly and effortlessly. Tana Capture ensures that you can recall spoken information with the tap of a button. - **📨 Share to Tana**: Share media and links super-fast, from all over the web. - 📷 **Snap and Send**: Take pictures or record videos and instantly send them to your inbox in your workspace. Document your progress or capture inspirational moments right at your fingertips. - **📖 Scan with Precision**: Transform any physical document, business card, or receipt into a digital format with Tana Capture's powerful text-scanning capabilities. Eliminate paper clutter and efficiently store all your documents in one location. Oh, and did we mention locked screen widgets and quick action? ## [Voice memo on Tana Capture: Overview](#voice-memo-on-tana-capture-overview) (Relocated from [Voice memo](/docs/voice-memo) docs and will eventually be deprecated) **Voice memos are a fast way to get your thoughts out of your head and into Tana for further processing.** Tana Capture's voice memo is perfect for when you're on the go and all you want is a quick and friction-less way to capture your thought in as much fidelity as possible. Voice memos are also great for moments where you can't thumb-type it down fast enough or you're in the middle of making dinner. **When a voice memo is recorded, it gets sent to your current daily note** via the Inbox and instantly transcribed and enriched by entities in your Tana. **You can further process voice memos using Rewrite**, an AI feature for rewriting transcripts into other types of content. ## [Basics](#basics) - Make voice recordings in [Tana Capture](/docs/tana-capture), and they will be sent to your daily notes page (via the Inbox) and processed there. - Speak in a single task, and it will be automatically tagged and added to your list of tasks. - For longer recordings, zoom into it and you'll see a full transcript that you can use the Rewrite action on. - This does not work with the voice recording feature on the desktop app, as those do not send the voice file via the Inbox for processing. You can process it manually by running the command _`Inbox Audio Processing Command`_ - The **Rewrite** action helps you transform a rambling set of thoughts into a fully written piece. Current options include _Summary_, _Pros and cons_, _Article_ and _Tweet_, with more to come. Rewrite is present on all voice recording files in Tana. - When you rewrite as Article, a `Publish` button appears that opens the preview window for [Tana Publish](/docs/tana-publish). In one click you can share the piece externally, with password protection or freely. ## [Details](#details) > Below is only applicable to voice memo workflows for Tana Capture on Android ### [How to use voice memos](#how-to-use-voice-memos) - Make sure you are subscribed to a paid Tana plan (or activated a trial at least) and that voice memos are installed in your Tana - Get the Tana Capture app on your phone and record a voice memo. If you don't have it yet, you can download it here. Note: You can also drag an audio file into the Inbox and it'll start processing. - The recording will be sent to your daily notes immediately and transcribed. - For any voice memo, you can zoom into it to see a full transcript that you can use the Rewrite action on. If it found items like tasks, it will put them in the Items tab. ### [Rewrite](#rewrite) All voice recordings now have a new feature called Rewrite You can find the Rewrite options on the top-right of the voice recording. **Summary**: Generates a summary of the transcript **Pros and cons**: Generates a list of pros and cons. Tag the title with #article to publish and share immediately with Tana Publish **Article**: Generates an article you can publish and share immediately with Tana Publish **Tweet**: Generates drafts of short-form social media posts These are just the beginning, more to come! ### [Voice memo setup for existing users](#voice-memo-setup-for-existing-users) If you're an existing user, you'll see a blue prompt on the bottom of the sidebar to try out the new voice memo. This guides you through a short setup which will confirm which #task tag you want to use, and replaces all On added commands currently on your Inbox. If you want to save these commands, we recommend moving them out before running the setup as it will replace everything with the new command (see below). ### [New command node: Inbox Audio Processing Command](#new-command-node-inbox-audio-processing-command) The `Inbox Audio Processing Command` is a new command specifically to process audio coming through the Inbox. It transcribes, then sends the voice memo to your daily notes page. The only available parameter is `Tag candidates`. By default, this is set with your chosen Task tag. To find it, run the command `Configure node` on the Inbox node and scroll down to `On child added`. #### [To change the default task that gets used by voice memos](#to-change-the-default-task-that-gets-used-by-voice-memos) Follow the instructions above to open the `Inbox Audio Processing Command`. In the `Inbox Audio Processing Command`, open the configuration and there you can change the default tag that gets applied ![](https://cdn.sanity.io/images/rfb95wph/production/97de750e79a3d689cf76832e8f3d59473b88231c-1934x1752.png?w=3840&q=75&fit=clip&auto=format) #### [To change the target location for voice memos](#to-change-the-target-location-for-voice-memos) Follow the instructions above to open the `Inbox Audio Processing Command`. In the `Inbox Audio Processing Command`, open the configuration and add the parameter called `Target location for voice memos`. There you can choose from options or paste a reference to any node you want them sent to. If it's empty, the voice memo is not moved anywhere. ![](https://cdn.sanity.io/images/rfb95wph/production/acb62113b26f8110d2841a98f998b00f46003700-1230x692.png?w=3840&q=75&fit=clip&auto=format) Copy link Rate article ## Related FAQs [See all](/faq) ## Question - How do I enable the scan text feature in Tana Capture on iOS? Sep 27, 2024 ## Examples - How can I add supertags on things that I send from Tana Capture? Sep 27, 2024 Copy link While it isn't possible to tag things when you're sending things from Tana Capture, you can have Tana do some post-processing magic to convert written-out tags to real tags once they arrive the Inbox—no AI needed! 1. This method uses a simple [Tana Paste](/docs/tana-paste) command that you can run on the Inbox node, which targets all new children that have "#" in them. 2. Once you've created the command, you must add it to the `On child added` section of the Inbox node. You can find it by running the command `Debug node` on the title of the Inbox. ### [Here's Theo describing the command:](#heres-theo-describing-the-command) "All it does is paste the nodes that have # in them and that are not tagged, using Tana Paste. Say we add this through Tana Capture: `buy milk #todo` The command will paste that exact text back in with Tana Paste, where `${name}` is `buy milk #todo` and `${sys:content}` are any child notes that are present. Using Tana Paste, `#todo` will be added as a tag. Note: this creates a new node, so the created date will change, meaning you’ll lose the time that the node was captured through Tana Capture." ![](https://cdn.sanity.io/images/rfb95wph/production/61b1fd797a397d9c20f2799c73807ae060f693a2-1680x945.png?w=3840&q=75&fit=clip&auto=format) Related docs: - [Supertags](/docs/supertags) - [Tana capture](/docs/tana-capture) - [Tana paste](/docs/tana-paste) - [Command nodes](/docs/ai-command-nodes) # Import data into Tana # Import data into Tana Documentation on import methods we currently support. ## [Overview](#overview) Currently we support Roam, OPML/Workflowy and Logseq as native import formats. Check out [Tana Intermediate Format](/docs/tana-intermediate-format) to see an early version of community-supported importers for other platforms, and how you could contribute to build an importer for your favorite format. ## [Details](#details) ### [Roam](#roam) 1. Before exporting anything from Roam, you may want to do some preprocessing on your graph. [Here are some tips on things to consider](/articles/community-resources-importing-from-roam). 2. When ready, choose Export all to download a JSON of your graph in a zip file 3. In the Tana sidebar, go to the User icon > Import content > Roam, and drag your JSON file in to be uploaded 4. Imports create a new Tana workspace, so it's separate from your existing workspaces. Imported content _may_ be located in the Library. 5. If you want to access the Roam content from another workspace, you can go to your workspace home, press on ··· > Allow content from... and check the Roam workspace. ### [Logseq](#logseq) 1. In Logseq, choose `Export graph` to download a JSON or OPML of your graph. 2. In the Tana sidebar, go to the User icon > Import content > Logseq, and drag your file in to be uploaded 3. Imports create a new Tana workspace, so it's separate from your existing workspaces. Imported content _may_ be located in the Library. 4. If you want to access the Roam content from another workspace, you can go to your workspace home, press on ··· > Allow content from... and make sure the imported workspace is checked. ### [Workflowy/OPML](#workflowy-opml) 1. [Download an OPML file](https://workflowy.zendesk.com/hc/en-us/articles/202610389-OPML-support-imports-and-exports) from Workflowy. 2. In the Tana sidebar, go to the User icon > Import content > Workflowy/OPML, and drag your JSON file in to be uploaded 3. Imports create a new Tana workspace, so it's separate from your existing workspaces. Imported content _may_ be located in the Library. 4. If you want to access the imported content from another workspace, you can go to your workspace home, press on ··· > Allow content from... make sure the imported workspace is checked. ### [Notion](#notion) There is no official Notion importer at the moment. On the GitHub site for the [Tana Intermediate Format](/docs/tana-intermediate-format) there is a work in progress importer by a community member, but it requires programming knowledge to test it out. ### [Markdown / Tana Paste](#markdown-tana-paste) While it is not possible to import markdown files straight into Tana, the [Tana Paste](/docs/tana-paste) format is based on markdown and is therefore very similar. It's a format that allows you to paste structured Tana content via a plain text input. **Alternative resource:** Ambassador Andrea Grasso created a [Tana Paste GPT](https://chatgpt.com/g/g-dMIJaLnIf-tana-paste-gpt) that converts different formats into Tana Paste format. ### [Google Sheets / CSV](#google-sheets-csv) Copy-pasting cells from Google Sheets to Tana works very well. If you have an .xlsx or .csv file, open it in Google Sheets and copy-paste into Tana from there. Alternatively, Navigator Mark Midlick created a CSV-to-Tana tool: - [CSV Converter Tool](https://csvtana.streamlit.app/) - [How-To Video (youtube)](https://www.youtube.com/watch?v=1UwUOTZiOuk) Copy link Rate article ## Related FAQs [See all](/faq) - Where is my imported content? The new workspace appears to be empty Sep 27, 2024 # Tana Paste # Tana Paste Generate rich Tana objects through a simple plain text language based on markdown. ## [Overview](#overview) Tana Paste is a way of generating rich Tana structures like fields, tags, dates, checkboxes etc, through a simple plain text paste. It is not designed for inputting large amounts of information, and rather for automating one-off, small, generative results. For heavy lifts, use import tools, API or other scalable solutions. The syntax is loosely modelled on Markdown. ## [Detail](#detail) ### [Head](#head) A Tana Paste is a plain text paste that begins with the string `%%tana%%`. ### [Nodes](#nodes) Nodes are prepended by `-` (a dash and a space) and indentation indicates children. ### [References](#references) References are defined with double brackets `[[ ]]` - This will look for a node in the Library of the current workspace matching that name. If none exists, a new node will be created and linked to. Multiple links with the same string will always point at the same node. - You can also specify a node target using `[[link name^nodeID]]`. If the `nodeID` does not exist, it will fall back to using the link name. - If you only supply a `nodeID`, and it does not exist, it will create a link to "undefined", which you can later rename. - If you also specify the tag of the link, like so: `[[Wes Anderson #person]]`, it will find a node named Wes Anderson and tagged #person anywhere in your graph, and link to that, or create a new node in the library with the provided tag. ### [Fields](#fields) Fields use `::` between the field name and the value. - Fields will look up by string, but if they are nested underneath a supertag which has any fields with that name, Tana will prioritize the field from the supertag definition. - `✨New` stricter requirements for matching existing fields: - `^nodeID::field value` This will work if `nodeID` is a field that exists in a loaded workspace - `someTitle^nodeID::field value` If `nodeID` is a field in a workspace that is not loaded this will not work, use `[[someTitle^nodeID]]::field value` instead - `foo^bar::field value` This will not work, since `bar` is not an actual `nodeID` that exists - If the field has a type of option or instance, and the provided value matches perfectly with an existing option or instance, the existing option or instance will be linked even if the text in the Tana Paste is not a link. - Fields with multiple values can be specified through `- [[field name]]::` and then the values nested and indented underneath (also prepended with dashes) ### [Supertags](#supertags) Tags use `#`, and multi-word tag names can optionally be wrapped in `[[]]`, so either `#bug` or `#[[my ideas]]`. - If no tag exists, a new one will be created. - If you want to specify a specific tag, use `^` like `#bug^nodeID`. It will fall back to the string name, and if no string is provided and the `nodeID` doesn't match, the tag will not be created. - You can link to a tag using `[[#tag]]` (especially useful in search nodes) ### [Views](#views) You can set the view of a node, using `%%view:table%%`, `%%view:cards%%`, `%%view:tabs%%`, or `%%view:calendar%%`. See search node example below for a demo. ### [Search node](#search-node) Add `%%search%%` to a node to make it a search node, with the search expression indented under. In a search expression, we recognize system nodes like `Set/Not set` and field operators like `LINKS TO`, `OWNER` etc. For field names, it's looking for a name match. To minimize confusion, add or replace the name with `^nodeID` to specify the exact field you mean. Example: %%tana%% - %%search%% Todo with start-date within next month %%view:table%% - \[\[#task\]\] - LT:: - Due date^B\_QE7GpJBP :: \[\[May 10th, 2024\]\] - NOT DONE ### [Dates](#dates) Simple dates look like this: `[[date:2021-02]]`. - They can include time `[[date:2021-02-01 20:30]]`, or only include the week `[[date:2021-W02]]`, month `[[date:2021-02]]` or year `[[date:2021]]` - Durations are written like `[[date:2021-02/2021-04-05]]`. - We also still support the old format `[[August 22nd, 2020]]`. ### [Checkboxes](#checkboxes) Checkboxes use `[ ]` and `[x]` at the beginning of a node to indicate checked or unchecked. - For fields/nodes which already have a checkbox, providing the `[ ]` will not change anything, but for other nodes/fields it will insert a checkbox. - In all cases, `[x]` will correctly set the checkbox as checked. ### [URLs](#urls) To add a URL, use this syntax: `[name](url)`. Example: %%tana%% \- \[Tana website\](https://tana.inc) ### [Other](#other) - There is support for Markdown tables and code blocks. - Images use the syntax `![](https://image.url)` - Formatting: `**bold**`, `^^highlighted^^`, `__italic__` - `✨NEW` Headings: Start node with `!!` - You can find examples of scripts that output text in the Tana Paste format here [https://github.com/tanainc/tana-paste-examples](https://github.com/tanainc/tana-paste-examples) - [Watch a demo by Stian that walks through Tana Paste](https://www.loom.com/share/6fd81ff1ab364acf9f448ffdedfeb57f). Copy link Rate article ## Related release notes [See all](/releases) - ImprovedTana Paste now supports headings. Start the node with !! [(2025 / wk 03)](/releases/2025-wk03) - FixedFixed issue with parsing single character link aliases in Tana Paste [(2024 / wk 47-49)](/releases/2024-wk47-49) ## Related FAQs [See all](/faq) ## Examples - Can I create search nodes using Tana Paste? Sep 27, 2024 Copy link Yes you can: We have a basic syntax for this which you can [read about here](https://tana.inc/docs/tana-paste#search-node). Example of a task search: %%tana%% \- %%search%% Fei's tasks - OR:: - \[\[#task\]\] - \[\[#CS todo\]\] - Assigned to:: - \[\[Fei-Ling Tseng\]\] - NOT DONE When I paste the above, this is the result: ![](https://cdn.sanity.io/images/rfb95wph/production/9ed82f7723dcdec354098544a1e128417e951b50-1802x1014.png?w=3840&q=75&fit=clip&auto=format) Related docs: - [Tana paste](/docs/tana-paste) - [Search nodes](/docs/search-nodes) . - How to use Tana Paste with supertags that have non-alphanumeric characters? Sep 27, 2024 Copy link Tana Paste can usually parse supertags that are one word, such as `#task`. If a supertag has spaces, numbers or irregular characters, try wrapping the name in double brackets like this: `#[[1'3$4'6]]` If you want to grab the supertag definition, include the hashtag within the brackets, like this: `[[#1'3$4'6]]` Related docs: - [Tana paste](/docs/tana-paste) - [Supertags](/docs/supertags) . - How can I add supertags on things that I send from Tana Capture? Sep 27, 2024 Copy link While it isn't possible to tag things when you're sending things from Tana Capture, you can have Tana do some post-processing magic to convert written-out tags to real tags once they arrive the Inbox—no AI needed! 1. This method uses a simple [Tana Paste](/docs/tana-paste) command that you can run on the Inbox node, which targets all new children that have "#" in them. 2. Once you've created the command, you must add it to the `On child added` section of the Inbox node. You can find it by running the command `Debug node` on the title of the Inbox. ### [Here's Theo describing the command:](#heres-theo-describing-the-command) "All it does is paste the nodes that have # in them and that are not tagged, using Tana Paste. Say we add this through Tana Capture: `buy milk #todo` The command will paste that exact text back in with Tana Paste, where `${name}` is `buy milk #todo` and `${sys:content}` are any child notes that are present. Using Tana Paste, `#todo` will be added as a tag. Note: this creates a new node, so the created date will change, meaning you’ll lose the time that the node was captured through Tana Capture." ![](https://cdn.sanity.io/images/rfb95wph/production/61b1fd797a397d9c20f2799c73807ae060f693a2-1680x945.png?w=3840&q=75&fit=clip&auto=format) Related docs: - [Supertags](/docs/supertags) - [Tana capture](/docs/tana-capture) - [Tana paste](/docs/tana-paste) - [Command nodes](/docs/ai-command-nodes) . ## Question - Can a command move the current node to a field of a new node? Sep 27, 2024 # Copy-paste in Tana # Copy-paste in Tana There are many ways to copy and paste content in and out of Tana ## [Documentation](#documentation) ### [Copy](#copy) [Go here to read about all the ways you can copy in Tana.](https://tana.inc/faq/what-are-all-the-ways-i-can-copy-data-out-of-tana) ### [Paste](#paste) #### [Commands Paste as code / Paste code as ->](#commands-paste-as-code-paste-code-as) You can paste code from your clipboard via the "Paste as code" command, and it will be shown as a monospaced block. Select the language from the dropdown to get the correct syntax highlighting. #### [Pasting from Google Sheets](#pasting-from-google-sheets) Copy-pasting cells from a Google Sheet will appear as a table in Tana. #### [Pasting _Tana Paste_](#pasting) If you copy Tana Paste code and paste it in Tana, it will run a special process which will convert the Tana Paste code as Tana objects. [Go here to read more about Tana Paste](/docs/tana-paste). Copy link Rate article ## Related release notes [See all](/releases) - ImprovedWe've improved pasting of lists. We've had several edge-cases related to ordering and indentation that should now work much better. If you are still experiencing paste results that look bad it would be very helpful if your bug report includes a reproducible case. The easiest way for us to fix it, is it you take your example and go to https://evercoder.github.io/clipboard-inspector/ and paste it in there, then copy the information from "text/plain" and "text/html". [(2025 / wk 6)](/releases/2025-wk06) ## Related FAQs [See all](/faq) - What are all the ways I can copy data out of Tana? Sep 27, 2024 # Tana Templates # Tana Templates Built by creators, for creators. With Tana Templates, every user will have the power to share Tana-to-Tana content like ideas, setups and workflows directly with each other, from their own platform. ## [Overview](#overview) **Have something to share.** Let's say you have created a cool way to record your recipes, a great OKRs system or there's a Public Domain book you've put into Tana and cleaned up for annotations, which you want to make available to others. **Authors share templates from their Published Workspace.** Like a basket 🧺, you create a node where you put all the content for the template in one place. Then, you generate a Tana Template URL from that node and this can be shared with anybody who has access to Tana. **Recipients add templates to their Home.** When you open a Tana Template URL, you get a pop-up preview of the template, and a button that allows you to "Add to Home" the contents of the template. If you have multiple workspaces, you'll have the choice of which workspace you want to install the template at. **Note that Templates are copies of the original.** Once you "Add to Home", you're creating a local copy that has no connection to the original. ## [Documentation](#documentation) ### [To create a Tana Template](#to-create-a-tana-template) 1. Create a Published workspace by going to the Home node and under the ··· menu, choose Publish workspace. This will make the workspace publicly accessible. 2. Create a node in the Published workspace that will be the template node. 3. Nest your content under the template node. 4. Use the command "Share as Template" on the template node, then Copy a link to the template. 5. Share the link! ### [To install a Tana Template](#to-install-a-tana-template) 1. Click on a Tana Template link, which will open Tana in a new browser tab 2. Choose destination workspace (if you have multiple workspaces), then Add to home ### [Best practices](#best-practices) - For creators: To avoid unwanted external references in your templates, build the templates from scratch in the workspace under one node which you intend on sharing. - For recipients: You may be tempted to install ALL the templates you find so you can explore what's out there. If you do this, try not to move things out piecemeal. Some templates are more complex and will have supertags, fields and nodes with interconnected relationships. If you decide you want to use the template, follow the author's installation instructions. If you decide you don't want to use a template after all, you can hard-delete (Cmd/Ctrl-Shift-Backspace) the main node and all the supertags, fields and searches will be removed with it. Check out [this complete guide on creating your first Tana Template](/articles/create-your-first-tana-template-)! Copy link Rate article # Tana Publish: Pages # Tana Publish: Pages Share information with anyone using Tana Publish: Pages. Pages let you transform your nodes into beautiful pages with minimal effort on your part. ## [Overview](#overview) Pages is the first product we're rolling out for Tana Publish. With pages, you can publish a node as a long-form style, standalone page, and share the URL with anyone. ![Published page from Tana](https://cdn.sanity.io/images/rfb95wph/production/49196db4f0ae69f518b46ca1f187badfb1aa64f3-1404x1624.png?w=3840&q=75&fit=clip&auto=format) ## [Basics](#basics) - Any node can be published and shared as a page. - Pages can have banner images (option to generate with AI) at the top of the page. - The publish preview allows you to customize the look-and-feel of individual nodes and fields. - In addition to List view, pages also work with Table, Cards and Tabs view. - You can update changes to published content in an instant. - Thumbnails are auto-generated for places that support link previews (try it out in Slack or Twitter/X for example) ## [Documentation](#documentation) ### [Turn on publish settings](#turn-on-publish-settings) On the node you want to publish, first you need to turn on publish settings: - Option 1: right-click on the node bullet > Publish - Option 2: run the command Cmd/Ctrl+K > Publish A node with publish settings activated will have a globe dropdown appended to it with the following options: - **Open preview:** opens a preview of the node in the right dock. If it's already open, it will be grey. - **View on the web:** If node has a published URL, this will open the page in your browser. - **Unpublish:** If the node has been published/has an active URL, you have the option here to unpublish it, which will remove the content and the URL from the internet. - **Remove publish settings:** If the node isn't published, you have this option to remove publish settings from the node, returning it to a regular node ### [Publish a Page](#publish-a-page) To publish a page: - Open the preview and on the top bar, press the green Publish button. A link to the URL is automatically copied to your clipboard. ### [Updating a Page](#updating-a-page) When you make changes to the content of the published node, a new button called Publish changes appears on the top left. Press it to make changes live on the published page. ### [Remove a published Page](#remove-a-published-page) To remove a published page from the internet: - Option 1: Push button on top left that says Unpublish - Option 2: Cmd/Ctrl+K > Unpublish ### [Adding a banner to a Page](#adding-a-banner-to-a-page) Banners will show up at the top of the page, and will also be the background for the automated thumbnail we generate when this link is posted in places that support thumbnails. - To add a banner, open the publish node, and drag an image into the banner area. - To remove the banner, go Cmd/Ctrl+K > Clear banner ### [Formatting options](#formatting-options) Through the preview, you have the option to change the formatting of the page and individual items. #### [Page-wide](#page-wide) - Pages have two text options: _Serif_ and _Sans serif_ - To set this, open the page formatting options by clicking on the TT button on the right side of the top bar, then select the option you want. #### [Nodes](#nodes) Formatting of nodes are informed by the outline structure. If a node has children, it becomes a heading. There are up to 6 levels of headings that can be created by indenting nodes. A node with children has the following two options: - **Paragraph:** Show node as heading and children as paragraphs. - **Heading + list:** Show node as heading and children as bullet lists. A node without children has the following two options: - **Paragraph:** Show node as paragraph - **Quote:** Show node as quote Descriptions to nodes show up as smaller, lighter grey text under the node, as it does in Tana. #### [Fields](#fields) Fields have several formatting options: - **Label + value:** Shows the field name and value in a column each (default). - **Heading + paragraph:** Shows the field name as heading, and field values as paragraphs. - **Heading + list:** Shows the field name as heading, and field values as a bullet list. - **Quote:** Shows the field values as quotes - **Paragraph:** Shows field values as paragraphs. - **Move to top:** Moves the field to the top of the page. Descriptions to field names do not show up in Publish. #### [Views](#views) The following views work in Tana Publish: - **List view:** Default setting. - **Table view:** Shows parent node and field names as table headers, and each node becomes a row. - **Cards view:** Shows parent node as heading, and each child node as a card. Field values of child nodes are also shown. - **Tabs view:** Shows parent node as heading, and child nodes as tabs. Note: All other views are unsupported for now. #### [Horizontal line](#horizontal-line) If you type three dashes, they turn into a horizontal line. #### [Images](#images) - Images will show up full-width within the content. - Text on the image node becomes the caption of the image. - Dozens of images should be fine, hundreds of high-res, heavy images will likely not publish. - Images are not [indexed](#indexing). #### [Audio and Video](#audio-and-video) Publishing audio and video files is currently not supported. Consider embedding videos from YouTube and Vimeo. #### [Embeds](#embeds) We support the following links: - Youtube - Vimeo - Figma - Spotify (playlists/albums only) ### [Automatic thumbnails](#automatic-thumbnails) In places that show link previews, these will be populated by an auto-generated thumbnail based on the title and banner of the page. ### [Limits](#limits) #### [Node limit](#node-limit) There's a limit of 3000 nodes that can be published in one page. #### [Linking to other published pages](#linking-to-other-published-pages) If you want to link to other published pages, use the published URL. If a published node is part of the content of a published page, it won't appear when published. This functionality was scoped out for now. #### [Contextual content](#contextual-content) Published pages do not show the values of contextual content/columns. #### [Indexing](#indexing) As of October 26th, 2023: - The pages are not automatically added to Google’s search index. - But there is currently nothing stopping Google (and other search engines) from picking up a link to a published page if someone posts a link, say, on X/Twitter or some other public forum. - We specifically don’t allow indexing of images. Copy link Rate article ## Related release notes [See all](/releases) - FixedFix HTML formatting in tabs view in Tana Publish [(2025 / wk 6)](/releases/2025-wk06) - FixedWe fixed an issue where publishing a URL node to tana.pub would not show fields/content. [(2025 / wk 5)](/releases/2025-wk05) - ImprovedWe now automatically refresh search nodes when publishing/republishing Tana Pages [(2025 / wk 5)](/releases/2025-wk05) - ImprovedTana Publish updates: 1. A byline option has been added to Publish. It can show an author name, title and image as well as the publish date, 2. Added option for heading font style – defaults to sans. Control it separately from text font style, 3. Changed serif font to Source Serif, 4. Various minor typography and layout adjustments [(2025 / wk 02)](/releases/2025-wk02) - ImprovedTana Publish toolbar updates: 1. Added copy link button, 2. Updated layout and icons to improve usability, 3. Added missing feedback on some actions, 4. Updated wording on some actions. [(2025 / wk 02)](/releases/2025-wk02) - ImprovedA new command 'Copy published link' will, on published nodes, do just that. Also available in the context menu for published nodes. [(2025 / wk 02)](/releases/2025-wk02) # Tana Labs # Tana Labs We've created Tana Labs for the users who want to test our upcoming features that are still in development. ### [Saved Layouts](#saved-layouts) When you open up multiple panels, this will allow you to save your layout to revisit later. Does not work with docks. Build the perfect layout, hit the Save layout in the left sidebar (or use Cmd/Ctrl + K > save layout), and save it to the right workspace. ### [Editor tips](#editor-tips) Suggests tips for users for Tana features when detecting commands from other tools ### [Journal today view](#journal-today-view) Show the current day node when expanding the Daily notes node on the home node. Copy link Rate article # Command nodes # Command nodes Command nodes let you customize a string of actions which you can run via buttons or via the command line. ## [Overview](#overview) Command nodes help you get one or more tasks done in Tana. You can create your own command nodes with multiple commands, or steps, within them. For example, build a “Process voice memo” command node that grabs the voice recording, transcribes it, creates and tags tasks and ideas that it finds, and sends it all to your daily notes. Command nodes can be run via the command line, as buttons on a supertag, or via node events. Command nodes are easier to understand if you're already comfortable with using the command line and the search query. For commands that use AI, see here: [AI commands](/docs/ai-command-nodes) ## [Basics](#basics) - There are three essential elements to creating custom commands: the `command node` that is a container for the command, the `commands` that represent the actions you want to do, and the `parameters` that are the settings for the commands - To create a custom command node, run Cmd/Ctrl+K > Convert to command node on an empty node. - To configure what the command node does, add commands as child nodes to it. To get a list of all available commands you can add, use @. - Each command can receive certain parameters (represented as system fields), listed in the description. The ones that are starred are required. Add the necessary parameter fields to the command (hit \> to create a field, then the name of the parameter), and fill it with the necessary field value. - If there are multiple commands in the command node, they are executed in the order that they're listed from the top. - You cannot add the same command twice. To repeat a command, wrap it in another command node and add that to the list. - Command nodes appear as buttons attached to nodes, supertag instances, or fields. They also appear in the command line. - You can control when/where a command appears by using _node filter_ and _node context_ parameters on the main command node. - You can find all commands in your workspaces by writing the keyword operator `IS COMMAND` in the search node. ## [Documentation](#documentation) ### [Create a command node](#create-a-command-node) To create a command node, on any node go Cmd/Ctrl+K > Convert to command node: The icon of the node will change. Give the command node a name, which will appear on command buttons, and on the command line. ### [Set up commands and parameters](#set-up-commands-and-parameters) #### [Commands](#commands) To configure the command node, select the commands you want using @. This gives you a filtered list of all available commands, including Tana commands, AI commands and custom commands you've defined previously. Tana commands include: - **Set field value** tells the system to do the \_action\_ of setting a field underneath your node—same way we do it ourselves—and then, optionally, filling that field with a specific value. - **Insert a cloned copy of a node** tells the system to do the action of copying another node (that you specify inside the command) and bringing a clone of that node into the context in which you're working. - **Add tag** adds a tag to your node, and **Remove tag** takes one away. See [All Tana commands](#all-tana-commands) for a full list of options. #### [Parameters](#parameters) Each command has a set of parameters you use to configure it. To add a parameter to a command, add any of the listed parameters as a field under the command. Parameters with a star are required. Using the example of the Move node command, you'll find these settings: - **Target node**: Let's you instruct the action where to send the moved node. - **Remove reference after moving node**: Let's you decide whether you want there to be a reference to your moved node at the current location, or not. - **Node filter/Node context**: These settings are available on all commands and let you specify which nodes will run your command, in various ways. Using the `Move node`\-command and these settings, you could, for instance, make a command that - Sends a node to your team workspace and - Removes the reference from your workspace Combining this with `Add tag` and `Set field values`, you could 1. create a new `#project` (Add tag) 2. assign it to your teammate `Brage` (Set field value) 3. set status to `Active` (Set field value) and 4. send it to your shared workspace `Viral Content` (Move node) all with one button click. ### [Access commands](#access-commands) #### [Commands in the command line](#commands-in-the-command-line) Once you've configured your command node, it will appear in the command line (Cmd/Ctrl+K) as another command you can access alongside the default commands. #### [Commands as buttons](#commands-as-buttons) Once you've configured your command node, you can use it to make buttons appear in any node. With your caret on target node, go to the command line Cmd/Ctrl+K > Configure node to open the node configuration. Add your command node in the Commands field. ![](https://cdn.sanity.io/images/rfb95wph/production/59819a22e5d39d2f7847900f90689b9f0b9adedc-2130x958.png?w=3840&q=75&fit=clip&auto=format) You can also add a command node to a supertag or field, see the supertag/field configuration panel > AI and Commands section > **Compact/Full menu**. Paste in the command you want to use in the compact or full menu field, and the command will appear alongside the tagged node or field. ![Command buttons will appear next to tagged node](https://cdn.sanity.io/images/rfb95wph/production/8e2bf1d03850722834fbda39f7a026ddbc5f75ab-342x68.png?w=3840&q=75&fit=clip&auto=format) #### [Command menu buttons](#command-menu-buttons) It is now possible to group multiple commands together in a menu button. These can either be shown on collapsed nodes (Compact menu) or only when you expand/zoom into a node (Full menu). ![Command buttons with nested menus](https://cdn.sanity.io/images/rfb95wph/production/645ec57fdba8be16327f79cfd25204dbd95795da-600x179.png?w=3840&q=75&fit=clip&auto=format) To create command menu buttons; 1. Go into the AI and Commands section, to Compact/Full menu 2. In one of the fields, create a node with the menu title 3. Do Ctrl/Cmd+K > Convert to Group on the node 4. Indent below the node and paste in the commands you want shown in the menu 5. For nested menus, make an indented node and convert this to a group, before pasting commands indented under that ![Nested command button menu](https://cdn.sanity.io/images/rfb95wph/production/e9683ca71af447e0c026aa21c7e200a9ba187765-582x508.png?w=3840&q=75&fit=clip&auto=format) #### [Node filter](#node-filter) Using the parameter `Node Filter`, you can use search query language to control which nodes the command can be run on. For instance, if you made a command specifically to run on your #standup tag and no other tag or node, you can add this: `>Node filter: #standup` ![](https://cdn.sanity.io/images/rfb95wph/production/6cfa46e9667ff674ba4bdf745ac625623560e3b1-1624x510.png?w=3840&q=75&fit=clip&auto=format) An excluded node will not display the command, neither from the command line nor as a button. ### [Finding all commands](#finding-all-commands) You can find all commands in your workspaces by creating a search node and using the keyword operator `IS COMMAND`. Scope it down to a workspace to only find commands from there. ### [Trigger commands on node events](#trigger-commands-on-node-events) You can have commands trigger when child nodes are added or removed from any node. For more, see [On child added/removed](https://tana.inc/docs/nodes-and-references#on-child-added-removed) You can also have commands trigger when a supertag is added or removed from any node. For more, see [On added/removed](https://tana.inc/docs/supertags#on-added-removed) ### [All Tana commands](#all-tana-commands) #### [Insert a cloned copy of a node](#insert-a-cloned-copy-of-a-node) _Can be used to emulate template behaviour, add a new time log entry to a time log etc_ - [Target node](#target-node) - [Node to insert](#node-to-insert) #### [Insert relative date](#insert-relative-date) _System command that inserts a date using the relative date string._ - [Relative date string](#relative-date-string) - [Reference date](#reference-date) - [Date/time granularity](#date-time-granularity) - [Set only start or end of date](#set-only-start-or-end-of-date) - [Target node](#target-node) #### [Move node](#move-node) _System command that moves a node_ - [Move node target](#move-node-target) - [Remove reference after moving node](#remove-reference-after-moving-node) - [Move original node](#move-original-node) #### [Add tags](#add-tags) _System command for adding a tag to a node._ - [Node filter](#node-filter) - [Node context](#node-context) - [Tags](#tags) #### [Remove tags](#remove-tags) _System command for removing a tag from a node._ - [Node filter](#node-filter) - [Node context](#node-context) - [Tags](#tags) #### [Set field values](#set-field-values) _System command for setting field values to a field._ - [Node filter](#node-filter) - [Node context](#node-context) - Fields to set #### [Set field values for all children](#set-field-values-for-all-children) _System command for setting field values to a field applied to all children. Example: Set all children to "status deployed" for a release process._ - [Node filter](#node-filter) - [Node context](#node-context) - [Fields to set](#fields-to-set) #### [Remove fields](#remove-fields) _Removes the specified field_ - [Fields to remove](#fields-to-remove) #### [Set done status](#set-done-status) _Sets the done status of a node to a particular setting_ - [Done status to set](#done-status-to-set) #### [Set view definition](#set-view-definition) _Takes the same information that is stored as a custom view on a node - can be used to configure which columns are shown, sorting, filtering, grouping etc._ - [Node filter](#node-filter) - [Node context](#node-context) - [View definition](#view-definition) #### [Set view type](#set-view-type) _Can set node to table, cards, list, tabs, calendar view._ - [Node filter](#node-filter) - [Node context](#node-context) - [View type](#view-type) #### [Show alert](#show-alert) _Displays a user alert_ - [Node filter](#node-filter) - [Node context](#node-context) - [Prompt](#prompt) #### [Ask for user confirmation](#ask-for-user-confirmation) _Displays a user confirm command, and halts execution if user does not confirm_ - [Node filter](#node-filter) - [Node context](#node-context) - [Prompt](#prompt) #### [Run commands in parallel](#run-commands-in-parallel) _Takes a list of commands as input, and runs them in parallel (default is sequential)_ - [Node filter](#node-filter) - [Node context](#node-context) #### [Run a command line command](#run-a-command-line-command) _Let's you run any command from the command line. Does not work well with multi-stage prompts_ - [Node filter](#node-filter) - [Node context](#node-context) - [Target node](#target-node) - [Commands](#commands) #### [Run commands on all children](#run-commands-on-all-children) _Let's you run a command on all children._ - [Command to run](#command-to-run) - [Look for children in field](#look-for-children-in-field) #### [Run commands on all children currently visible in the view](#run-commands-on-all-children-currently-visible-in-the-view) _Let's you run a command on the children based on what currently is in view. It respects the current search query (which may not be saved) and filtering of results._ - [Command to run](#command-to-run) - [Look for children in field](#look-for-children-in-field) ### [All AI Commands](#all-ai-commands) For commands that use AI, see here: [AI command nodes](/docs/ai-command-nodes) ### [All parameters](#all-parameters) #### [Node filter](#node-filter) - Description: Search query to filter nodes that this command can be run on - Source: Tana #### [Node context](#node-context) - Description: Node context for commands - defaults to node the command is run on - Source: Tana #### [Field dependencies](#field-dependencies) - Description: References to other fields on the same node. If any of these fields are empty, and have AI turned on, then their AI prompts will be run before evaluating this command. - Source: Tana #### [Target node](#target-node) - Description: Defines what Tana object to insert the result into. Can be a reference to a template node, or a field reference - Source: Tana #### [URL](#url) - Description: URL, processed using title expressions - Source: Tana #### [Insert output strategy](#insert-output-strategy) - Description: Default is adding as a child (except in fields, where default is replace) - Source: Tana #### [Payload](#payload) - Description: Payload type - Source: Tana #### [API method](#api-method) - Description: Defaults to GET - Source: Tana #### [Parse results](#parse-results) - Description: Defaults to no parsing (raw) - Source: Tana #### [Authorization header](#authorization-header) - Description: For authentication (for example "Bearer ....") - Source: Tana #### [Headers](#headers) - Description: API headers, must start with a word and a colon, like "Authorization: ..." - Source: Tana #### [Avoid using proxy](#avoid-using-proxy) - Description: For local sites, or where you know there is no CORS issue - Source: Tana #### [Tags](#tags) - Description: Define supertags - Source: Tana #### [Metaprompt to enhance prompt with GPT-3](#metaprompt-to-enhance-prompt-with-gpt-3) - Description: n/a - Source: Tana #### [View definition](#view-definition) - Description: View definition to apply to node - Source: Tana #### [View type](#view-type) - Description: Set view type by picking from dropdown. - Source: Tana #### [Fields to set](#fields-to-set) - Description: Fields to set, and optionally values - Source: Tana #### [Commands](#commands) - Description: Commands to execute - Source: Tana #### [Tag candidates](#tag-candidates) - Description: Define supertags that become candidates - Source: Tana #### [Fields to remove](#fields-to-remove) - Description: Define fields that, if present, will be removed. - Source: Tana #### [Move node target](#move-node-target) - Description: Define node to be moved. Reference to a specific node, field or a dropdown option - Source: Tana #### [Remove reference after moving node](#remove-reference-after-moving-node) - Description: Will remove the reference after moving node - Source: Tana #### [Move original node](#move-original-node) - Description: By default, if you run the command on a reference, the reference will be moved. This option can force the original node to be moved. - Source: Tana #### [Done status to set](#done-status-to-set) - Description: Gives you done state options to set. There are four options to choose from: - Node has no checkbox - Done - Not done - Toggle done status - Source: Tana #### [Command to run](#command-to-run) - Description: Write out the commands you want to run. - If you're uncertain about how a command is written out, navigate to it through the command line, create a custom shortcut, and go to `Settings > Private keyboard shortcuts` to the shortcut you just made and expand it. You'll find the command written out in a node. - Source: Tana #### [Look for children in field](#look-for-children-in-field) - Description: Looks for children in a specific field, instead of the node. Add reference to field definition. - Source: Tana #### [Relative date string](#relative-date-string) - Description: Write out a date string like _this week, in two months_, etc. Interpreted with prompt expressions. - Source: Tana #### [Reference date](#reference-date) - Description: Either a date, or use Lookup field to reference a field. If reference date is May 1, and relative date is in two weeks, the output will be May 15th. - Source: Tana #### [Date/time granularity](#date-time-granularity) - Description: Allows you to specify the granularity of the date object. Use the dropdown to set year, month, week, day, hour, minute, second, or millisecond. - Source: Tana #### [Set only start or end of date](#set-only-start-or-end-of-date) - Description: Allows you to specify whether you want to set a Start or End date/time. - Source: Tana Copy link Rate article ## Related release notes [See all](/releases) - ImprovedUsers will get a message now when the event system gets disabled with more details and it will tell them they will have to refresh [(2025 / wk 6)](/releases/2025-wk06) - NewCompact and full menu available in Supertag configuration under AI & Commands - It let's you build command menus for tagged nodes, similar to command palette but improved: - Command palette has been repurposed to Compact menu - Works like before, shows as buttons primarily in compact/item contexts – lists, cards, etc. - Full menu is an added option to build custom menus in detail contexts - Let's you define specific menus for full/detailed contexts – zoomed in/panel header, in a tab, expanded items, etc. - Use (Convert to group via command line) to group commands into dropdown menus - You can also nest groups for deeper menu structures. [(2025 / wk 5)](/releases/2025-wk05) - ImprovedYou can now use Draft panel as the Target node all command nodes that support Target node (press space to choose), which will open an ephemeral panel to the right with the output, with the option to move or insert in daily node [(2024 / wk 47-49)](/releases/2024-wk47-49) - FixedFixed bug where Transcribe Youtube video command didn't recognize certain valid Youtube URLs [(2024 / wk 47-49)](/releases/2024-wk47-49) ## Related FAQs [See all](/faq) ## Question - Why are my prompt variables not getting replaced with the actual values? Nov 27, 2024 - In the command line, Set \[field\] -> \[value\] doesn't show all my fields, why? Sep 27, 2024 - How do I share a supertag from my private workspace to a shared one? Sep 27, 2024 - Can a command move the current node to a field of a new node? Sep 27, 2024 ## Examples - A keyboard shortcut to invoke a set of commands Nov 21, 2024 Copy link > 🙏 Thanks to Chuck for surfacing this excellent tip for all keyboard users out there doing incremental/bullet journaling and who find that command buttons just aren't their thing! For more stuff like this, [join our community](/community) to share and learn about all things Tana 🫶 ### [Goal](#goal) Use one keyboard shortcut to bring up a very specific set of commands. ### [Instructions](#instructions) For this example, we're going to build _one command that brings up a set of commands_ for a bullet journaling practice. People who practice bullet journalling (or _BuJo_) usually decide on a list of keys or "signifiers": bullet symbols that mean different things to the writer. Here's an example of things that might be in this list: ![](https://cdn.sanity.io/images/rfb95wph/production/0106a727916b7f5a770ed752fd6be99f917983c2-1128x895.png?w=3840&q=75&fit=clip&auto=format) Example of signifiers: task, note, follow up, event, memory, look up, future log In Tana, we can assume each item in the list is a separate _supertag_. #### [Build the command](#build-the-command) 1. Decide on a prefix for your commands. In this example, we'll use "`Bujo:`". 2. For each of the signifiers 1. Create a new command called _Bujo: \[signifier\]_ 2. Add the command Add tag, and insert the supertag definition to the parameter 3. Create a keyboard shortcut: Run Create keyboard shortcut in the command line, then record the shortcut you want to use. In this case, we're using Cmd/Ctrl+Shift+P. In the parameter _Commands_, write the words `Bujo:`. ![](https://cdn.sanity.io/images/rfb95wph/production/a5d27d0df45bafcfe770309bea003355fe77bbc3-1626x2098.png?w=3840&q=75&fit=clip&auto=format) Setup of commands ![](https://cdn.sanity.io/images/rfb95wph/production/63305bd6f21ed9ab3f6ae9429450f44dfa453d8a-1007x495.png?w=3840&q=75&fit=clip&auto=format) Keyboard shortcut with the typed-in prefix BuJo: #### [Testing the command](#testing-the-command) To test it, use the keyboard shortcut Cmd/Ctrl+Shift+P - This will insert the words `Bujo:` in the command line - Type space to bring up all the options That's it 🙌 Related docs: - [Command nodes](/docs/ai-command-nodes) . - Move node to Library when a supertag is used Nov 13, 2024 Copy link > 🙏 Thanks to many community members but especially **Ready** and Navigator **Dee** for surfacing this tip in a recent conversation! For more stuff like this, join our community to share and learn about all things Tana 🫶 ### [Goal](#goal) To move all nodes to a single place when they get tagged. This is useful if you want nodes of a certain type to live in a place that makes sense for breadcrumb navigation. ### [Instructions](#instructions) For this example, we're going to build a command that moves all tagged nodes to the _Library_. #### [Build the command](#build-the-command) 1. Create a new command called _Move to Library_ 1. Add the command Move node 2. In the parameter Move node target, pick the _`Library`_ from the dropdown. There are other locations to choose from as well, and you can insert a reference to any node you want as the target 3. Add parameter Remove references after moving node and give it your desired setting. Most would want it `unchecked` so it leaves a reference of the node in the original location 4. Add parameter Move original node and `check` it. This ensures that even when you use the Add tag action on a reference, it moves the original node to the desired location and not the reference (which won't achieve the goal of this command) 2. Add the command to the config of the supertag in question. Go to _AI and Commands_ > _On added_, and add a reference to the command here. ![](https://cdn.sanity.io/images/rfb95wph/production/ba853fec9e6da07e2cde1ecc70987082cee23bde-1593x1002.png?w=3840&q=75&fit=clip&auto=format) #### [Testing the command](#testing-the-command) To test it, use the supertag on a node: - If used on a _node_, it should immediately send the original to the specified location and leave a reference behind. - If used on a _reference_, it should send the original - wherever it is - to the specified location. That's it 🙌 Related docs: - [Supertags](/docs/supertags) - [Command nodes](/docs/ai-command-nodes) . - Receive a notification whenever someone uses a supertag Nov 13, 2024 Copy link ### [Goal](#goal) Community member **Jérémie** asked: "_I created a new supertag called #feedback to collect feedback from my team. They can easily add a comment and add the supertag. Is there a way to receive a notification when the tag has been added?_" Great question! Below was the solution that worked 👇 For more stuff like this, join our community to share and learn about all things Tana 🫶 ### [Instructions](#instructions) #### [Build the command](#build-the-command) 1. Create a new command called _Notify me_ 1. Add the command Run a command line command 2. In the parameter Commands, write `Notify @[your tana account email]`. Example: `Notify @fei@tana.inc` 2. Go to the supertag config you want to be notified on, to the section **Trigger commands on events**, and add a reference to the command to the **On added** section: ![](https://cdn.sanity.io/images/rfb95wph/production/be9a7ce0d0b1559555ec0567c3557d567cf87a5c-1392x1168.png?w=3840&q=75&fit=clip&auto=format) #### [Testing](#testing) Test the command by adding the supertag. You should 1. get a notification that a notification has been sent, and 2. see a blue dot appear in your notifications. Clicking it shows you which node you were notified on. 🙌 That's it! Related docs: - [Command nodes](/docs/ai-command-nodes) - [Supertags](/docs/supertags) . - One command to toggle the related content section on/off Nov 13, 2024 Copy link > 🙏 Thanks to Navigator **Theo** for sharing how to implement this "focus mode" idea on Related content sections! For more stuff like this, join our community to share and learn about all things Tana 🫶 ### [Goal](#goal) You want to dial up your focus by hiding the Related content sections. ![](https://cdn.sanity.io/images/rfb95wph/production/d06ade1f7def058b84c32382140b54700cd73bb9-811x499.png?w=3840&q=75&fit=clip&auto=format) ### [Instructions](#instructions) #### [Build the single-command toggle](#build-the-single-command-toggle) [See this example on how to build it](/faq/one-command-that-toggles-the-checked-unchecked-state-of-a-field). Build the first section called "In the schema", then come back here. #### [Configure visibility of related content](#configure-visibility-of-related-content) To configure the related content sections you want to toggle the visibility on, each section will need a node filter where the checked state of the _is visible_ field determines whether they show up or not: - Navigate to the Related content section in the configuration: - For supertags, Cmd/Ctrl+Shift click on the tag itself - For nodes, run the command `Configure node` - For every related content section - Run the command Add contextual content on the related content nodes, and add `>Node filter:: >is visible:: true (checked)` ![](https://cdn.sanity.io/images/rfb95wph/production/d564a107bde6bf9692eabfe964d7a1c9f8d3cc1a-3088x2006.png?w=3840&q=75&fit=clip&auto=format) The system field Node filters on related content sections. #### [Testing](#testing) Test the command by running the _Toggle visibility_ command on the node. It should make the related content sections appear/disappear. Optionally, you can add the _Toggle visibility_ command to the node as a button, and then use that instead. 🙌 That's it! Related docs: - [Command nodes](/docs/ai-command-nodes) - [Command line](/docs/commands) - [Related content](/docs/related-content) . - A single command that toggles the checked/unchecked state of a field Nov 12, 2024 Copy link > 🙏 Credit goes to **Ulises RJ** and Navigator **Theo** for coming up with this elegant solution! Join our community to share and learn about all things Tana 🫶 ### [Goal](#goal) You want to build _one_ command that toggles the state of something, like a checkbox. The key that unlocks this is the obscure `Run commands in parallel` command, and this is an excellent use for it. The uses for a toggle are endless; this example will demonstrate how to build a visibility switch for command buttons. Let's call it the _single-command toggle_. **Note**: This is more like a proto-command, something that isn't useful on its own, but unlocks many creative uses. ### [Instructions](#instructions) #### [In the schema](#in-the-schema) 1. Create a checkbox field called _is visible_. 1. In the _Hide field_ setting, choose `Always` 2. Create a command node for checking the _is visible_ field: 1. Name: _visibility ON_ 2. Add node filter: `>NOT:: >is visible:: true (checked)` 3. Add command Set field values 4. In parameter `Fields to set: >is visible:: true (checked)` 3. Make another command node that removes the field: 1. Name: _visibility OFF_ 2. Add node filter: `>is visible:: true (checked)` 3. Add command Remove fields 4. In parameter `Fields to remove: is visible (field definition)` 4. Create a third command node for toggling between the two commands: 1. Name: _Toggle visibility_ 2. Add command Run commands in parallel 3. In the parameter `Commands to run`, add references to the two commands you created earlier 5. Test the command out: 1. On any node, run the command _Toggle visibility_. It should add the _is visible_ field to it, checked. Running it again should remove the field. ![](https://cdn.sanity.io/images/rfb95wph/production/e65a6d1e0ed8b7188418905bbff7edd1c0361e3a-2165x1901.png?w=3840&q=75&fit=clip&auto=format) Setup for the commands The commands are now ready to go. #### [Configure visibility of command buttons](#configure-visibility-of-command-buttons) To configure the commands you want to toggle the visibility on, each command will need a node filter where the checked state of the _is visible_ field determines whether they show up or not: - Create or find a node that has many command buttons you want to hide - For every command, add the `>Node filter:: >is visible:: true (checked)` - As you do this, the buttons should, one by one, disappear from the node. ![](https://cdn.sanity.io/images/rfb95wph/production/1f350542b43eba1400591750ec2bb9a4da47f9b1-1122x1107.png?w=3840&q=75&fit=clip&auto=format) A node filter applied to the command button #### [Testing](#testing) Test the command again by running the _Toggle visibility_ command on the node. It should make the buttons appear/disappear. 🙌 That's it! ### [Further ideas](#further-ideas) - **Bind a custom keyboard shortcut** to _Toggle visibility_ so you can easily toggle the visibility of buttons with the same keystrokes. See video above. - **Add the toggle command as a button:** then you can toggle things with a mouse-click instead - Use the same thing to [**toggle the visibility of related content**](/faq/one-command-to-toggle-the-related-content-section-on-off) sections Related docs: - [Command nodes](/docs/ai-command-nodes) - [Command line](/docs/commands) . - How does the "Set view definition" command work? Sep 27, 2024 Copy link There is a command called `Set view definition`. It can set the Group, Sort and Display settings of a node view. There is no good UX for this at the moment, so the instructions are not conventional nor friendly for beginners. But right now, this is one way of doing it: - Mock up a node that will have sample child nodes representing the data you'll be applying this command on - Then, create the exact view settings you want with Group, Sort and Display. - Go Cmd/Ctrl+K > Debug Node on the parent node and look at Views for node: ![](https://cdn.sanity.io/images/rfb95wph/production/f95d33c1e677b8a6c7ef213d43f7c7f1113af91a-1554x956.png?w=3840&q=75&fit=clip&auto=format) - Clone the fields over to the command node so it looks like this: ![](https://cdn.sanity.io/images/rfb95wph/production/8e3f3332193615a348bb2882a1bf4aeeeccba959-1476x916.png?w=3840&q=75&fit=clip&auto=format) When you run this command on a node, this should change the view settings according to your configuration. Related docs: - [Views](/docs/views) - [Command nodes](/docs/ai-command-nodes) . - How can I extract the start date of a range using Commands? Sep 27, 2024 Copy link Use `Insert relative date` command, here's an example: ![](https://cdn.sanity.io/images/rfb95wph/production/286e55bb7d957a46382074d8fde194908ac6e8b4-1602x1168.png?w=3840&q=75&fit=clip&auto=format) Related docs: - [Command nodes](/docs/ai-command-nodes) - [Dates and calendar nodes](/docs/dates-and-calendar-nodes) . - How do I use the Autofill command to enrich URL nodes? Sep 27, 2024 Copy link The Autofill command can generate a new node title and description based on the URL. To set up the command - Create a new command node - Add the `Autofill fields` command - Add and check off `Autofill title` and `Autofill description` parameters to change both - Add `Model to use` to control which model you prefer. If left empty, Tana will pick the one that returns the answer with best quality and consistency To run the command - Run the command on a URL node using the command line - Put this command node in the Commands section of a supertag you use for URLs. Press the button to run the command. ![](https://cdn.sanity.io/images/rfb95wph/production/9931ed5e0d411f4f2c9ca997a0b0ae55d7f3bb5d-1996x1123.png?w=3840&q=75&fit=clip&auto=format) Related docs: - [Command nodes](/docs/ai-command-nodes) . - How can I add supertags on things that I send from Tana Capture? Sep 27, 2024 Copy link While it isn't possible to tag things when you're sending things from Tana Capture, you can have Tana do some post-processing magic to convert written-out tags to real tags once they arrive the Inbox—no AI needed! 1. This method uses a simple [Tana Paste](/docs/tana-paste) command that you can run on the Inbox node, which targets all new children that have "#" in them. 2. Once you've created the command, you must add it to the `On child added` section of the Inbox node. You can find it by running the command `Debug node` on the title of the Inbox. ### [Here's Theo describing the command:](#heres-theo-describing-the-command) "All it does is paste the nodes that have # in them and that are not tagged, using Tana Paste. Say we add this through Tana Capture: `buy milk #todo` The command will paste that exact text back in with Tana Paste, where `${name}` is `buy milk #todo` and `${sys:content}` are any child notes that are present. Using Tana Paste, `#todo` will be added as a tag. Note: this creates a new node, so the created date will change, meaning you’ll lose the time that the node was captured through Tana Capture." ![](https://cdn.sanity.io/images/rfb95wph/production/61b1fd797a397d9c20f2799c73807ae060f693a2-1680x945.png?w=3840&q=75&fit=clip&auto=format) Related docs: - [Supertags](/docs/supertags) - [Tana capture](/docs/tana-capture) - [Tana paste](/docs/tana-paste) - [Command nodes](/docs/ai-command-nodes) # Semantic function # Semantic function Semantics give meaning to node relationships, and is a core concept that makes Tana powerful. Currently, semantic functions are an experimental feature in Tana. ## [Overview](#overview) **There are usually two distinct aspects of using semantic structure: creating the structure, and running searches using the structure.** **There are many different types of semantics, such as "is a", "has a", "related to", "part of" among others.** **Tana has many semantic functions already baked in.** Supertags express "is a" relationships, Fields express "has a" relationships with the node (and to be even more confusing, fields can also express is a/has a/state/description, expressed in human language which is not something Tana can innately understand), and the outline editor expresses a top-down hierarchy with more detail the deeper you go. **Tana offers "Part of" semantic functions as an advanced, experimental feature.** ## [Basics](#basics) ### [Part of](#part-of) - The semantic function _Part of_ arranges information in a strict tree hierarchy, for breakdown/drill-downs. Example: An engine is part of a car. Genesis is part of the Old Testament. Oslo is part of Norway. - The Part of structure is a "one-to-many" relationship. Things can only be part of one other thing, no more. Example: A task that can belong to two projects would not be a valid "parts of" relationship. Another example: one engine can have many parts, but the parts can only belong to one engine. - Part of relationships become useful when you want to look for things that are related to parts of this structure you've created. For this we use the field operator `COMPONENTS REC`, meaning that you're searching components recursively based on the field value. - Example: When the Tana team reviews feature ideas, we've mapped our features and their parts into a part of semantic structure so you can attach feature requests to very small parts of the product like "extend tag". When a team member in the future reviews feature ideas for "supertags", it will return all feature requests related to supertags and any part associated with it through part of, including extend tag and more. This allows us to do data entry at very granular scales, and retrieve data at any scale that fits the need/goal. - `COMPONENTS REC` is an expensive search so using it for large mappings may slow down your Tana experience. We plan to improve this in the future. ## [Documentation](#documentation) ### [To give a field semantic function](#to-give-a-field-semantic-function) - In the field configuration, ensure the field type is set to _Options from supertag_ - Go to Advanced and toggle on `Field has Semantic function` ### [Part of](#part-of) #### [How to connect two nodes with a Part of relationship](#how-to-connect-two-nodes-with-a-part-of-relationship) - Create a field (let's call it _is part of_) with semantic function toggled on and `Part of` selected - If you want to relate Engine to be a part of a Car, add the _is part of_ field to the Engine node, and put Car as the field value. #### [How to use information that is semantically connected with Part of](#how-to-use-information-that-is-semantically-connected-with-part-of) We will use an example to demonstrate how this works. **1️⃣ Use the semantically connected data as field values** - Let's say we are a mechanic and need to catalog every component that exists in a car so we can keep track of inventory. We have tagged every component with something like #car-part, and this supertag also has a field with semantic function Part of, where each component is mapped as part of a larger component. - We have an #inventory supertag with an instance field called Related car part that pulls options from #car-part, and another field called Stock status where you record inventory stocks. **2️⃣ Query your inventory using the semantically connected data** - You're at the engine parts store and need to know which engine parts your shop is low on. You look for all #inventory where >Stock status: Low, and >COMPONENTS REC: Engine. This retrieves inventory items with low stock, for any car component that is part of the Engine. #### [Examples of common part of relationships](#examples-of-common-part-of-relationships) Common traits is that the parts have undisputed singular relationships to their whole. - Budgets (company budget > department budget > project budget) - Organizational structure (corporation > division > department) - Scientific classification (plant kingdom > ericaceae family > blueberries) - Addresses (Canada > Ontario > Toronto) Copy link Rate article ## Related FAQs [See all](/faq) - I read all the docs on semantic functions Part of/COMPONENTS REC and still do not understand how it works. Do you have a video explanation? Dec 04, 2024 Copy link In the docs, there's a paragraph that goes like this: > Keep separate the fields used for the _definition_ versus _use of_ semantic information. One thing is establishing the semantic relationships with a field that has semantic functions turned on, another thing is using the semantic map as field values in another field. Community member Sabrina asked if someone could explain what this sentence meant. This led to these explainer videos being recorded as an alternative way to show how they work and what the sentence above is trying to say. ### [Part 1: Making the semantic connections](#part-1-making-the-semantic-connections) _Note: To see the controls to unmute, right-click on the video > Show All Controls_ ### [Part 2: Using the semantic connections](#part-2-using-the-semantic-connections) Related docs: - [Semantic function](/docs/semantic-function)