Add vault content - WORK folder, Tasks, Projects, Summaries, Templates

This commit is contained in:
AlexAI
2026-02-24 09:46:07 -06:00
parent bc3284ad69
commit c402fb1161
41 changed files with 4299 additions and 0 deletions

1
.obsidian/app.json vendored Normal file
View File

@@ -0,0 +1 @@
{}

1
.obsidian/appearance.json vendored Normal file
View File

@@ -0,0 +1 @@
{}

3
.obsidian/community-plugins.json vendored Normal file
View File

@@ -0,0 +1,3 @@
[
"obsidian-git"
]

33
.obsidian/core-plugins.json vendored Normal file
View File

@@ -0,0 +1,33 @@
{
"file-explorer": true,
"global-search": true,
"switcher": true,
"graph": true,
"backlink": true,
"canvas": true,
"outgoing-link": true,
"tag-pane": true,
"footnotes": false,
"properties": true,
"page-preview": true,
"daily-notes": true,
"templates": true,
"note-composer": true,
"command-palette": true,
"slash-command": false,
"editor-status": true,
"bookmarks": true,
"markdown-importer": false,
"zk-prefixer": false,
"random-note": false,
"outline": true,
"word-count": true,
"slides": false,
"audio-recorder": false,
"workspaces": false,
"file-recovery": true,
"publish": false,
"sync": true,
"bases": true,
"webviewer": false
}

22
.obsidian/graph.json vendored Normal file
View File

@@ -0,0 +1,22 @@
{
"collapse-filter": true,
"search": "",
"showTags": false,
"showAttachments": false,
"hideUnresolved": false,
"showOrphans": true,
"collapse-color-groups": true,
"colorGroups": [],
"collapse-display": true,
"showArrow": false,
"textFadeMultiplier": 0,
"nodeSizeMultiplier": 1,
"lineSizeMultiplier": 1,
"collapse-forces": true,
"centerStrength": 0.518713248970312,
"repelStrength": 10,
"linkStrength": 1,
"linkDistance": 250,
"scale": 1,
"close": true
}

452
.obsidian/plugins/obsidian-git/main.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,10 @@
{
"author": "Vinzent",
"authorUrl": "https://github.com/Vinzent03",
"id": "obsidian-git",
"name": "Git",
"description": "Integrate Git version control with automatic backup and other advanced features.",
"isDesktopOnly": false,
"fundingUrl": "https://ko-fi.com/vinzent",
"version": "2.37.1"
}

View File

@@ -0,0 +1,23 @@
#!/bin/sh
PROMPT="$1"
TEMP_FILE="$OBSIDIAN_GIT_CREDENTIALS_INPUT"
cleanup() {
rm -f "$TEMP_FILE" "$TEMP_FILE.response"
}
trap cleanup EXIT
echo "$PROMPT" > "$TEMP_FILE"
while [ ! -e "$TEMP_FILE.response" ]; do
if [ ! -e "$TEMP_FILE" ]; then
echo "Trigger file got removed: Abort" >&2
exit 1
fi
sleep 0.1
done
RESPONSE=$(cat "$TEMP_FILE.response")
echo "$RESPONSE"

View File

@@ -0,0 +1,705 @@
@keyframes loading {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.git-signs-gutter {
.cm-gutterElement {
/* Needed to align the sign properly for different line heigts. Such as
* when having a heading or list item.
*/
padding-top: 0 !important;
}
}
.workspace-leaf-content[data-type="git-view"] .button-border {
border: 2px solid var(--interactive-accent);
border-radius: var(--radius-s);
}
.workspace-leaf-content[data-type="git-view"] .view-content {
padding-left: 0;
padding-top: 0;
padding-right: 0;
}
.workspace-leaf-content[data-type="git-history-view"] .view-content {
padding-left: 0;
padding-top: 0;
padding-right: 0;
}
.loading {
overflow: hidden;
}
.loading > svg {
animation: 2s linear infinite loading;
transform-origin: 50% 50%;
display: inline-block;
}
.obsidian-git-center {
margin: auto;
text-align: center;
width: 50%;
}
.obsidian-git-textarea {
display: block;
margin-left: auto;
margin-right: auto;
}
.obsidian-git-disabled {
opacity: 0.5;
}
.obsidian-git-center-button {
display: block;
margin: 20px auto;
}
.tooltip.mod-left {
overflow-wrap: break-word;
}
.tooltip.mod-right {
overflow-wrap: break-word;
}
/* Limits the scrollbar to the view body */
.git-view {
display: flex;
flex-direction: column;
position: relative;
height: 100%;
}
.git-tools {
display: flex;
margin-left: auto;
}
.git-tools .type {
padding-left: var(--size-2-1);
display: flex;
align-items: center;
justify-content: center;
width: 11px;
}
.git-tools .type[data-type="M"] {
color: orange;
}
.git-tools .type[data-type="D"] {
color: red;
}
.git-tools .buttons {
display: flex;
}
.git-tools .buttons > * {
padding: 0 0;
height: auto;
}
.workspace-leaf-content[data-type="git-view"] .tree-item-self,
.workspace-leaf-content[data-type="git-history-view"] .tree-item-self {
align-items: center;
}
.workspace-leaf-content[data-type="git-view"]
.tree-item-self:hover
.clickable-icon,
.workspace-leaf-content[data-type="git-history-view"]
.tree-item-self:hover
.clickable-icon {
color: var(--icon-color-hover);
}
/* Highlight an item as active if it's diff is currently opened */
.is-active .git-tools .buttons > * {
color: var(--nav-item-color-active);
}
.git-author {
color: var(--text-accent);
}
.git-date {
color: var(--text-accent);
}
.git-ref {
color: var(--text-accent);
}
/* ====== diff2html ======
The following styles are adapted from the obsidian-version-history plugin by
@kometenstaub https://github.com/kometenstaub/obsidian-version-history-diff/blob/main/src/styles.scss
which itself is adapted from the diff2html library with the following original license:
https://github.com/rtfpessoa/diff2html/blob/master/LICENSE.md
Copyright 2014-2016 Rodrigo Fernandes https://rtfpessoa.github.io/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
.theme-dark,
.theme-light {
--git-delete-bg: #ff475040;
--git-delete-hl: #96050a75;
--git-insert-bg: #68d36840;
--git-insert-hl: #23c02350;
--git-change-bg: #ffd55840;
--git-selected: #3572b0;
--git-delete: #c33;
--git-insert: #399839;
--git-change: #d0b44c;
--git-move: #3572b0;
}
.git-diff {
.d2h-d-none {
display: none;
}
.d2h-wrapper {
text-align: left;
border-radius: 0.25em;
overflow: auto;
}
.d2h-file-header.d2h-file-header {
background-color: var(--background-secondary);
border-bottom: 1px solid var(--background-modifier-border);
font-family:
Source Sans Pro,
Helvetica Neue,
Helvetica,
Arial,
sans-serif;
height: 35px;
padding: 5px 10px;
}
.d2h-file-header,
.d2h-file-stats {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
}
.d2h-file-header {
display: none;
}
.d2h-file-stats {
font-size: 14px;
margin-left: auto;
}
.d2h-lines-added {
border: 1px solid var(--color-green);
border-radius: 5px 0 0 5px;
color: var(--color-green);
padding: 2px;
text-align: right;
vertical-align: middle;
}
.d2h-lines-deleted {
border: 1px solid var(--color-red);
border-radius: 0 5px 5px 0;
color: var(--color-red);
margin-left: 1px;
padding: 2px;
text-align: left;
vertical-align: middle;
}
.d2h-file-name-wrapper {
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
font-size: 15px;
width: 100%;
}
.d2h-file-name {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
color: var(--text-normal);
font-size: var(--h5-size);
}
.d2h-file-wrapper {
border: 1px solid var(--background-secondary-alt);
border-radius: 3px;
margin-bottom: 1em;
max-height: 100%;
}
.d2h-file-collapse {
-webkit-box-pack: end;
-ms-flex-pack: end;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
border: 1px solid var(--background-secondary-alt);
border-radius: 3px;
cursor: pointer;
display: none;
font-size: 12px;
justify-content: flex-end;
padding: 4px 8px;
}
.d2h-file-collapse.d2h-selected {
background-color: var(--git-selected);
}
.d2h-file-collapse-input {
margin: 0 4px 0 0;
}
.d2h-diff-table {
border-collapse: collapse;
font-family: var(--font-monospace);
font-size: var(--code-size);
width: 100%;
}
.d2h-files-diff {
width: 100%;
}
.d2h-file-diff {
/*
overflow-y: scroll;
*/
border-radius: 5px;
font-size: var(--font-text-size);
line-height: var(--line-height-normal);
}
.d2h-file-side-diff {
display: inline-block;
margin-bottom: -8px;
margin-right: -4px;
overflow-x: scroll;
overflow-y: hidden;
width: 50%;
}
.d2h-code-line {
padding-left: 6em;
padding-right: 1.5em;
}
.d2h-code-line,
.d2h-code-side-line {
display: inline-block;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
white-space: nowrap;
width: 100%;
}
.d2h-code-side-line {
/* needed to be changed */
padding-left: 0.5em;
padding-right: 0.5em;
}
.d2h-code-line-ctn {
word-wrap: normal;
background: none;
display: inline-block;
padding: 0;
-webkit-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
vertical-align: middle;
width: 100%;
/* only works for line-by-line */
white-space: pre-wrap;
}
.d2h-code-line del,
.d2h-code-side-line del {
background-color: var(--git-delete-hl);
color: var(--text-normal);
}
.d2h-code-line del,
.d2h-code-line ins,
.d2h-code-side-line del,
.d2h-code-side-line ins {
border-radius: 0.2em;
display: inline-block;
margin-top: -1px;
text-decoration: none;
vertical-align: middle;
}
.d2h-code-line ins,
.d2h-code-side-line ins {
background-color: var(--git-insert-hl);
text-align: left;
}
.d2h-code-line-prefix {
word-wrap: normal;
background: none;
display: inline;
padding: 0;
white-space: pre;
}
.line-num1 {
float: left;
}
.line-num1,
.line-num2 {
-webkit-box-sizing: border-box;
box-sizing: border-box;
overflow: hidden;
/*
padding: 0 0.5em;
*/
text-overflow: ellipsis;
width: 2.5em;
padding-left: 0;
}
.line-num2 {
float: right;
}
.d2h-code-linenumber {
background-color: var(--background-primary);
border: solid var(--background-modifier-border);
border-width: 0 1px;
-webkit-box-sizing: border-box;
box-sizing: border-box;
color: var(--text-faint);
cursor: pointer;
display: inline-block;
position: absolute;
text-align: right;
width: 5.5em;
}
.d2h-code-linenumber:after {
content: "\200b";
}
.d2h-code-side-linenumber {
background-color: var(--background-primary);
border: solid var(--background-modifier-border);
border-width: 0 1px;
-webkit-box-sizing: border-box;
box-sizing: border-box;
color: var(--text-faint);
cursor: pointer;
overflow: hidden;
padding: 0 0.5em;
text-align: right;
text-overflow: ellipsis;
width: 4em;
/* needed to be changed */
display: table-cell;
position: relative;
}
.d2h-code-side-linenumber:after {
content: "\200b";
}
.d2h-code-side-emptyplaceholder,
.d2h-emptyplaceholder {
background-color: var(--background-primary);
border-color: var(--background-modifier-border);
}
.d2h-code-line-prefix,
.d2h-code-linenumber,
.d2h-code-side-linenumber,
.d2h-emptyplaceholder {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.d2h-code-linenumber,
.d2h-code-side-linenumber {
direction: rtl;
}
.d2h-del {
background-color: var(--git-delete-bg);
border-color: var(--git-delete-hl);
}
.d2h-ins {
background-color: var(--git-insert-bg);
border-color: var(--git-insert-hl);
}
.d2h-info {
background-color: var(--background-primary);
border-color: var(--background-modifier-border);
color: var(--text-faint);
}
.d2h-del,
.d2h-ins,
.d2h-file-diff .d2h-change {
color: var(--text-normal);
}
.d2h-file-diff .d2h-del.d2h-change {
background-color: var(--git-change-bg);
}
.d2h-file-diff .d2h-ins.d2h-change {
background-color: var(--git-insert-bg);
}
.d2h-file-list-wrapper {
a {
text-decoration: none;
cursor: default;
-webkit-user-drag: none;
}
svg {
display: none;
}
}
.d2h-file-list-header {
text-align: left;
}
.d2h-file-list-title {
display: none;
}
.d2h-file-list-line {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
text-align: left;
}
.d2h-file-list {
}
.d2h-file-list > li {
border-bottom: 1px solid var(--background-modifier-border);
margin: 0;
padding: 5px 10px;
}
.d2h-file-list > li:last-child {
border-bottom: none;
}
.d2h-file-switch {
cursor: pointer;
display: none;
font-size: 10px;
}
.d2h-icon {
fill: currentColor;
margin-right: 10px;
vertical-align: middle;
}
.d2h-deleted {
color: var(--git-delete);
}
.d2h-added {
color: var(--git-insert);
}
.d2h-changed {
color: var(--git-change);
}
.d2h-moved {
color: var(--git-move);
}
.d2h-tag {
background-color: var(--background-secondary);
display: -webkit-box;
display: -ms-flexbox;
display: flex;
font-size: 10px;
margin-left: 5px;
padding: 0 2px;
}
.d2h-deleted-tag {
border: 1px solid var(--git-delete);
}
.d2h-added-tag {
border: 1px solid var(--git-insert);
}
.d2h-changed-tag {
border: 1px solid var(--git-change);
}
.d2h-moved-tag {
border: 1px solid var(--git-move);
}
/* needed for line-by-line*/
.d2h-diff-tbody {
position: relative;
}
}
/* ====================== Line Authoring Information ====================== */
.cm-gutterElement.obs-git-blame-gutter {
/* Add background color to spacing inbetween and around the gutter for better aesthetics */
border-width: 0px 2px 0.2px 2px;
border-style: solid;
border-color: var(--background-secondary);
background-color: var(--background-secondary);
}
.cm-gutterElement.obs-git-blame-gutter > div,
.line-author-settings-preview {
/* delegate text color to settings */
color: var(--obs-git-gutter-text);
font-family: monospace;
height: 100%; /* ensure, that age-based background color occupies entire parent */
text-align: right;
padding: 0px 6px 0px 6px;
white-space: pre; /* Keep spaces and do not collapse them. */
}
@media (max-width: 800px) {
/* hide git blame gutter not to superpose text */
.cm-gutterElement.obs-git-blame-gutter {
display: none;
}
}
.git-unified-diff-view,
.git-split-diff-view .cm-deletedLine .cm-changedText {
background-color: #ee443330;
}
.git-unified-diff-view,
.git-split-diff-view .cm-insertedLine .cm-changedText {
background-color: #22bb2230;
}
.git-obscure-prompt[git-is-obscured="true"] #git-show-password:after {
-webkit-mask-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-eye"><path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"></path><circle cx="12" cy="12" r="3"></circle></svg>');
}
.git-obscure-prompt[git-is-obscured="false"] #git-show-password:after {
-webkit-mask-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-eye-off"><path d="M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49"></path><path d="M14.084 14.158a3 3 0 0 1-4.242-4.242"></path><path d="M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143"></path><path d="m2 2 20 20"></path></svg>');
}
/* Override styling of Codemirror merge view "collapsed lines" indicator */
.git-split-diff-view .ͼ2 .cm-collapsedLines {
background: var(--interactive-normal);
border-radius: var(--radius-m);
color: var(--text-accent);
font-size: var(--font-small);
padding: var(--size-4-1) var(--size-4-1);
}
.git-split-diff-view .ͼ2 .cm-collapsedLines:hover {
background: var(--interactive-hover);
color: var(--text-accent-hover);
}
.git-signs-gutter {
.cm-gutterElement {
display: grid;
}
}
.git-gutter-marker:hover {
border-radius: 2px;
}
.git-gutter-marker.git-add {
background-color: var(--color-green);
justify-self: center;
height: inherit;
width: 0.2rem;
}
.git-gutter-marker.git-change {
background-color: var(--color-yellow);
justify-self: center;
height: inherit;
width: 0.2rem;
}
.git-gutter-marker.git-changedelete {
color: var(--color-yellow);
font-weight: var(--font-bold);
font-size: 1rem;
justify-self: center;
height: inherit;
}
.git-gutter-marker.git-delete {
background-color: var(--color-red);
height: 0.2rem;
width: 0.8rem;
align-self: end;
}
.git-gutter-marker.git-topdelete {
background-color: var(--color-red);
height: 0.2rem;
width: 0.8rem;
align-self: start;
}
div:hover > .git-gutter-marker.git-change {
width: 0.6rem;
}
div:hover > .git-gutter-marker.git-add {
width: 0.6rem;
}
div:hover > .git-gutter-marker.git-delete {
height: 0.6rem;
}
div:hover > .git-gutter-marker.git-topdelete {
height: 0.6rem;
}
div:hover > .git-gutter-marker.git-changedelete {
font-weight: var(--font-bold);
}
.git-gutter-marker.staged {
opacity: 0.5;
}
.git-diff {
.cm-merge-revert {
width: 4em;
}
/* Ensure that merge revert markers are positioned correctly */
.cm-merge-revert > * {
position: absolute;
background-color: var(--background-secondary);
display: flex;
}
}
/* Prevent shifting of the editor when git signs gutter is the only gutter present */
.cm-gutters.cm-gutters-before:has(> .git-signs-gutter:only-child) {
margin-inline-end: 0;
.git-signs-gutter {
margin-inline-start: -1rem;
}
}
.git-changes-status-bar-colored {
.git-add {
color: var(--color-green);
}
.git-change {
color: var(--color-yellow);
}
.git-delete {
color: var(--color-red);
}
}
.git-changes-status-bar .git-add {
margin-right: 0.3em;
}
.git-changes-status-bar .git-change {
margin-right: 0.3em;
}

View File

@@ -0,0 +1,140 @@
---
title: Home Assistant Automations
category: Home Assistant
status: active
total_automations: 41
active_count: 24
disabled_count: 10
unavailable_count: 7
date_generated: 2026-02-23
tags:
- home-assistant
- HA
- reference
---
# Home Assistant Automations
**Generated:** 2026-02-23 18:05
**Total:** 41 automations
**Active:** 24 | **Disabled:** 10 | **Unavailable:** 7
---
## Active Automations (On)
- **Pantry On/Off**
- La4st Changed: 2026-02-20T16:03:33.636268+00:00
- **Sink Light On/Off**
- Last Changed: 2026-02-20T16:03:33.636439+00:00
- **Dining Off Auto**
- Last Changed: 2026-02-20T16:03:33.636664+00:00
- **Master Bath Heater**
- Last Changed: 2026-02-20T16:03:33.636771+00:00
- **Office closet light**
- Last Changed: 2026-02-20T16:03:33.637065+00:00
- **Master Closet Lights**
- Last Changed: 2026-02-20T16:03:33.637169+00:00
- **Master Hallway Lights**
- Last Changed: 2026-02-20T16:03:33.637272+00:00
- **Master Hallway Lights Dim**
- Last Changed: 2026-02-20T16:03:33.637375+00:00
- **Master Lamp On/Off**
- Last Changed: 2026-02-20T16:03:33.637727+00:00
- **TV Backlight Off**
- Last Changed: 2026-02-20T16:03:33.637825+00:00
- **Master Bath Vent On Humidity Heater Help**
- Last Changed: 2026-02-20T16:03:33.638119+00:00
- **Garage Entrance Light**
- Last Changed: 2026-02-20T16:03:33.638221+00:00
- **Master Pooper Light**
- Last Changed: 2026-02-20T16:03:33.638317+00:00
- **Bay Windows**
- Last Changed: 2026-02-20T16:03:33.638424+00:00
- **Counter Top LED**
- Last Changed: 2026-02-20T16:03:33.638525+00:00
- **Master Bath Strip**
- Last Changed: 2026-02-20T16:03:33.638623+00:00
- **Master Bath Heater Button**
- Last Changed: 2026-02-20T16:03:33.638727+00:00
- **Master Shower Vent Switch**
- Last Changed: 2026-02-20T16:03:33.638830+00:00
- **Living Room Bedtime**
- Last Changed: 2026-02-20T16:03:33.638932+00:00
- **Living Room Lamps Presence Activation**
- Last Changed: 2026-02-20T16:03:33.639029+00:00
- **Cameras to LR Roku**
- Last Changed: 2026-02-20T16:03:33.639954+00:00
- **Kathy Low Sugar**
- Last Changed: 2026-02-20T16:03:33.640163+00:00
- **Living Room Frigate Notify**
- Last Changed: 2026-02-20T16:03:33.640256+00:00
- **Air purifier always on**
- Last Changed: 2026-02-20T16:03:33.640350+00:00
---
## Disabled Automations (Off)
- **TV Off**
- **Alexa Living Room Check**
- **Master Shower Vent On Humidity**
- **Reminder**
- **AI Camera Event Summary**
- **AI Camera Events Kitchen**
- **AI Camera Events Living Room**
- **AI Camera Event Front Yard**
- **AI Camera Events Back Yard**
- **Notification of camera events**
---
## Unavailable Automations (Broken)
These automations may have missing entities or configuration issues.
- **Drying Complete Notification**
- **Pantry Reminder**
- **Frigate person count Main Ceiling on/off**
- **Driveway Occupancy**
- **SMARTi Update Power Measurement Device List**
- **SMARTi Restore Power Settings**
- **SMARTi Save Power Settings Before Shutdown**
---
## Automation Categories
### Lighting
- Sink Light On/Off
- Office closet light
- Master Closet Lights
- Master Hallway Lights
- Master Hallway Lights Dim
- Master Lamp On/Off
- TV Backlight Off
- Garage Entrance Light
- Master Pooper Light
- Bay Windows
- Counter Top LED
- Master Bath Strip
- Living Room Lamps Presence Activation
### Climate / Ventilation
- Master Bath Heater
- Master Bath Vent On Humidity Heater Help
- Master Bath Heater Button
- Master Shower Vent Switch
- Air purifier always on
### Security / Cameras
- Cameras to LR Roku
- Living Room Frigate Notify
### Notifications / Reminders
- Kathy Low Sugar
- Living Room Frigate Notify
---
*Last Updated: 2026-02-23 18:05*

View File

@@ -0,0 +1,209 @@
---
title: Dataview Query Examples
category: Reference
date: 2026-02-23
tags: [dataview, queries, obsidian, examples]
---
# Dataview Query Examples
**Plugin:** [Obsidian Dataview](https://github.com/blacksmithgu/obsidian-dataview)
**Your Vault Location:** `C:\Users\admin\Documents\Corey`
---
## 📊 Summary Statistics
### All Files in Vault
```dataview
TABLE file.mtime AS "Modified", file.size AS "Size"
FROM ""
SORT file.mtime DESC
LIMIT 20
```
### Files by Category
```dataview
TABLE rows.file.name
FROM ""
WHERE category
GROUP BY category
```
---
## 🏠 Home Assistant Queries
### Show Home Assistant Notes
```dataview
TABLE status, total_automations AS "Total", active_count AS "Active", unavailable_count AS "Broken"
FROM "Home Assistant"
SORT file.name
```
### Recent HA Updates
```dataview
LIST
FROM "Home Assistant"
WHERE date_generated
SORT date_generated DESC
```
---
## 📁 Projects Dashboard
### Active Projects Only
```dataview
LIST
FROM "Projects"
WHERE contains(file.content, "Status: Active")
SORT file.name
```
### All Projects with Status
```dataview
TABLE status, type, last_updated
FROM "Projects"
WHERE status
SORT status DESC, file.name
```
---
## 📝 Research Summaries
### Recent Summaries
```dataview
TABLE date, source_url
FROM "Summaries"
WHERE date
SORT date DESC
LIMIT 10
```
### Summaries by Tag
```dataview
TABLE date, source_url
FROM #security OR #ai OR #infrastructure
WHERE date
SORT date DESC
```
### By Source Type
```dataview
TABLE date, type, tags
FROM "Summaries"
WHERE type
SORT type, date DESC
```
---
## 🤖 OpenClaw Configuration
### OpenClaw Notes
```dataview
TABLE category, status, date
FROM "OpenClaw"
SORT date DESC
```
---
## 📅 Daily Notes (if you create them)
### Daily Notes Calendar
```dataview
CALENDAR date
FROM "memory"
WHERE date
```
---
## 🔍 Search Examples
### Find Notes Without Tags
```dataview
LIST file.name
FROM ""
WHERE !file.tags
SORT file.name
```
### Recently Modified Files
```dataview
TABLE file.mtime AS "Modified"
FROM ""
WHERE file.mtime > date(today) - dur(7 days)
SORT file.mtime DESC
```
### Notes by Category
```dataview
TABLE category, status, date
FROM ""
WHERE category
SORT category, file.name
```
---
## 🛠️ Custom Queries
### Broken HA Automations (needs attention)
```dataview
LIST
FROM "Home Assistant"
WHERE unavailable_count > 0
```
### Active Configurations
```dataview
TABLE category, date, config_file
FROM ""
WHERE status = "active"
SORT category
```
### Research by Date Range
```dataview
TABLE date, type, source
FROM "Summaries"
WHERE date > date(2026-02-01) AND date < date(2026-03-01)
SORT date DESC
```
---
## 🎯 Quick Reference
| Query Type | Syntax |
|------------|--------|
| **List** | `LIST FROM "folder" WHERE condition` |
| **Table** | `TABLE col1, col2 FROM "folder"` |
| **Sort** | `SORT column ASC/DESC` |
| **Limit** | `LIMIT number` |
| **Where** | `WHERE field = "value"` |
| **Group** | `GROUP BY field` |
| **Tags** | `FROM #tag1 OR #tag2` |
---
## 📝 Adding Frontmatter to New Notes
Use this template:
```yaml
---
title: Your Note Title
category: Category Name
status: active/inactive/completed
date: YYYY-MM-DD
tags: [tag1, tag2, tag3]
---
```
---
*Create your own queries by copying these and modifying!*

View File

@@ -0,0 +1,93 @@
---
title: Discord / OpenClaw Configuration
category: OpenClaw
status: active
date: 2026-02-23
config_file: ~/.openclaw/config/config.json
tags: [openclaw, discord, config, slash-commands]
---
# Discord / OpenClaw Configuration
## Date: 2026-02-23
## Working Config (Slash Commands + Agent Responses)
**File Location:** `~/.openclaw/config/config.json`
### Critical Setup
Both layers required for full functionality:
```json
"channels": {
"discord": {
"enabled": true,
"token": "YOUR_TOKEN",
"groupPolicy": "open",
"guilds": {
"1465924568119251006": {
"users": [
"458667380332036117",
"1465926559134257294"
],
"channels": {
"1466074219829006599": {
"allow": true
}
},
"requireMention": false
}
}
}
}
```
### Why Both Layers?
| Layer | Location | Purpose | Without It |
|-------|----------|---------|------------|
| `users` | Guild level | Slash commands working | `/compact`, `/status` don't register |
| `channels.allow` | Channel level | Agent can respond | Agent stops responding to messages |
### Bug/Design Issue
The `users` whitelist prevents agent responses — it's a bug where:
1. `users` enables slash commands ✅
2. But also breaks message processing ❌
3. `channels.allow` is the workaround to re-enable responses
**Both required** until OpenClaw fixes the bug.
### Channel IDs
| Name | ID | Purpose |
|------|-----|---------|
| #home-assistant | 1466074219829006599 | HA, room-assistant |
| #coding | 1468627455656067074 | Code, git, projects |
| #projects | 1468257895152881796 | Non-coding experiments |
| #alerts | 1473701182076752135 | System alerts |
### User IDs
| User | ID |
|------|-----|
| Corey | 458667380332036117 |
| OpenClaw Bot | 1465926559134257294 |
## Slash Commands
| Command | Purpose |
|---------|---------|
| `/compact` | Compact session context |
| `/status` | Show session status |
## Related OpenClaw Files
- [[Memory System]] — Complete memory architecture documentation
- [[Projects/Memory System/Memory System Architecture]] — Detailed data flow diagrams
- [[Dataview Query Examples]] — Query memory system with Dataview
---
*Updated: 2026-02-23*

91
OpenClaw/MEMORY Index.md Normal file
View File

@@ -0,0 +1,91 @@
# MEMORY.md — Corey's Agent Index
*Lightweight reference table (~1.5k tokens). Drill down to detail files as needed.*
---
## About Corey
- **Person:** See `memory/people/corey.md`
- **Trigger:** "corey", "user", "timezone", "preferences"
- **Quick Ref:** America/Chicago, 70582 LA, °F/MPH, chill vibe
---
## Active Projects (Always Context)
| Project | Status | Detail File | Trigger Words |
|---------|--------|-------------|---------------|
| **Home Assistant** | 🔄 In Progress | `memory/projects/home-assistant.md` | "home assistant", "HA", "mqtt", "sensor" |
| **Mission Control Python** | ✅ Live | `memory/projects/mission-control-python.md` | "dashboard", "mission control", "python", "flask" |
| **Proton Mail Bridge** | ✅ Functional | `memory/projects/proton-mail-bridge.md` | "proton", "email", "imap", "smtp", "mail" |
| **Coding Workflow** | ✅ Active | `memory/projects/coding-workflow.md` | "coding", "git", "repo", "workflow" |
| **Memory System** | 🔄 Restructure | `memory/projects/memory-system.md` | "memory", "database", "backup", "sqlite" |
| **Discord Voice Bot** | ✅ Complete | `memory/projects/discord-voice-bot.md` | "voice bot", "glados", "TTS", "STT" |
## Platform Decisions (Sticky)
| Decision | Status | Date | Notes |
|----------|--------|------|-------|
| **Primary Chat** | ✅ Discord | 2026-02-23 | Staying with Discord (rolled back ID reqs). Zulip/Rocket.Chat experiments cancelled. |
| **Voice Bot** | ✅ GLaDOS | — | Operational in #coding voice channel |
## Active Workflows (Auto-Execute)
| Trigger | Action | Output | Notes |
|---------|--------|--------|-------|
| `/summarize [URL]` | Fetch → Summarize → Save | `Summaries/[Title].md` | Works in ANY channel. Auto-saves to Obsidian. Confirm with file path. |
---
## Quick Reference
### Discord Channels
- **#home-assistant:** 1466074219829006599 (HA, room-assistant)
- **#coding:** 1468627455656067074 (code, git, projects)
- **#projects:** 1468257895152881796 (experiments, non-coding)
- **#alerts:** 1473701182076752135 (system alerts)
### Critical Info
- **HA URL:** http://192.168.0.39:8123
- **MQTT:** 192.168.0.39:1883 (corey/41945549)
- **Phone MAC:** b0:c2:c7:07:28:b5
- **News Brief:** Strict NO F1 spoilers policy
---
## Decisions Log
- **Current Month:** `memory/decisions/2026-02.md`
- **Trigger:** "decided", "decision", "why did we"
---
## Drill-Down Rules
**MUST drill when mentioned:**
- Any active project above → Read full detail file
- "Decisions" or "why" → Read monthly decision log
- Person questions → Read `memory/people/corey.md`
**MAY drill when relevant:**
- Past projects → Check `memory/projects/`
- Daily context → Check `memory/YYYY-MM-DD.md`
- Learnings → Check `.learnings/`
**Hard cap:** Max 5 drill-downs per session start
---
## Integration Points
| System | Location | Use When |
|--------|----------|----------|
| **Daily Notes** | `memory/2026-*.md` | "What happened on [date]?" |
| **SQLite DB** | `~/.openclaw/memory.db` | "What tasks are pending?" (structured query) |
| **Workspace Context** | `workspace-context.md` | Current conversation, in-progress |
| **Supermemory** | Cloud backup | Disaster recovery |
---
*Last Updated: 2026-02-20*
*Version: Hierarchical Index v1.1*
*Next Review: When projects change status*

188
OpenClaw/Memory System.md Normal file
View File

@@ -0,0 +1,188 @@
---
title: OpenClaw Memory System
category: OpenClaw
type: Architecture/Documentation
status: active
date: 2026-02-16
last_updated: 2026-02-23
source_file: memory_system_architecture.md
tags: [openclaw, memory, architecture, system-design, data-flow, sqlite]
---
# OpenClaw Memory System
*Source of truth for how information flows and persists*
**Original File:** `memory_system_architecture.md`
**Created:** Evening of major OpenClaw upgrade (2026-02-16)
---
## Overview
```
┌─────────────────────────────────────────────────────────────────────────────┐
│ INFORMATION FLOW │
└─────────────────────────────────────────────────────────────────────────────┘
User Conversation
┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐
│ ME (Main Agent) │────▶│ Memory Worker │────▶│ SQLite Database │
│ (Real-time) │ │ (Daily 3 AM) │ │ (Structured) │
└─────────────────────┘ └─────────────────────┘ └─────────────────────┘
│ │ │
│ │ │
▼ ▼ ▼
┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐
│ Daily Notes │ │ Query Interface │ │ Stats/Search │
│ (memory/*.md) │◄────│ (On Demand) │◄────│ (SQL/FTS) │
└─────────────────────┘ └─────────────────────┘ └─────────────────────┘
┌─────────────────────┐
│ MEMORY.md │
│ (Curated) │
└─────────────────────┘
┌─────────────────────┐
│ Supermemory.ai │
│ (Cloud Backup) │
└─────────────────────┘
```
---
## Storage Layers (6 Total)
| Layer | Speed | Persistence | Purpose |
|-------|-------|-------------|---------|
| 1. Session RAM | ⚡ Fastest | Minutes-hours | Working conversation context |
| 2. Workspace Context | 📝 Fast | ~24 hours | Session bridge between channels |
| 3. Daily Notes | 📄 Medium | 30-90 days | Raw daily activity |
| 4. MEMORY.md | 🧠 Slow | Permanent | Curated important info |
| 5. SQLite DB | 📊 Query | Permanent | Structured data with FTS |
| 6. Supermemory.ai | 🌐 Cloud | Permanent | Full cloud backup |
---
## Key Components
### 1. Session RAM
- **What:** Current conversation context
- **Writes:** Real-time
- **Survives:** ❌ Crash ❌ Restart
- **Size:** ~100K-250K tokens
- **Risk:** Lost on compaction
### 2. Daily Notes (memory/*.md)
- **What:** Raw daily activity, decisions, errors
- **Writes:** Pre-compaction flush
- **Survives:** ✅ Everything
- **Retention:** 30-90 days
### 3. MEMORY.md
- **What:** Curated long-term memory
- **Writes:** Manual review
- **Survives:** ✅ Everything
- **Retention:** Permanent
### 4. SQLite Database (~/.openclaw/memory.db)
- **What:** Structured tasks, decisions, facts
- **Writes:** Daily 3 AM (Memory Worker cron)
- **Schema:**
```sql
memory_cells: id, scene, cell_type, salience, content, source_file, created_at
scenes: scene, summary, item_count, updated_at
memory_fts: full-text search index
```
- **Survives:** ✅ File-based
- **Retention:** Permanent
### 5. Supermemory.ai
- **What:** Full cloud backup
- **Writes:** Daily 2 AM (Python script)
- **Survives:** ✅ Disk failure
- **Retention:** Cloud dependent
### 6. Workspace Context (workspace-context.md)
- **What:** Current conversation bridge
- **Writes:** Continuous
- **Survives:** ✅ Channel switch
- **Cleared:** Nightly (~11 PM)
---
## Cron Jobs (Memory System)
| Job | Time | Purpose |
|-----|------|---------|
| Supermemory Backup | 2:00 AM | Cloud backup of all memory files |
| Cron Cleanup | 3:00 AM | Remove finished one-shot jobs |
| Memory Worker | 3:04 AM | Extract to SQLite database |
---
## Key Principles
1. **Text > Brain** — Files persist, sessions don't
2. **Daily notes = raw, MEMORY.md = curated** — Filter noise from signal
3. **Worker = automated structuring** — Don't manually organize everything
4. **Hybrid = best of both** — Human-readable + machine-queryable
5. **Multiple backups** — Local + cloud + structured
---
## Access Patterns
### Main Agent Reads:
- `MEMORY.md` — Every session (core identity, prefs)
- `USER.md` — Every session (who Corey is)
- `SOUL.md` — Every session (how to behave)
- `workspace-context.md` — Every session (current state)
- `memory/*.md` — During heartbeats (recent context)
- `SQLite DB` — On demand (structured queries)
### Memory Worker Reads:
- `IDENTITY.md` — Daily 3 AM
- `SOUL.md` — Daily 3 AM
- `HEARTBEAT.md` — Daily 3 AM (instructions)
- `memory/YYYY-MM-DD.md` — Daily 3 AM (content to extract)
- Writes to SQLite DB
---
## Failure Recovery
| Scenario | Survives | Lost | Recovery |
|----------|----------|------|----------|
| Session Crash | Files | Session RAM | Read files, reconstruct |
| Gateway Restart | All files | Session/cron state | Restart, verify jobs |
| Disk Failure | Supermemory | Local files + DB | Restore from cloud |
---
## File Locations
| File | Location |
|------|----------|
| MEMORY.md | `~/.openclaw/workspace/MEMORY.md` |
| Daily Notes | `~/.openclaw/workspace/memory/YYYY-MM-DD.md` |
| SQLite DB | `~/.openclaw/memory.db` |
| Workspace Context | `~/.openclaw/workspace/workspace-context.md` |
| Architecture Doc | `Projects/Memory System/Memory System Architecture.md` (Obsidian) |
---
## Related
- [[Discord Config]] — Discord/OpenClaw configuration
- [[Projects/Daily Notes/YYYY-MM-DD]] — Daily notes structure
- [[Dataview Query Examples]] — Query the SQLite database
---
*This is the source of truth for Corey's OpenClaw memory system.*
*Created: 2026-02-16 | Last Updated: 2026-02-23*

View File

@@ -0,0 +1,10 @@
# OpenClaw Sync - 2026-02-24
## Files Synced
- Tools Reference.md (from TOOLS.md)
- MEMORY Index.md (from MEMORY.md)
## Notes
Last updated: 06:01
---

View File

@@ -0,0 +1,98 @@
# System Overview
## Core Services
| Service | URL | Status | Purpose |
|---------|-----|--------|---------|
| Mission Control (Python) | http://localhost:5050 | ✅ Live | Flask dashboard |
| Mission Control (Next.js) | http://localhost:3000 | ✅ Complete | React dashboard (archived) |
| Home Assistant | http://192.168.0.39:8123 | 🔄 Active | Entity cleanup |
| OpenClaw Gateway | localhost:8787 | ✅ Active | Multi-channel bot |
| Discord Bot | Discord | ✅ Active | Chat + voice |
---
## Pi Infrastructure
| Device | IP | Purpose | Status |
|--------|-----|---------|--------|
| livingroom-pi | 192.168.0.95 | Room-assistant presence | ✅ Working |
| HA Server | 192.168.0.39 | Home Assistant core | ✅ Running |
| VPN Box | — | Downloads (qbit/sonarr/radarr) | ✅ Active |
---
## Automation (Cron Jobs)
| Job | Schedule | Last Status | Purpose |
|-----|----------|-------------|---------|
| Supermemory Backup | 2:00 AM | ✅ | Cloud backup |
| Daily Cron Cleanup | 3:00 AM | ✅ | Job maintenance |
| Memory Worker | 3:00 AM | ✅ | Extract to SQLite |
| News Brief | 8:00 AM | ✅ | Morning news |
| Job Verifier | 9:00 AM | ✅ | Check overnight jobs |
| Shipping Tracker | 6 AM/12 PM/6 PM | ✅ | Package alerts |
---
## Discord Channels
| Channel | ID | Purpose | Model |
|---------|-----|---------|-------|
| #home-assistant | 1466074219829006599 | HA, room-assistant | kimi |
| #coding | 1468627455656067074 | Code, projects | qwen3-coder |
| #projects | 1468257895152881796 | Experiments | kimi |
| #alerts | 1473701182076752135 | System alerts | kimi |
| #news-brief | 1471156195233628394 | Morning news | kimi |
| #calendar | 1474636036905631867 | Scheduling | kimi |
---
## Key Directories
### OpenClaw Workspace
```
~/.openclaw/workspace/
├── memory/ # Memory files + SQLite
│ ├── projects/ # Project detail files
│ ├── people/ # User profiles
│ └── decisions/ # Decision log
├── skills/ # Installed skills
├── tools/ # Custom scripts
└── scripts/ # Automation scripts
```
### Mission Control
```
C:\web\htdocs\
├── mission-control-py/ # Flask dashboard (live)
├── mission-control/ # Next.js dashboard (complete)
└── dashboard/ # Legacy PHP dashboard
```
### Other Important Paths
- **MySQL:** C:\web\mysql\ (MariaDB 10.4.32)
- **Frigate:** P:\frigate\ (NVR with 4 cameras)
- **Nextcloud:** http://aiagents:8081 (removed from startup - thermal issues)
- **HA:** 192.168.0.39:8123
---
## Projects Status Overview
### Active
- Home Assistant — Entity cleanup
- Mission Control Python — Dashboard live on :5050
- Coding Workflow — Git/controls-web
- Memory System — Daily extractions working
### Completed
- Discord Voice Bot — Always available in #coding
- Proton Mail Bridge — Tested and functional
- Mission Control Next.js — Archived
- Supermemory backup — Daily automation
- Room-Assistant — Presence tracking working
---
*Last Updated: 2026-02-22*

196
OpenClaw/Tools Reference.md Normal file
View File

@@ -0,0 +1,196 @@
# TOOLS.md - Local Notes
---
## Credentials Location
All credentials stored in `.credentials/` (gitignored):
- `example-api.txt` — Example API key
---
## [Tool Name]
**Status:** ✅ Working | ⚠️ Issues | ❌ Not configured
**Configuration:**
```
Key details about how this tool is configured
```
**Gotchas:**
- Things that don't work as expected
- Workarounds discovered
**Common Operations:**
```bash
# Example command
tool-name --common-flag
```
---
Skills define *how* tools work. This file is for *your* specifics — the stuff that's unique to your setup.
## What Goes Here
Things like:
- Camera names and locations
- SSH hosts and aliases
- Preferred voices for TTS
- Speaker/room names
- Device nicknames
- Anything environment-specific
- Tool configurations and settings
- Credential locations (not the credentials themselves!)
- Gotchas and workarounds discovered
- Common commands and patterns
- Integration notes
## Examples
```markdown
### Cameras
- living-room → Main area, 180° wide angle
- front-door → Entrance, motion-triggered
### SSH
- home-server → 192.168.1.100, user: admin
### TTS
- Preferred voice: "Nova" (warm, slightly British)
- Default speaker: Kitchen HomePod
```
## Home Assistant
```markdown
### Home Assistant
- URL: http://192.168.0.39:8123
- Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJmYzg2NzQwNGNlMzY0NmM5YjA0MTQ4YWFjYjY3OGM4OSIsImlhdCI6MTc3MTE3MzcwNSwiZXhwIjoyMDg2NTMzNzA1fQ.IdlfMvFeiEwv2GSH7hRnG_Au48KRYbfVF0Fa7g5eMpc
```
## Why Separate?
Skills are shared. Your setup is yours. Keeping them apart means you can update skills without losing your notes, and share skills without leaking your infrastructure.
## Workspace Organization
- **Root** (`~/.openclaw/workspace/`) → Core config files and documentation
- **`scripts/`** → One-off helper scripts (PowerShell/Shell)
- **`temp/`** → Temporary files, downloads, transcripts
---
## Obsidian / NotesMD
**Status:** ✅ Configured
**CLI Location:** `C:\tools\notesmd-cli.exe` (or in PATH as `notesmd-cli.exe`)
**Default Vault:** `C:\Users\admin\Documents\Corey` (already set via `notesmd-cli set-default`)
**Common Commands:**
```powershell
# Check default vault
notesmd-cli print-default --path-only
# Search notes
notesmd-cli search "query"
# Search content inside notes
notesmd-cli search-content "query"
# Create new note
notesmd-cli create "Folder/New note" --content "..." --open
# Move/rename (updates wikilinks)
notesmd-cli move "old/path" "new/path"
```
**Gotchas:**
- Vault path uses regular Windows paths, NOT WSL paths
- Default vault must be set before commands work without `--vault` flag
- Notes survive session chops (written to disk immediately)
---
## Discord / OpenClaw Config
**Status:** ✅ Working
**File:** `~/.openclaw/config/config.json`
**Working Channel Permissions Setup (for Slash Commands + Agent Responses):**
```json
"channels": {
"discord": {
"enabled": true,
"token": "YOUR_TOKEN",
"groupPolicy": "open",
"guilds": {
"1465924568119251006": {
"users": [
"458667380332036117",
"1465926559134257294"
],
"channels": {
"1466074219829006599": { "allow": true },
"1468627455656067074": { "allow": true },
"1468257895152881796": { "allow": true },
"1471202415385509981": { "allow": true }
},
"requireMention": false
}
}
}
}
```
**Critical:** Both layers needed:
- `users` at guild level → enables slash commands
- `channels.allow: true` at channel level → lets agent respond
**Without `users`:** Slash commands don't work
**Without `channels.allow`:** Agent doesn't respond (even with `users` set)
**Bug/Design Issue:** Dual-whitelist is redundant but required. The `users` filter blocks agent responses when enabled.
### Discord Channels Reference
| Channel | ID | Purpose | Agent Active |
|---------|-----|---------|--------------|
| #home-assistant | 1466074219829006599 | HA, room-assistant | ✅ |
| #coding | 1468627455656067074 | Code, git, projects | ✅ |
| #projects | 1468257895152881796 | Experiments, non-coding | ✅ |
| #summaries | 1471202415385509981 | URL summaries, YouTube | ✅ |
| #alerts | 1473701182076752135 | System alerts | ✅ |
**Note:** Channel names change sometimes... IDs are forever 😂
---
## Docker Services
**Location:** `~/.openclaw/workspace/docker/`
**Services:**
| Service | Size | Purpose | Config |
|---------|------|---------|--------|
| **frigate** | 219 MB | NVR/AI camera detection | `docker-compose.yml`, `config.yml` |
| **nextcloud** | 1.1 GB | Self-hosted file sync | `docker-compose.yml` |
| **discord-voice-bot** | <1 MB | GLaDOS voice bot | `docker-compose.yml` |
**Note:** Frigate media files moved outside workspace. Only config and AI model remain.
**To start/stop:**
```bash
cd ~/.openclaw/workspace/docker/[service]
docker-compose up -d # Start
docker-compose down # Stop
docker-compose logs -f # View logs
```
---
Add whatever helps you do your job. This is your cheat sheet.

View File

@@ -0,0 +1,86 @@
# Coding Workflow
## Environment
- **Primary Channel:** Discord #coding (1468627455656067074)
- **Repository:** whoisfrost/controls-web (Lassite controls internal website)
- **Model:** kimi-k2.5:cloud (home-assistant), qwen3-coder-next:cloud (coding)
---
## Git Workflow
### Branch Strategy
| Branch | Purpose |
|--------|---------|
| `main` | Stable/production branch |
| `dev` | Testing/playground branch |
| `feature/*` | Specific changes (deleted after merge) |
### Deployment Process
```
Work PC → GitHub (dev) → Dev Server (pulls dev) → Live Server (pulls main)
```
### Workflow Steps
1. Create feature branch from dev
2. Work and commit
3. Push feature branch to GitHub
4. Merge feature → dev
5. Test on dev server
6. Merge dev → main
7. Deploy to live server
### Commands
```bash
git checkout -b dev # Create dev branch
git push origin dev # Push dev branch
git checkout -b feature-name # Create feature branch
git push origin feature-name # Push feature
git checkout dev
git merge feature-name # Merge into dev
git push origin dev
git checkout main
git merge dev # After testing
git push origin main
```
---
## LAMP Stack
### Local Development
- **Dashboard:** `C:\web\htdocs\dashboard` (active project)
- **Web Root:** `C:\web\htdocs\`
- **Old Dashboard:** `/var/www/html/dashboardv2/` (ignore - archived)
### Production
- Dev server pulls from `dev` branch
- Live server pulls from `main` branch
---
## Tools & Environment
- **Shell:** Bash
- **SSH, curl, jq**
- **Node.js:** For Next.js/React projects
- **Python:** For Flask backends
---
## Model Assignments (Confirmed 2026-02-10)
| Channel | Model | Reason |
|---------|-------|--------|
| #home-assistant | kimi-k2.5:cloud | General purpose |
| #coding | qwen3-coder-next:cloud | Optimized for code |
| #projects | kimi-k2.5:cloud | General purpose |
---
## Related Projects
- [[Mission Control Dashboard (Python)]] — Flask dashboard :5050
- [[Mission Control Dashboard (Next.js)]] — React dashboard :3000 (completed)
---
*Status: Active | Updated: 2026-02-22*

View File

@@ -0,0 +1,90 @@
# Discord Voice Bot (GLaDOS)
## Overview
Voice-controlled Discord bot with conversational AI — always available in #coding voice channel
---
## Location
`/home/admin/.openclaw/workspace/discord-voice-bot/`
---
## Architecture (Completed 2026-02-08)
### Components
| Component | Endpoint | Purpose |
|-----------|----------|---------|
| **TTS** | 192.168.0.17:5050 | GLaDOS voice synthesis |
| **STT** | 192.168.0.17:10300 | Whisper via Wyoming protocol |
| **LLM** | 192.168.0.17:11434 | Ollama (qwen3-coder-next:cloud) |
| **Auto-join** | On startup | Joins #coding voice channel |
### Voice Pipeline
```
Wake Word → STT (Whisper) → LLM (Ollama) → TTS (GLaDOS) → Voice Output
```
---
## Commands
- `!join` — Join voice channel
- `!leave` — Leave voice channel
- `!test [text]` — Test TTS synthesis
- `!listen` — 5-second voice recording (7-10 sec latency)
---
## MCP Integration (OpenClaw Bridge)
### MCP Tools Available via Voice
- `list_projects()` — "What am I working on?"
- `create_project(name)` — Start new project
- `add_task(project, task)` — Add tasks via voice
- `update_task_status(taskId, status)` — Mark complete
- `get_project_status()` — Check overall progress
### MCP Server Config
```yaml
mcp_servers:
- name: "openclaw"
transport: "stdio"
command: "python"
args:
- "C:\Users\admin\.openclaw\workspace\discord-voice-bot\openclaw_mcp_server.py"
```
---
## Files Created
- `openclaw_mcp_server.py` — FastMCP server exposing OpenClaw tools
- `main.py` — Bot implementation using discord.py, wyoming
- `config.yaml` — Configuration
- `requirements.txt` — Dependencies (discord.py, requests, numpy, wyoming)
---
## What Changed (v2)
- Removed GLaDOS direct dependencies (simpler integration)
- Uses existing services (Whisper, Ollama, HTTP TTS)
- Auto-joins voice channel on startup
- Clean async architecture
- MCP bridge for OpenClaw integration
---
## Known Limitations
- Voice latency: 7-10 seconds for `!listen` (5s recording + processing)
- Not conversational due to latency
- Best for command-based interactions, not real-time chat
---
## Status
**COMPLETED** — Operational in #coding voice channel
Bot auto-joins on startup and accepts voice commands via MCP bridge.
---
*Status: Complete | Version: 2.0 | Updated: 2026-02-22*

100
Projects/Home Assistant.md Normal file
View File

@@ -0,0 +1,100 @@
# Home Assistant
## Environment
- **URL:** http://192.168.0.39:8123
- **Auth Token:** eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiIxMTRhMDMwYjNhNjg0N2JiYWY2YmUxNmY4YTBhYjVkZiIsImlhdCI6MTc3MDE3NTU0NSwiZXhwIjoyMDg1NTM1NTQ1fQ.8xxRzURj0NoFoo_UdtH34IXcuBX6fSpofdA8GjCK-B4
- **MQTT Broker:** 192.168.0.39:1883 (corey/41945549)
- **Status:** 🔄 In Progress (entity cleanup ongoing)
- **Discord Channel:** #home-assistant (1466074219829006599)
---
## Room-Assistant (Bluetooth Presence) - WORKING! ✅
**What it does:**
- Pi Zero W BLE scans for known phones
- Reports to HA via MQTT
- Creates device_tracker entities per room
- Multi-Pi setup gives room-level presence
### Hardware
- **Pi 1:** livingroom-pi (192.168.0.95)
- **Bluetooth MAC:** B8:27:EB:50:C9:40
- **SSH:** admin / 41945549
- **SSH Key:** ~/.ssh/id_ed25519 (Windows SSH quirk - needs manual workarounds)
### Phone Tracking
- **Corey's Phone:** B0:C2:C7:07:28:B4 (motorola razr 2024)
- **Phone MAC Discovery:**
- iPhone: Settings → About → Bluetooth
- Android: Settings → About Phone → Status → Bluetooth address
### Room-Assistant Config (`/home/admin/config/local.yml`)
```yaml
mqtt:
host: "192.168.0.39"
port: 1883
username: "corey"
password: "41945549"
bluetooth:
adminToken: "AF07072FBAC1FD6281FBE765DF6D841E"
timeout: 60
addresses:
- "b0:c2:c7:07:28:b5" # Corey's phone MAC
settings:
room: "LivingRoom"
```
### Home Assistant Entities Created
- `sensor.livingroom_cluster_size`
- `sensor.livingroom_cluster_leader`
- `device_tracker.livingroom_phone` (when phone in range)
### Key Config Notes
- Config location: `/home/admin/config/local.yml` (NOT in room-assistant subdir)
- Config format: keys at root level (v2.x), no "global." prefix
- mdns module needed: `sudo npm install -g mdns` (for cluster discovery)
- RSSI threshold: `-70` (adjustable for range)
---
## Current Tasks
### High Priority
- [ ] Entity cleanup (972 devices in spreadsheet)
- [x] Fix hallway sensor battery (1%)
- [ ] Add Kathy's phone to room-assistant config
### In Progress
- [x] Room-assistant setup and working
- [x] Phone MAC paired and tracking
- [ ] Multi-Pi expansion (clone SD after first Pi stable)
---
## Setup Workflow (for future Pis)
1. Flash Pi OS Lite to SD card
2. Enable SSH + WiFi via Pi Imager
3. Copy config files to Pi
4. Run `sudo ./setup-room-assistant.sh`
5. Script prompts for: room name, MQTT creds, phone MACs
---
## Files Created
- `room-assistant-config.yml` — BLE presence config template
- `setup-room-assistant.sh` — Automated Pi setup script
- `ROOM_ASSISTANT_SETUP.md` — Complete setup documentation
- `temp/write_ha_names.py` — Push entity changes back to HA
---
## Integration Points
- HA REST API (native)
- MQTT (for room-assistant)
- Mission Control dashboard (for display)
- Discord notifications (alerts)
---
*Status: Room presence working, entity cleanup ongoing | Updated: 2026-02-22*

144
Projects/Memory System.md Normal file
View File

@@ -0,0 +1,144 @@
# Memory System
## Architecture Evolution
Started as flat file system, evolved to hierarchical hybrid (file + SQL) architecture.
---
## Current Stack (February 2026)
### 1. Hierarchical File Structure
Based on ucsandman's design — index + drill-down:
`
memory/
├── MEMORY.md # ~2.4k token index (was 5-10k)
├── people/
│ └── corey.md # User details
├── projects/
│ ├── mission-control-python.md
│ ├── home-assistant.md
│ ├── memory-system.md
│ └── [others]
├── decisions/
│ └── 2026-02.md # Monthly decisions
└── 2026-02-21.md # Daily notes
`
**Benefits:**
- Session start: ~2.4k tokens (was 5-10k)
- On-demand drill-down: ~1k tokens per file
- **~70% token savings**
### 2. SQLite Database
- **Location:** ~/.openclaw/memory.db
- **Tables:**
- memory_cells — Structured data
- scenes — Context/grouping
- memory_fts — Full-text search
- **Extraction:** Memory Worker agent (3 AM daily)
### 3. Supermemory.ai Backup
- **Schedule:** Daily 2 AM
- **Script:** scripts/backup-memory.py
- **History:** Document IDs tracked per backup
### 4. MySQL Mirror (Legacy)
- **Host:** localhost:3306
- **Database:** clawdbot_projects
- **Tables:** daily_notes, long_term_memories, action_items, backup_logs, sessions
- **User:** AlexAI/alexisabignerd
- **Status:** Functional but not actively used
---
## Key Decisions
| Date | Decision | Status |
|------|----------|--------|
| 2026-02-09 | Supermemory backup with cron | Active |
| 2026-02-12 | workspace-context.md for temp state | Active |
| 2026-02-16 | Hybrid File + SQLite (not MySQL) | Active |
| 2026-02-18 | Hierarchical index + drill-down | Live |
| 2026-02-20 | Memory Worker writes to SQLite | Working |
---
## Ollama Memory Embeddings (2026-02-10)
**Setup:**
- Installed skill from https://clawhub.ai/vidarbrekke/ollama-memory-embeddings
- Uses Ollama /v1/embeddings endpoint
- Replaces node-llama-cpp for local embeddings
**Trade-off:**
- ✅ Faster, OpenAI-compatible API
- ⚠️ Two embedding universes: old (node-llama-cpp) vs new (Ollama)
- Historical memories may search differently
---
## Workers
### Memory Worker Daily
- **Schedule:** 3 AM
- **Task:** Extract structured data → SQLite
- **Extraction source:** memory/YYYY-MM-DD.md files
- **Output:** memory.db + Discord report
### Job Verifier Daily
- **Schedule:** 9 AM
- **Task:** Check overnight job statuses
- **Reports to:** #alerts channel
---
## Integration Points
| System | Direction | Method |
|--------|-----------|--------|
| OpenClaw Memory Search | Read | semantic search |
| SQLite Database | Read/Write | memory tool |
| Supermemory | Write (backup) | API |
| Obsidian Vault | Write (export) | notesmd-cli |
| MySQL | Legacy | Direct SQL |
---
## Skills Related
| Skill | Purpose |
|-------|---------|
| ollama-memory-embeddings | Ollama-based embeddings |
| memory-to-obsidian | Export notes to Obsidian |
| ez-cronjob | Fix cron scheduling issues |
| self-improving-agent | Log errors/corrections |
---
## Troubleshooting Notes
**Cron deadlock bug:**
- Issue: cron tool hangs
- Fix: Use openclaw cron CLI via exec instead
**Context bloat:**
- Issue: 256k limit hit frequently
- Fix: Spawn sub-agents for complex tasks
**Session recovery:**
- workspace-context.md survives crashes
- Cleaned daily at ~11 PM
---
## Future Ideas
1. SQL → HA Dashboard integration
2. Automated presence tracking export
3. Memory stats/analytics in Mission Control
4. Re-embed historical memories for consistency
---
Status: Live | Last Major Update: 2026-02-18 (Hierarchical restructure)

View File

@@ -0,0 +1,261 @@
---
title: Memory System Architecture
category: Projects
project: Memory System
type: Architecture/Documentation
status: complete
date: 2026-02-16
last_updated: 2026-02-23
tags: [memory, architecture, openclaw, system-design, data-flow]
source_file: memory_system_architecture.md
---
# Memory System Architecture
*Diagram of how information flows and persists in the OpenClaw system*
---
## Overview
```
┌─────────────────────────────────────────────────────────────────────────────┐
│ INFORMATION FLOW │
└─────────────────────────────────────────────────────────────────────────────┘
User Conversation
┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐
│ ME (Main Agent) │────▶│ Memory Worker │────▶│ SQLite Database │
│ (Real-time) │ │ (Daily 3 AM) │ │ (Structured) │
└─────────────────────┘ └─────────────────────┘ └─────────────────────┘
│ │ │
│ │ │
▼ ▼ ▼
┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐
│ Daily Notes │ │ Query Interface │ │ Stats/Search │
│ (memory/*.md) │◄────│ (On Demand) │◄────│ (SQL/FTS) │
└─────────────────────┘ └─────────────────────┘ └─────────────────────┘
┌─────────────────────┐
│ MEMORY.md │
│ (Curated) │
└─────────────────────┘
┌─────────────────────┐
│ Supermemory.ai │
│ (Cloud Backup) │
└─────────────────────┘
```
---
## Storage Layers (By Speed & Persistence)
### 1. ⚡ Session RAM (Transient)
| Aspect | Details |
|--------|---------|
| **What** | Current conversation context, tool outputs, working memory |
| **Writes** | Every message I process |
| **When** | Real-time during conversation |
| **Stored** | Until session ends or compaction (30 min - 4 hours) |
| **Survives** | ❌ Session crash ❌ Gateway restart |
| **Size** | ~100K-250K tokens |
**Risk:** Compaction clears this. The "danger zone" is between last tool use and compaction.
---
### 2. 📝 Daily Notes (Short-term)
| Aspect | Details |
|--------|---------|
| **What** | Raw daily activity, decisions, tasks, errors |
| **Writes** | Pre-compaction flush (automatic) + manual captures |
| **When** | End of productive sessions, before `/compact` |
| **Stored** | `memory/YYYY-MM-DD.md` |
| **Survives** | ✅ Session crash ✅ Gateway restart |
| **Retention** | ~30-90 days (manually reviewed) |
| **Format** | Free-form markdown |
**Written by:** Me (main agent) during heartbeat or EOD ritual
---
### 3. 🧠 MEMORY.md (Long-term)
| Aspect | Details |
|--------|---------|
| **What** | Curated important info, distilled from daily notes |
| **Writes** | Manual review of daily notes, during heartbeats |
| **When** | Every few days, or when something critical happens |
| **Stored** | `MEMORY.md` in workspace root |
| **Survives** | ✅ Everything (file-based) |
| **Retention** | Permanent (manual curation) |
| **Format** | Human-readable markdown |
**Written by:** Me, after reviewing daily notes
---
### 4. 📊 SQLite Database (Structured)
| Aspect | Details |
|--------|---------|
| **What** | Structured: tasks, decisions, facts, projects with salience |
| **Writes** | Memory Worker (automated daily extraction) |
| **When** | Daily 3:00 AM (cron job) |
| **Stored** | `~/.openclaw/memory.db` |
| **Survives** | ✅ File-based |
| **Retention** | Permanent (until manual deletion) |
| **Format** | Relational: cells, scenes, FTS index |
**Written by:** Memory Worker agent (spawned via cron)
**Schema:**
```sql
memory_cells: id, scene, cell_type, salience, content, source_file, created_at
scenes: scene, summary, item_count, updated_at
memory_fts: full-text search index
```
---
### 5. 🌐 Supermemory.ai (Cloud)
| Aspect | Details |
|--------|---------|
| **What** | Full backup of all memory files |
| **Writes** | Supermemory Backup job (automated) |
| **When** | Daily 2:00 AM |
| **Stored** | Supermemory.ai cloud service |
| **Survives** | ✅ Disk failure ✅ Workspace loss |
| **Retention** | Cloud provider dependent |
| **Format** | API-uploaded documents |
**Written by:** Python script via cron job
---
### 6. 📋 Workspace Context (Session Bridge)
| Aspect | Details |
|--------|---------|
| **What** | Current conversation, in-progress, finished today |
| **Writes** | Real-time during session |
| **When** | Continuously updated |
| **Stored** | `workspace-context.md` |
| **Survives** | ✅ Session crash ✅ Channel switch |
| **Retention** | Cleared nightly (~11 PM) |
| **Format** | Structured markdown |
**Special:** Survives between channels and session crashes. Cleared daily.
---
## Retention Summary
| Layer | Retention | Cleared When | Backup |
|-------|-----------|--------------|--------|
| Session RAM | Minutes-hours | Compaction | ❌ |
| Workspace Context | ~24 hours | 11 PM nightly | ❌ |
| Daily Notes | 30-90 days | Manual archive | Supermemory |
| MEMORY.md | Permanent | Manual edit | Supermemory |
| SQLite DB | Permanent | Manual delete | ❌ (local only) |
| Supermemory | Permanent | Cloud provider | N/A (is backup) |
---
## Write Triggers
```
Every Message
├─► Session RAM (immediate)
└─► If important ┐
workspace-context.md
Pre-compaction ┤
memory/YYYY-MM-DD.md
Periodic review ┤
MEMORY.md
Daily 2 AM ┤
Supermemory.ai
Daily 3 AM ┤
SQLite Database
```
---
## Access Patterns
### I (Main Agent) Access:
| Source | When | Purpose |
|--------|------|---------|
| MEMORY.md | Every session startup | Core identity, user prefs, important facts |
| USER.md | Every session startup | Who Corey is |
| SOUL.md | Every session startup | How I should behave |
| workspace-context.md | Every session startup | Current conversation state |
| memory/*.md | During heartbeats | Recent context |
| SQLite DB | On demand | Structured queries ("what tasks pending?") |
### Memory Worker Access:
| Source | When | Purpose |
|--------|------|---------|
| IDENTITY.md | Daily 3 AM | Who it is |
| SOUL.md | Daily 3 AM | Its mission |
| HEARTBEAT.md | Daily 3 AM | What to do (the script) |
| memory/YYYY-MM-DD.md | Daily 3 AM | What to extract |
| SQLite DB | Daily 3 AM | Where to write |
---
## Failure Recovery
### Scenario: Session Crash
-**Survives:** Files (MEMORY.md, daily notes, workspace-context)
-**Lost:** Session RAM (compaction would have cleared anyway)
- 🔄 **Recovery:** Read files on restart, reconstruct context
### Scenario: Gateway Restart
-**Survives:** All files, SQLite DB
-**Lost:** Session state, cron job state (must recreate jobs)
- 🔄 **Recovery:** Gateway restart, verify cron jobs running
### Scenario: Disk Failure
-**Survives:** Supermemory.ai (cloud backup)
-**Lost:** Local files, SQLite DB
- 🔄 **Recovery:** Restore from Supermemory, recreate DB (re-extract from notes)
---
## Key Insights
1. **Text > Brain** — Files persist, my session doesn't
2. **Daily notes = raw, MEMORY.md = curated** — Filter noise from signal
3. **Worker = automated structuring** — Don't have to manually organize everything
4. **Hybrid = best of both** — Human-readable + machine-queryable
5. **Multiple backups** — Local files + cloud (Supermemory) + structured DB
---
## Related Files
- [[Memory System]] — OpenClaw summary (in OpenClaw/ folder)
- MEMORY.md — Curated long-term memory
- memory/YYYY-MM-DD.md — Daily notes
- workspace-context.md — Session bridge
- ~/.openclaw/memory.db — Structured SQLite database
---
*Generated: 2026-02-16*
*Copied to Obsidian: 2026-02-23*
*System Version: Multi-agent with SQLite extraction*

View File

@@ -0,0 +1,40 @@
# Mission Control Dashboard (Python)
**Location:** C:\web\htdocs\mission-control-py
**URL:** http://localhost:5050
**Tech:** Python/Flask + MySQL + Home Assistant API
## Quick Reference
| Command | Action |
|---------|--------|
| Run | cd C:\web\htdocs\mission-control-py && python app.py |
| Port | 5050 (Frigate-safe) |
| Restart | Auto-reloads on file changes |
## Pages
| Route | Purpose |
|-------|---------|
| / | Gateway status, Cron jobs, Weather |
| /admin | Projects/Tasks CRUD |
| /news | News briefs archive |
| /alerts | System alerts |
| /calendar | HA calendar + F1 races |
| /memory | Memory file stats |
## Features
- **Caching:** 5-minute TTL for Gateway/Cron/Weather
- **Weather:** From HA weather.home entity
- **News:** Cron-fed JSON at 8 AM daily
- **Calendar:** HA integration (date range bug known)
## Known Issues
| Issue | Status |
|-------|--------|
| Calendar >10 days not showing | Known |
| Calendar agent creates cron not events | Known |
_Last updated: 2026-02-20_

View File

@@ -0,0 +1,203 @@
---
title: Multi-User Agent Architecture
category: Projects
project: System Architecture
type: Research/Design
status: planning
date: 2026-02-24
tags: [openclaw, multi-user, architecture, collaboration, discord, design]
---
# Multi-User Agent Architecture
**Question:** What's the best way to handle multiple users using one agent for tasks and project management?
**Date:** 2026-02-24
**Status:** Planning/Research
---
## Executive Summary
Four approaches ranging from simple (separate channels) to complex (multi-agent). Recommendation: **Start with Option 1 (Separate Channels)** and add frontmatter tagging (Option 3) as needed.
---
## Option 1: Separate Channels Per User ⭐ RECOMMENDED
**Best for:** Small teams (2-5 people), clear separation
### Setup
```
Discord Server:
├── #home-assistant (shared - only you/active)
├── #corey-projects (your own)
├── #alice-projects (Alice's channel)
├── #bob-projects (Bob's channel)
└── #shared-projects (collaborative)
```
### How It Works
- Each user gets their own channel
- Agent has separate sessions for each
- Context isolation = no cross-contamination
- Shared projects in #shared-projects
### Pros
- ✅ Total privacy per user
- ✅ Simple to manage
- ✅ One agent, multiple sessions
- ✅ User-specific memory stays isolated
### Cons
- More channels to manage
- Shared projects need explicit cross-posting
---
## Option 2: User Tagging System (Hybrid)
**Best for:** Shared workspace with user-aware tasks
### Setup
- One shared channel (#projects)
- Users tag messages: `@alice` or `#for-alice`
- Or: "Task for Alice: ..."
### How It Works
- Agent identifies user from message content
- Store tasks with user attribution
- Query by user when needed
### Example Workflow
```
Corey: #task for @alice - Review the architecture doc
Alice: (in same channel) I reviewed it, looks good
Corey: #task for @bob - Deploy the update
```
### Pros
- ✅ Single channel
- ✅ Collaborative feel
- ✅ Clear ownership
### Cons
- Requires discipline with tagging
- Context can get messy
- Privacy is opt-in (explicit tags)
---
## Option 3: User Profiles in Frontmatter
**Best for:** Shared Obsidian vault, Dataview queries
### Setup
- Tasks/projects have frontmatter with `assignee: alice`
- Query using Dataview: `WHERE assignee = "alice"`
### Example Task
```markdown
---
title: Review architecture
project: Memory System
assignee: alice
status: todo
due: 2026-02-25
---
Alice needs to review the memory system architecture.
```
### Query
```dataview
TABLE status, due
FROM "Tasks"
WHERE assignee = "alice" AND status = "todo"
SORT due ASC
```
### Pros
- ✅ Perfect for Obsidian
- ✅ Dataview-powered dashboards
- ✅ Automatic organization
### Cons
- Requires frontmatter discipline
- Real-time chat = harder to manage
---
## Option 4: Multi-Agent (Advanced)
**Best for:** Teams where each person wants their own agent
### Setup
- Each user has their own OpenClaw instance
- Shared resources via Obsidian/SQLite
- Sync via git or shared database
### How It Syncs
- Obsidian vault is shared (Syncthing/Nextcloud)
- Both agents read/write same files
- Different identities, same data
### Pros
- ✅ Full separation
- ✅ Personalized agents
- ✅ Shared long-term memory
### Cons
- Complex setup
- More resources (multiple agents)
- Merge conflicts possible
---
## Recommendation
**Start with:** Option 1 (Separate Channels)
**Why:**
- Simplest to implement
- No context pollution
- Easy permissions (Discord native)
- Can add Option 3 (Frontmatter) later
**Hybrid Approach:**
- Private channels per user (`#alice-projects`, `#bob-projects`)
- Shared channel for collaboration (`#team-projects`)
- Obsidian vault is shared with user-tagged frontmatter
---
## Decision Matrix
| Factor | Option 1 | Option 2 | Option 3 | Option 4 |
|--------|----------|----------|----------|----------|
| **Privacy** | High | Medium | High | High |
| **Setup Complexity** | Low | Low | Medium | High |
| **Collaboration** | Medium | High | Medium | Medium |
| **Scalability** | Medium | High | High | High |
| **Discord Channels** | Many | One | N/A | Many |
---
## Next Steps
1. **Define users:** How many people? Technical level?
2. **Privacy check:** Do users need isolation from each other?
3. **Collaboration needs:** Shared projects vs individual work?
4. **Pilot:** Start with Option 1, iterate based on feedback
---
## Related
- [[Memory System]] — How agent memory works
- [[Dataview Query Examples]] — Query by user/assignee
---
*Created: 2026-02-24*
*Based on discussion in #home-assistant*

View File

@@ -0,0 +1,70 @@
---
title: Projects Index
category: Projects
status: active
last_updated: 2026-02-24
tags: [projects, index, active, completed]
---
# Projects Index
## Active Projects
### Mission Control Python
- Status: Live on :5050
- Type: Dashboard
- Tech: Flask + MySQL + HA API
- Notes: 6 pages, cron integration, weather, calendar
- Issues: Calendar date range bug, calendar agent bug
### Home Assistant
- Status: Entity cleanup ongoing
- Type: Home Automation
- Notes: 972 devices cleanup, Room-Assistant working
### Memory System
- Status: Hierarchical restructure complete
- Type: Infrastructure
- Notes: File + SQLite hybrid, Supermemory backups
### Coding Workflow
- Status: Active
- Type: DevOps
- Notes: Git/controls-web, Kimi/mini model split
### Auto-Summarize Workflow {#sync}
- Status: Active
- Type: Agent Capability
- Notes: "/summarize [URL]" → fetch → summarize → save to Summaries/
- Works with: Any web URL
### Multi-User Agent Architecture
- Status: Planning
- Type: System Design
- Notes: Researching multi-user approaches for task/project management
- Options: Separate channels, tagging system, frontmatter, multi-agent
- Decision: Start with Option 1 (separate Discord channels)
## Completed Projects
### Discord Voice Bot (GLaDOS)
- Status: Completed 2026-02-08
- Type: Voice Bot
- Notes: Always in #coding voice
### Proton Mail Bridge
- Status: Completed 2026-02-18
- Type: Email Integration
- Notes: IMAP/SMTP tested
## How to Sync
1. Edit any project note in Obsidian
2. Tell me to sync
3. I read the updated note and update my memory
### How to Summarize
1. Type: `/summarize [URL]`
2. I fetch, summarize, and save to `Summaries/`
3. Confirm and link back to you
Last Updated: 2026-02-23

View File

@@ -0,0 +1,84 @@
# Proton Mail Bridge
## Overview
Email integration via Proton Mail Bridge for IMAP/SMTP access. Gives local IMAP/SMTP endpoints that can be used with standard email clients.
---
## Connection Details
- **IMAP Server:** 127.0.0.1:1143
- **SMTP Server:** 127.0.0.1:1025
- **Username:** alexthenerdyai@proton.me
- **Security:** AUTH=PLAIN (local connection only)
- **Bridge Version:** Proton Mail Bridge 03.22.00 - gluon
---
## Test Results (2026-02-18)
✅ Connected successfully to Bridge IMAP
✅ Authenticated with Bridge password
✅ Retrieved folder list (10 folders found)
✅ INBOX has 3 messages, all unread
---
## Folders
- INBOX
- Sent
- Drafts
- Starred
- Archive
- Spam
- Trash
- All Mail
- Folders
- Labels
---
## Capabilities
- Read emails from INBOX
- Search, mark read/unread, move messages
- Send emails via SMTP
- Full folder management
---
## Files Created
- `tools/proton_imap_test.py` — Initial test script
- `tools/proton_imap_simple.py` — Working IMAP test script
---
## Potential Uses
- Daily email digest
- Notifications
- Automated responses
- Email-based triggers (IFTTT style)
---
## Next Steps
- [ ] Integrate with cron jobs for email-based actions
- [ ] Create email notification system
- [ ] Set up email-to-Discord forwarding
- [ ] Build email digest bot
---
## Technical Notes
- Bridge runs locally (127.0.0.1)
- AUTH=PLAIN is safe because connection is local only
- Standard Python imaplib/smtplib libraries work
- No Proton-specific libraries needed
---
## Status
**FUNCTIONAL** — Bridge connected and tested
Ready for automation integration.
---
*Status: Complete & Tested | Updated: 2026-02-22*

View File

@@ -0,0 +1,148 @@
# 7 Best Apify Alternatives (2026)
**Source:** https://www.gumloop.com/blog/apify-alternatives
**Summarized:** 2026-02-23
---
## TL;DR
Apify is powerful but built for developers. These 7 alternatives offer web scraping with varying levels of no-code friendliness, AI integration, and pricing.
---
## What to Look For in an Apify Alternative
- **Built-in web scraping** — Native scraping vs HTTP parsing from scratch
- **Tech stack integration** — Google Sheets, Slack, Notion, CRM; MCP servers = bonus
- **LLM integration** — Pass scraped data through GPT/Claude/Gemini for enrichment
- **Security & scale** — RBAC, audit logs, SOC 2 if enterprise
- **Custom code support** — Python/JS for advanced scenarios
- **Templates/AI assistants** — Pre-built templates or AI that builds workflows for you
---
## The 7 Alternatives
### 1. Gumloop ⭐ (Author's Pick)
| | |
|---|---|
| **Best for** | AI agents + workflows that scrape, analyze, and act |
| **Pricing** | Free (2K credits) → $37/mo (Solo) → $244/mo (Team) |
**Why it wins:**
- "Gummie" AI assistant builds workflows via natural language
- Built-in web scraping + any LLM integration (no extra API keys needed)
- MCP server support for connecting to any tool
- Create autonomous AI agents that handle scraping tasks independently
**Gotcha:** Not scraping-specific; template library limited (but Gummie makes templates obsolete)
---
### 2. Octoparse
| | |
|---|---|
| **Best for** | No-code scraping with 500+ preset templates |
| **Pricing** | Free (10 tasks, local only) → $83/mo (Standard) → $299/mo (Pro) |
**Why it wins:**
- Visual crawler builder for non-technical users
- 500+ templates: Google Maps, LinkedIn, Amazon scrapers
- IP rotation + CAPTCHA solving built-in
- Run locally or cloud
**Gotcha:** Workflows are rigid; struggles with complex multi-step flows; no AI agent features
---
### 3. n8n
| | |
|---|---|
| **Best for** | Technical teams wanting self-hosted, open-source automation |
| **Pricing** | Free (self-hosted) → $24/mo (cloud) |
**Why it wins:**
- Open source, self-hostable = full data control
- Visual workflow builder with web scraping nodes
- Connect to any API/service
**Gotcha:** Requires technical setup; not scraping-specific
---
### 4. Relay.app
| | |
|---|---|
| **Best for** | Workflow automation with human-in-the-loop steps |
| **Pricing** | Free tier available |
**Why it wins:**
- Combines automation with human approval steps
- Good for workflows that need review before action
---
### 5. Thunderbit
| | |
|---|---|
| **Best for** | AI-powered web data extraction |
| **Pricing** | Varies |
**Why it wins:**
- AI-first approach to scraping
- Handles dynamic content well
---
### 6. Browse AI
| | |
|---|---|
| **Best for** | No-code web monitoring and data extraction |
| **Pricing** | Free tier available |
**Why it wins:**
- Record actions → replay automatically
- Monitor sites for changes
- Pre-built robots for common tasks
---
### 7. Claude (Direct)
| | |
|---|---|
| **Best for** | One-off scraping/analysis with AI |
| **Pricing** | Subscription-based |
**Why it wins:**
- Can scrape and analyze web content directly
- No setup required for simple tasks
- Great for ad-hoc research
---
## Quick Comparison
| Tool | No-Code | AI Built-In | Self-Host | Price |
|------|---------|-------------|-----------|-------|
| Gumloop | ✅ | ✅ | ❌ | $0-244/mo |
| Octoparse | ✅ | ❌ | ❌ | $0-299/mo |
| n8n | Partial | ❌ | ✅ | $0-24/mo |
| Browse AI | ✅ | ❌ | ❌ | Freemium |
| Claude | N/A | ✅ | ❌ | Subscription |
---
## Bottom Line
- **Gumloop** = Best for AI-powered scraping + automation in one platform
- **Octoparse** = Best no-code scraping with templates
- **n8n** = Best for devs who want open-source + self-host
- **Claude** = Best for one-off AI scraping without setup

View File

@@ -0,0 +1,90 @@
---
title: Detecting and Preventing Distillation Attacks
category: Summary
type: Security/AI
source_url: https://www.anthropic.com/news/detecting-and-preventing-distillation-attacks
source: Anthropic News
date: 2026-02-23
tags: [anthropic, ai, security, distillation, deepseek, moonshot, minimax]
---
# Detecting and Preventing Distillation Attacks
**URL:** https://www.anthropic.com/news/detecting-and-preventing-distillation-attacks
**Source:** Anthropic News
**Date Summarized:** 2026-02-23
---
## tl;dr
Anthropic identified three AI labs (DeepSeek, Moonshot, MiniMax) running industrial-scale campaigns to extract Claude's capabilities through "distillation" — generating over 16 million exchanges via 24,000+ fraudulent accounts to train their own models on Claude's outputs.
---
## What is Distillation?
**Definition:** Training a smaller/less capable model on outputs from a stronger one.
**Legitimate Use:** Frontier labs distill their own models to create smaller, cheaper versions for customers.
**Illicit Use:** Competitors extract powerful capabilities from other labs at fraction of the cost/time.
---
## Why It Matters
### National Security Risks
- Illicitly distilled models **lack safeguards**
- Protections against bioweapons, cyber attacks, etc. are stripped out
- Dangerous capabilities proliferate without protections
### Authoritarian Use
- Foreign labs can feed distilled models into military/intelligence/surveillance
- Enables offensive cyber operations, disinformation, mass surveillance
- Open-sourced distilled models spread beyond any government's control
---
## Export Control Implications
- Distillation attacks **undermine export controls**
- Allows foreign labs (including CCP-controlled) to close competitive gaps
- Rapid "advancements" by these labs are actually **extracted capabilities**, not innovation
- Restricted chip access limits both:
- Direct model training
- Scale of illicit distillation campaigns
---
## What Anthropic Found
| Detail | Data |
|--------|------|
| **Labs involved** | DeepSeek, Moonshot, MiniMax |
| **Exchange volume** | 16+ million interactions |
| **Fraudulent accounts** | ~24,000 accounts |
| **Violation** | Terms of service + regional access restrictions |
---
## The Threat
- Campaigns growing in **intensity and sophistication**
- Window to act is **narrow**
- Threat extends **beyond any single company or region**
- Requires **coordinated action** by industry, policymakers, global AI community
---
## Key Takeaways
1. Distillation is a **dual-use technique** — legitimate for efficiency, dangerous when weaponized
2. **Scale matters** — 16M+ exchanges shows industrial-level extraction, not casual use
3. **Safeguards evaporate** — distilled models lose critical safety protections
4. **Export controls undermined** — distillation bypasses chip restrictions through data theft
5. **National security threat** — authoritarian actors gain frontier AI capabilities
---
*Source: https://www.anthropic.com/news/detecting-and-preventing-distillation-attacks*

View File

@@ -0,0 +1,66 @@
# 4 Common Home Assistant Mistakes That Silently Break Your Automations
**Source:** https://www.xda-developers.com/home-assistant-mistakes-that-can-break-your-automations/
**Summarized:** 2026-02-23
---
## TL;DR
Four common mistakes that break Home Assistant automations: conflicting conditions, unavailable entities, ignoring DST changes, and wrong automation modes. Most are fixable with documentation, better tooling, and understanding HASS automation modes.
---
## 1. Conflicting Automation Conditions
**Problem:** Multiple workflows trying to control the same device simultaneously, causing:
- Failed triggers when another automation is using the device
- Endless flip-flopping where two automations fight over device state
**Solutions:**
- Document your automations thoroughly
- Avoid overly complex multi-device setups
- Switch to **Node-RED** for visual troubleshooting (canvas view vs YAML hunting)
---
## 2. Entities Becoming Unavailable
**Problem:** Cheap wireless devices drop connection; battery-powered sensors die → automations fail because the device isn't reachable.
**Solutions:**
- Invest in reliable devices (not cheap knockoffs prone to disconnects)
- Keep battery-powered sensors charged
- Use a central bridge for devices with different protocols (reduces lag-induced missed triggers)
---
## 3. Forgetting DST Changes in Time-Based Automations
**Problem:** Daylight Saving Time shifts your triggers by an hour → automations fire at wrong times.
**Solutions:**
- Set reminders to update automations before DST changes
- Use **HACS blueprints** that alert you when clocks shift
- Better: Use **sun position triggers** instead of hard-coded times (adaptive lighting approach)
---
## 4. Choosing the Wrong Automation Mode
**Problem:** Default mode is `single`, which warns/ignores new triggers while automation is running. Breaks motion sensors, timers, and anything that fires rapidly.
**Modes Explained:**
| Mode | Behavior | Best For |
|------|----------|----------|
| `single` (default) | Ignores new triggers while running | Simple toggles |
| `restart` | Aborts current action, starts fresh | Motion sensors, rapid re-triggers |
| `queued` | Logs triggers, executes sequentially | Tasks where order matters |
| `parallel` | Runs multiple actions simultaneously | Complex workflows with independent actions |
---
## Key Takeaway
Home Assistant automations are powerful but fragile. Documentation, reliable hardware, and understanding automation modes prevent most silent failures.

View File

@@ -0,0 +1,88 @@
---
title: Homelab MCP Server
category: Summary
type: Infrastructure/MCP
source_url: https://lobehub.com/mcp/theonlytruebigmac-homelab-mcp
github: https://github.com/theonlytruebigmac/homelab-mcp
date: 2026-02-23
tags: [mcp, homelab, infrastructure, ai, self-hosted]
---
# Homelab MCP Server
**URL:** https://lobehub.com/mcp/theonlytruebigmac-homelab-mcp
**GitHub:** https://github.com/theonlytruebigmac/homelab-mcp
**Date Summarized:** 2026-02-23
## tl;dr
A unified MCP (Model Context Protocol) server that connects AI agents to your self-hosted homelab infrastructure through 30+ consolidated tools.
---
## What it is
- **MCP Server** for homelab infrastructure
- Connects AI assistants (Claude, Gemini, ChatGPT, Cursor) to your self-hosted services
- Also exposes a full REST API for automation tools like n8n
---
## Key Features
- **30 consolidated MCP tools** — action-based compound tools for efficient context windows
- **MCP Resources** — real-time data feeds (clients, devices, queues, health)
- **MCP Prompts** — pre-built templates for troubleshooting, security audits, health checks
- **REST API** — every tool exposed as REST endpoint with Swagger docs
- **Conditional registration** — only enabled services register their tools
- **Docker-first deployment** — single `docker compose up`
- **Audit logging** — every tool call traced and logged
---
## Supported Services (9 total)
| Service | Category | Tools | Capabilities |
|---------|----------|-------|--------------|
| **Unifi** | Networking | 9 | Clients, devices, firewall, VLANs, security, guest access |
| **Proxmox** | Virtualization | 3 | VMs, containers, snapshots, storage, power mgmt |
| **Plex** | Media Server | 2 | Playback, library search, scans, stream control |
| **Radarr/Sonarr** | Media Mgmt | 4 | Movie/TV search, add content, calendar, queue |
| **SABnzbd** | Downloads | 2 | Queue management, speed limits, history |
| **Portainer** | Docker | 4 | Containers, stacks, volumes, logs |
| **OPNsense** | Firewall | 2 | Interfaces, DHCP, gateway, firmware |
| **Home Assistant** | IoT/Smart Home | 3 | Entities, automations, scenes, service calls |
| **Traefik** | Reverse Proxy | 1 | Router inspection, backends, health |
---
## Tech Stack
- **Python 3.11+**
- **Docker/Docker Compose**
- **MCP 2.0+**
- **MIT License**
---
## Quick Install
```bash
git clone https://github.com/theonlytruebigmac/homelab-mcp.git
cd homelab-mcp
cp .env.example .env
# Edit .env with your service credentials
docker compose up
```
---
## Notes
- Each service has an `*_ENABLED` flag — set to `false` to disable
- Supports both MCP protocol and REST API
- Designed for AI agents to directly manage homelab infrastructure
---
*Summarized from lobehub.com/mcp/theonlytruebigmac-homelab-mcp*

View File

@@ -0,0 +1,106 @@
# Khoj AI - Self-Hostable AI Research App
**Source:** https://www.makeuseof.com/started-using-self-hostable-app-for-research-should-have-sooner/
**Summarized:** 2026-02-23
---
## TL;DR
Khoj AI is a middle ground between ChatGPT (too minimal) and NotebookLM (too heavy). Self-hostable, supports custom agents, automations, and your own models via Ollama. Think of it as "NotebookLM + Claude had a baby."
---
## What is Khoj AI?
A research assistant that combines web search, document analysis, and LLM chat. Two ways to use:
- **Cloud:** Free tier with Gemini Flash 3 and basic models
- **Self-hosted:** Docker + bring your own model (Ollama supported)
---
## Key Features
### 1. Built-in Agents
Pre-configured personas:
- Khoj (default)
- Technical Lead
- Teacher
- Legal Expert
Switch agents per conversation for role-specific responses.
### 2. Slash Commands
| Command | Function |
|---------|----------|
| `/notes` | Pull info only from your uploaded documents |
| `/code` | Launch built-in Python interpreter (can generate graphs via Matplotlib) |
| `/web` | Web search integration |
### 3. Custom Agents
Create your own:
1. Add files to knowledge base
2. Choose model
3. Set input/output modes
4. Done
### 4. Automations
Schedule recurring tasks:
- Daily stock market summaries at 9 AM
- RSS feed fetching at set times
- Results delivered to email automatically
No code required.
---
## Self-Hosting Setup
**Requirements:** Docker + decent hardware (local LLMs need beefy machines)
```bash
mkdir ~/.khoj && cd ~/.khoj
wget https://raw.githubusercontent.com/khoj-ai/khoj/main/docker-compose.yml
nano docker-compose.yml # Set admin email/password, add API keys
docker-compose up
```
**Access:** http://localhost:3600
**Model options:**
- Use third-party providers (OpenAI, Anthropic, Gemini) with API keys
- Use local models via Ollama
---
## Why Choose Khoj Over NotebookLM?
| Khoj | NotebookLM |
|------|------------|
| Self-hostable | Cloud only |
| Custom agents | Fixed structure |
| Automations | Manual queries |
| Bring your own model | Google models only |
| Middle ground complexity | Heavy, structured |
---
## Use Cases
- **Students:** Research, understanding topics (not copy-pasting assignments)
- **Work:** Document analysis, research workflows
- **Personal projects:** Custom agents for specific domains
---
## Caveats
- LLMs can hallucinate — always verify important info (legal, medical)
- Local models need strong hardware
- Accuracy depends on model choice
---
## Bottom Line
Khoj fills the gap between minimal chat interfaces and heavy research tools. Self-hosting gives you full stack ownership—own, don't rent.

View File

@@ -0,0 +1,58 @@
# I Replaced My Entire Note-Taking System with a Tool That Syncs Without an Account
**Source:** https://www.makeuseof.com/replaced-entire-note-taking-system-with-tool-that-syncs-without-account/
**Summarized:** 2026-02-23
---
## TL;DR
The author ditched subscription-based note apps for a free, open-source combo: **Obsidian** for writing + **Syncthing** for syncing. Result: full data ownership, no monthly fees, seamless cross-device sync without any cloud middleman.
---
## The Problem
Most note apps (Notion, Evernote, Apple Notes) lock data in proprietary formats on their servers. Two devices? Pay a subscription. Your data, their rules.
---
## The Solution: Obsidian + Syncthing
| Tool | Role | Why It Works |
|------|------|--------------|
| **Obsidian** | Note-taking | Local-first, Markdown files (.md), plain text = future-proof |
| **Syncthing** | Sync | P2P file sync, encrypted, no account needed |
**Key Benefits:**
- Own your data — Notes are just files in a folder
- No subscriptions — Both tools free and open-source
- Cross-platform — Windows, macOS, Linux, Android, iOS
- Encrypted sync — Direct device-to-device, no server sees content
- Conflict handling — Creates `.sync-conflict` files instead of silent overwrites
---
## Setup Highlights
1. **Obsidian vault** = folder of Markdown files
2. **Syncthing** folder type: Send & Receive
3. **File versioning** enabled (keeps 5-10 backups)
4. **Ignore patterns** for `.obsidian/cache` and `workspace*` (prevents UI conflicts)
5. **Device pairing** via ID exchange — works identically desktop & Android
**Android:** Use Syncthing-Fork (Play Store/F-Droid) with better battery optimization.
---
## Pro Tips
- Syncthing runs continuously → vault always up-to-date
- Bidirectional links + graph view in Obsidian = powerful knowledge mapping
- Plugins/themes sync too (`.obsidian` folder minus cache)
---
## Bottom Line
If you're tired of paying to access your own notes, this combo offers "unfairly good" value once the initial setup clicks into place.

View File

@@ -0,0 +1,146 @@
---
title: Obsidian Dataview
category: Summary
type: Tool/Plugin
source: https://github.com/blacksmithgu/obsidian-dataview
date: 2026-02-23
tags: [obsidian, dataview, plugin, query, database]
---
# Obsidian Dataview
**URL:** https://github.com/blacksmithgu/obsidian-dataview
**Description:** A data index and query language over Markdown files for Obsidian
**Date Summarized:** 2026-02-24
---
## tl;dr
Treat your Obsidian Vault as a **database** that you can query. Query, filter, sort, and extract data from Markdown pages using YAML frontmatter and inline fields.
---
## What It Does
Dataview generates data from your vault by pulling information from:
1. **Markdown Frontmatter** — YAML at the top of documents:
```yaml
---
alias: "document"
last-reviewed: 2021-08-17
rating: 8
status: active
---
```
2. **Inline Fields** — Key:: Value syntax in documents:
```markdown
Basic Field:: Value
**Bold Field**:: Nice!
You can also write [field:: inline fields]
(field2:: hidden field)
```
---
## Query Modes
### 1. Dataview Query Language (DQL)
Pipeline-based, SQL-like expressions:
```dataview
TABLE file.name AS "File", rating AS "Rating"
FROM #book
SORT rating DESC
```
### 2. Inline Expressions
Embed directly in markdown:
`= this.file.name` → shows filename
### 3. DataviewJS
JavaScript for complex logic:
```dataviewjs
for (let group of dv.pages("#book")
.where(p => p["time-read"].year == 2021)
.groupBy(p => p.genre)) {
dv.header(3, group.key);
dv.table(["Name", "Rating"], group.rows
.sort(k => k.rating, 'desc')
.map(k => [k.file.link, k.rating]))
}
```
---
## Example Use Cases
**Table of games with metadata:**
```dataview
TABLE time-played, length, rating
FROM "games"
SORT rating DESC
```
**List by tags:**
```dataview
LIST FROM #game/moba or #game/crpg
```
**Tasks from active projects:**
```dataview
TASK FROM #projects/active
```
**Books read in 2021, grouped by genre:**
```dataviewjs
for (let group of dv.pages("#book")
.where(p => p["time-read"].year == 2021)
.groupBy(p => p.genre)) {
dv.header(3, group.key);
dv.table(["Name", "Time Read", "Rating"],
group.rows.sort(k => k.rating, 'desc')
.map(k => [k.file.link, k["time-read"], k.rating]))
}
```
---
## Key Features
- ✅ Query any Markdown files in your vault
- ✅ Filter by tags, folders, metadata
- ✅ Sort by any field
- ✅ Group results
- ✅ Render as tables, lists, or tasks
- ✅ JavaScript API for complex logic
- ✅ Inline fields for hidden metadata
- ✅ Automatic data index updates
---
## Potential Uses for Corey's Vault
1. **Home Assistant Automations Table** — Query all automations by status
2. **Projects Dashboard** — Active vs completed projects
3. **Daily Notes Query** — Recent entries, completed tasks
4. **Research Summaries** — All `/summarize` outputs by date
5. **Cron Jobs Status** — Active vs disabled jobs
---
## Installation
Available in Obsidian Community Plugins:
1. Settings → Community Plugins → Browse
2. Search "Dataview"
3. Install & Enable
---
**Full Docs:** https://blacksmithgu.github.io/obsidian-dataview/
---
*Source: https://github.com/blacksmithgu/obsidian-dataview*

View File

@@ -0,0 +1,105 @@
# OpenClaw Multi-Agent Workflows - 4 Levels Explained
**Source:** https://www.reddit.com/r/openclaw/comments/1r2euvp/this_is_how_ive_learned_to_create_multiagent/
**Summarized:** 2026-02-23
---
## TL;DR
OpenClaw has **4 levels of multi-agent support** built-in, from simple persistent agents to full A2A Protocol orchestration. No Docker required for levels 1-3—they all run in a single gateway process.
---
## Level 1: Multiple Persistent Agents (Built-in)
Define isolated agents in config, each with their own workspace, system prompt, model, and tools:
```yaml
agents:
list:
- id: researcher
default: true
workspace: ~/.openclaw/workspace-research
- id: coder
workspace: ~/.openclaw/workspace-code
bindings:
- agentId: researcher
match: { channel: telegram, accountId: research-bot }
- agentId: coder
match: { channel: discord, guildId: "123456" }
```
Each agent has **full isolation**: separate session history, model config, tool permissions.
---
## Level 2: Agent-to-Agent Communication (Built-in)
Enable `tools.agentToAgent` for agents to talk via `sessions_send`:
```yaml
tools:
agentToAgent:
enabled: true
allow: ["researcher", "coder", "writer"]
```
- Ping-pong conversations (up to 5 turns by default)
- `sessions_spawn` for background sub-agents that report back
- Closest to "orchestrator delegates to specialist" pattern
---
## Level 3: Cross-Agent Delegation (3-Level Hierarchy)
Work around single-level limits:
```
Orchestrator (main agent)
├─ sessions_send → Specialist A (sibling main agent)
│ ├─ sessions_spawn → subagent A1
│ └─ sessions_spawn → subagent A2
└─ sessions_send → Specialist B (sibling main agent)
├─ sessions_spawn → subagent B1
└─ sessions_spawn → subagent B2
```
Config uses `subagents.allowAgents` for cross-agent spawning.
---
## Level 4: True Multi-Agent Orchestration (A2A Protocol)
For advanced use cases with intelligent routing, review, retries, synthesis:
- **a2a-adapter**: Wraps OpenClaw agents as A2A Protocol servers
- Mix-and-match: OpenClaw + CrewAI + LangChain + n8n
- Can run as local Python processes or remote agents
Example:
```python
from a2a_adapter import load_a2a_agent, serve_agent
adapter = await load_a2a_agent({
"adapter": "openclaw",
"agent_id": "researcher",
"thinking": "low",
"async_mode": True,
})
serve_agent(agent_card=agent_card, adapter=adapter, port=9001)
```
---
## Key Takeaways
| Level | Complexity | Setup |
|-------|-----------|-------|
| 1 | Low | Config only |
| 2 | Low-Medium | Config + enable tool |
| 3 | Medium | Config + cross-agent permissions |
| 4 | High | A2A Protocol + external orchestrator |
**Bottom line:** OpenClaw's built-in multi-agent (levels 1-3) requires only `~/.openclaw/config.yaml` changes—no additional infrastructure needed.

27
Tasks/All Tasks.md Normal file
View File

@@ -0,0 +1,27 @@
# All Tasks
## Home Assistant
- [ ] Entity cleanup (972 devices in spreadsheet)
- [ ] Fix hallway sensor battery (1%)
## Memory System
- [ ] Complete hierarchical restructure
- [ ] Optimize SQLite queries
## Proton Mail Bridge
- [ ] Cron integration for email actions
- [ ] Email notification system
- [ ] Email-to-Discord forwarding
## Mission Control Dashboard
- [ ] Fix calendar date range bug
- [ ] Fix calendar agent (uses cron not ha_calendar)
## Completed Tasks
- [x] Voice bot operational
- [x] Proton Mail Bridge connected
- [x] Mission Control dashboard live
- [x] Obsidian vault setup
---
Last Updated: 2026-02-22

View File

@@ -0,0 +1,18 @@
# Weekly Review - Week of {{date:YYYY-MM-DD}}
## What Got Done
### Projects
- [ ]
### Improvements
- [ ]
## What Didn't Happen
## Notes & Learnings
## Next Week Focus
---
_Template created: 2026-02-22_

View File

@@ -0,0 +1,22 @@
# Task: Make Amazon order today!
**Created:** 2026-02-24
**Source:** #work-assistant
**Status:** TODO
---
## Priority Items
- [ ] eGPU dock for Zac
## Other Items
*(Add other items here)*
## Notes
*(Links, prices, etc.)*
---
*Created from Discord message: 1475864688150581410*

View File

@@ -0,0 +1,22 @@
# Task: Setup Asset Keeper for Sean
**Created:** 2026-02-24
**Source:** #work-assistant
**Status:** TODO
---
## Description
Setup Asset Keeper for Sean
## Notes
*(Add details here: requirements, links, blockers, etc.)*
## Related
-
---
*Created from Discord message: 1475862240669208739*

View File

@@ -0,0 +1,22 @@
# Task: Sugar truck card for Early pina truck #62
**Created:** 2026-02-24
**Source:** #work-assistant
**Status:** TODO
---
## Description
Sugar truck card for Early pina truck #62
## Notes
*(Add details here: requirements, links, blockers, etc.)*
## Related
-
---
*Created from Discord message: 1475863503821869179*

View File

@@ -0,0 +1,22 @@
# Task Tracker
*Work tasks extracted from #work-assistant channel*
---
## Active Tasks
| Task | Source | Date Added | Status |
|------|--------|------------|--------|
| Setup Asset Keeper for Sean | #work-assistant | 2026-02-24 | TODO |
## Completed Recently
- [x] Sugar truck card for Early pina truck #62*completed 2026-02-24*
- [x] Make Amazon order today! — *completed 2026-02-24*
---
**Add tasks by:**
- Mentioning "task: [description]" in #work-assistant
- Or tell me directly and I'll log it here

6
WORK/Work Canvas.canvas Normal file
View File

@@ -0,0 +1,6 @@
{
"nodes":[
{"id":"d46af6a894f8625f","x":-460,"y":-740,"width":500,"height":680,"type":"file","file":"WORK/Tasks/Task Tracker.md"}
],
"edges":[]
}