Add vault content - WORK folder, Tasks, Projects, Summaries, Templates
This commit is contained in:
1
.obsidian/app.json
vendored
Normal file
1
.obsidian/app.json
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
1
.obsidian/appearance.json
vendored
Normal file
1
.obsidian/appearance.json
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
3
.obsidian/community-plugins.json
vendored
Normal file
3
.obsidian/community-plugins.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
[
|
||||
"obsidian-git"
|
||||
]
|
||||
33
.obsidian/core-plugins.json
vendored
Normal file
33
.obsidian/core-plugins.json
vendored
Normal 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
22
.obsidian/graph.json
vendored
Normal 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
452
.obsidian/plugins/obsidian-git/main.js
vendored
Normal file
File diff suppressed because one or more lines are too long
10
.obsidian/plugins/obsidian-git/manifest.json
vendored
Normal file
10
.obsidian/plugins/obsidian-git/manifest.json
vendored
Normal 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"
|
||||
}
|
||||
23
.obsidian/plugins/obsidian-git/obsidian_askpass.sh
vendored
Normal file
23
.obsidian/plugins/obsidian-git/obsidian_askpass.sh
vendored
Normal 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"
|
||||
705
.obsidian/plugins/obsidian-git/styles.css
vendored
Normal file
705
.obsidian/plugins/obsidian-git/styles.css
vendored
Normal 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;
|
||||
}
|
||||
140
Home Assistant/Automations.md
Normal file
140
Home Assistant/Automations.md
Normal 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*
|
||||
209
OpenClaw/Dataview Query Examples.md
Normal file
209
OpenClaw/Dataview Query Examples.md
Normal 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!*
|
||||
93
OpenClaw/Discord Config.md
Normal file
93
OpenClaw/Discord Config.md
Normal 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
91
OpenClaw/MEMORY Index.md
Normal 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
188
OpenClaw/Memory System.md
Normal 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*
|
||||
10
OpenClaw/Sync History 2026-02-24.md
Normal file
10
OpenClaw/Sync History 2026-02-24.md
Normal 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
|
||||
|
||||
---
|
||||
98
OpenClaw/System Overview.md
Normal file
98
OpenClaw/System Overview.md
Normal 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
196
OpenClaw/Tools Reference.md
Normal 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.
|
||||
86
Projects/Coding Workflow.md
Normal file
86
Projects/Coding Workflow.md
Normal 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*
|
||||
90
Projects/Discord Voice Bot.md
Normal file
90
Projects/Discord Voice Bot.md
Normal 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
100
Projects/Home Assistant.md
Normal 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
144
Projects/Memory System.md
Normal 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)
|
||||
261
Projects/Memory System/Memory System Architecture.md
Normal file
261
Projects/Memory System/Memory System Architecture.md
Normal 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*
|
||||
40
Projects/Mission Control Dashboard (Python).md
Normal file
40
Projects/Mission Control Dashboard (Python).md
Normal 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_
|
||||
203
Projects/Multi-User Agent Architecture.md
Normal file
203
Projects/Multi-User Agent Architecture.md
Normal 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*
|
||||
70
Projects/Projects-Index.md
Normal file
70
Projects/Projects-Index.md
Normal 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
|
||||
84
Projects/Proton Mail Bridge.md
Normal file
84
Projects/Proton Mail Bridge.md
Normal 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*
|
||||
148
Summaries/7 Best Apify Alternatives 2026.md
Normal file
148
Summaries/7 Best Apify Alternatives 2026.md
Normal 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
|
||||
90
Summaries/Anthropic - Distillation Attacks.md
Normal file
90
Summaries/Anthropic - Distillation Attacks.md
Normal 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*
|
||||
66
Summaries/Home Assistant - 4 Automation Mistakes.md
Normal file
66
Summaries/Home Assistant - 4 Automation Mistakes.md
Normal 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.
|
||||
88
Summaries/Homelab MCP Server.md
Normal file
88
Summaries/Homelab MCP Server.md
Normal 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*
|
||||
106
Summaries/Khoj AI - Self-Hostable Research Tool.md
Normal file
106
Summaries/Khoj AI - Self-Hostable Research Tool.md
Normal 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.
|
||||
@@ -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.
|
||||
146
Summaries/Obsidian Dataview.md
Normal file
146
Summaries/Obsidian Dataview.md
Normal 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*
|
||||
105
Summaries/OpenClaw Multi-Agent Workflows - 4 Levels Explained.md
Normal file
105
Summaries/OpenClaw Multi-Agent Workflows - 4 Levels Explained.md
Normal 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
27
Tasks/All Tasks.md
Normal 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
|
||||
18
Templates/Weekly Review.md
Normal file
18
Templates/Weekly Review.md
Normal 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_
|
||||
22
WORK/Tasks/2026-02-24 - Make Amazon order today.md
Normal file
22
WORK/Tasks/2026-02-24 - Make Amazon order today.md
Normal 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*
|
||||
22
WORK/Tasks/2026-02-24 - Setup Asset Keeper for Sean.md
Normal file
22
WORK/Tasks/2026-02-24 - Setup Asset Keeper for Sean.md
Normal 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*
|
||||
@@ -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*
|
||||
22
WORK/Tasks/Task Tracker.md
Normal file
22
WORK/Tasks/Task Tracker.md
Normal 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
6
WORK/Work Canvas.canvas
Normal 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":[]
|
||||
}
|
||||
Reference in New Issue
Block a user