get-claudia 1.60.1 → 1.61.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +30 -0
- package/bin/index.js +90 -12
- package/bin/shell-init.js +147 -0
- package/package.json +1 -1
- package/template-v2/.claude/manifest.json +3 -5
- package/template-v2/CLAUDE.md +22 -1
- package/template-v2/.claude/hooks/__pycache__/post-tool-capture.cpython-313.pyc +0 -0
- package/template-v2/.claude/hooks/__pycache__/session-health-check.cpython-313.pyc +0 -0
- package/template-v2/.claude/hooks/__pycache__/user-prompt-capture.cpython-313.pyc +0 -0
- package/template-v2/.claude/skills/close-the-loop/SKILL.md +0 -139
- package/template-v2/.claude/skills/manuscript-fact-check/SKILL.md +0 -111
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,36 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to Claudia will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## 1.61.1 (2026-05-23)
|
|
6
|
+
|
|
7
|
+
### `claudia` command works from anywhere, and repairs itself
|
|
8
|
+
|
|
9
|
+
A follow-up to 1.61.0's shell command. The installer was storing a relative path, so `claudia` only worked from the install's parent directory. This release fixes the stored path and makes the command self-healing, so the error cannot recur.
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- **`claudia` command failing with "Claudia home directory not found: claudia".** The installer wrote a *relative* path (`claudia`) into `~/.claudia/claudia-home` instead of the absolute install path, because the shell-helper step was handed `targetDir` (relative) rather than the resolved `targetPath`. The `claudia` command then only worked when run from the install's parent directory and failed everywhere else. The installer now always stores the absolute path (via `path.resolve`, which also fixes a separate bug where passing an absolute install path as an argument produced a doubled path like `/home/you/home/you/claudia`).
|
|
14
|
+
- **`claudia` command now self-heals a bad `claudia-home`.** The shell function resolves a relative stored value against `$HOME` (never the current directory), falls back to the default `~/claudia` install when the stored path is missing or stale, and rewrites `claudia-home` with the corrected absolute path so the error cannot recur. Existing installs that already have a bad value are repaired the first time `claudia` runs after upgrading.
|
|
15
|
+
- **`--skip-memory` installs now get the `claudia` command too.** Previously the shell-helper step was skipped entirely on the `--skip-memory` path, leaving those users with no `claudia`/`update-claudia` command. The shell helper is independent of the memory system and now installs on every path.
|
|
16
|
+
|
|
17
|
+
## 1.61.0 (2026-05-22)
|
|
18
|
+
|
|
19
|
+
### Launch from anywhere, upgrade from anywhere
|
|
20
|
+
|
|
21
|
+
This release adds a `claudia` shell command (and `update-claudia`) so you no longer have to remember where you installed Claudia or `cd` there before launching or upgrading. New installs and upgrades wire the helper into `~/.zshrc` and `~/.bashrc` automatically. After upgrading once via `npx get-claudia .`, future upgrades are just `update-claudia` from any directory.
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
|
|
25
|
+
- **`claudia` shell command for launching from anywhere.** New installs (and upgrades) get a `claudia` shell function written to `~/.claudia/shell-init.sh` and sourced from `~/.zshrc` and `~/.bashrc`. From any directory, `claudia` cd's to your install folder and launches `claude`. All `claude` flags pass through (`claudia --resume`, `claudia -c "morning brief"`, etc). The folder path is stored in `~/.claudia/claudia-home`; edit it if you move your install. The installer is idempotent: re-running won't double-add to your rc files. The shell function is a smart router that delegates known npm-CLI subcommands (`setup`, `system-health`, `google`, `doctor`) back to the `claudia` binary when it's on PATH, so existing workflows keep working.
|
|
26
|
+
- **`claudia yolo` subcommand.** Sugar for `claude --dangerously-skip-permissions` (cd's first, then passes through any additional flags). Same routing logic — `claudia yolo --resume` works.
|
|
27
|
+
- **`update-claudia` command (also `claudia update`).** Runs `npx get-claudia <your-install-path>` from any directory by reading the stored path from `~/.claudia/claudia-home`. No more "wait, where did I install Claudia?" before upgrading. Both forms are aliases for the same logic.
|
|
28
|
+
- **`~/.claudia/claudia-home`.** Single-line file with the absolute path of the user's Claudia install. Written by the installer; read by the shell function. Move your install? Edit this file.
|
|
29
|
+
|
|
30
|
+
### Fixed
|
|
31
|
+
|
|
32
|
+
- **ASCII greeting logo: row 1 (hair top) realigned over face** (in `template-v2/CLAUDE.md`). The top hair row was indented 6 leading spaces while the face row below it starts at column 0, so the hair appeared shifted ~4 characters to the right. Now sits correctly above the face. Existing installs see the fix on next upgrade.
|
|
33
|
+
- **Installer no longer treats flag-looking arguments as install targets.** Previously, `npx get-claudia --help` (or any unrecognized `--flag`) was interpreted as the install path and would create a `./--help/` directory with templates copied into it. Now: `--help`/`-h` prints a proper usage message and exits, `--version`/`-V` prints the version, and any other leading-dash argument prints `Error: unrecognized argument: <flag>` and exits 1 without touching the filesystem.
|
|
34
|
+
|
|
5
35
|
## 1.60.1 (2026-05-22)
|
|
6
36
|
|
|
7
37
|
### Two bug fixes from the fixing-phase pass
|
package/bin/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
import { existsSync, mkdirSync, cpSync, readdirSync, readFileSync, writeFileSync, statSync, renameSync, unlinkSync, copyFileSync } from 'fs';
|
|
4
|
-
import { join, dirname } from 'path';
|
|
4
|
+
import { join, dirname, resolve } from 'path';
|
|
5
5
|
import { fileURLToPath } from 'url';
|
|
6
6
|
import { spawn, execFileSync } from 'child_process';
|
|
7
7
|
import { homedir } from 'os';
|
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
resolveBakPath,
|
|
15
15
|
applyResolution,
|
|
16
16
|
} from './manifest-lib.js';
|
|
17
|
+
import { writeShellInit, appendShellRC } from './shell-init.js';
|
|
17
18
|
|
|
18
19
|
const __filename = fileURLToPath(import.meta.url);
|
|
19
20
|
const __dirname = dirname(__filename);
|
|
@@ -63,6 +64,30 @@ function getVersion() {
|
|
|
63
64
|
}
|
|
64
65
|
}
|
|
65
66
|
|
|
67
|
+
function printUsage(version) {
|
|
68
|
+
console.log(`get-claudia v${version}
|
|
69
|
+
|
|
70
|
+
Usage:
|
|
71
|
+
npx get-claudia [target-dir] Install or upgrade Claudia (default: ./claudia)
|
|
72
|
+
npx get-claudia . Install or upgrade in the current directory
|
|
73
|
+
npx get-claudia upgrade Same as \`.\` (in-place upgrade)
|
|
74
|
+
npx get-claudia google Set up Google Workspace integration
|
|
75
|
+
|
|
76
|
+
Flags:
|
|
77
|
+
--skip-memory Skip memory daemon setup
|
|
78
|
+
--dev Dev mode (load daemon from local source)
|
|
79
|
+
--yes, -y Non-interactive (auto-confirm prompts)
|
|
80
|
+
--help, -h Show this help and exit
|
|
81
|
+
--version, -V Print version and exit
|
|
82
|
+
|
|
83
|
+
After install, from any directory:
|
|
84
|
+
claudia cd to your install folder, launch claude
|
|
85
|
+
claudia yolo Launch claude --dangerously-skip-permissions
|
|
86
|
+
claudia update Upgrade Claudia (no need to cd first)
|
|
87
|
+
update-claudia Alias for \`claudia update\`
|
|
88
|
+
`);
|
|
89
|
+
}
|
|
90
|
+
|
|
66
91
|
// Simple y/n prompt. Returns true if user confirms (or non-TTY / --yes flag).
|
|
67
92
|
function confirm(question) {
|
|
68
93
|
if (!isTTY || process.argv.includes('--yes') || process.argv.includes('-y')) {
|
|
@@ -284,6 +309,7 @@ const STEPS = [
|
|
|
284
309
|
{ id: 'memory', label: 'Memory System' },
|
|
285
310
|
{ id: 'daemon', label: 'Memory Daemon' },
|
|
286
311
|
{ id: 'mcp', label: 'MCP Config' },
|
|
312
|
+
{ id: 'shell', label: 'Shell Helper' },
|
|
287
313
|
{ id: 'vault', label: 'Obsidian Vault' },
|
|
288
314
|
{ id: 'health', label: 'Health Check' },
|
|
289
315
|
];
|
|
@@ -737,6 +763,16 @@ async function checkForNewerVersion(currentVersion) {
|
|
|
737
763
|
async function main() {
|
|
738
764
|
const version = getVersion();
|
|
739
765
|
|
|
766
|
+
// Handle --help / --version BEFORE banner, update-check, or any I/O.
|
|
767
|
+
if (process.argv.includes('--help') || process.argv.includes('-h')) {
|
|
768
|
+
printUsage(version);
|
|
769
|
+
process.exit(0);
|
|
770
|
+
}
|
|
771
|
+
if (process.argv.includes('--version') || process.argv.includes('-V')) {
|
|
772
|
+
console.log(version);
|
|
773
|
+
process.exit(0);
|
|
774
|
+
}
|
|
775
|
+
|
|
740
776
|
// Self-update trampoline: re-exec with latest if we're stale
|
|
741
777
|
const newerVersion = await checkForNewerVersion(version);
|
|
742
778
|
if (newerVersion) {
|
|
@@ -773,6 +809,16 @@ async function main() {
|
|
|
773
809
|
const filteredArgs = args.filter(a => a !== '--no-memory' && a !== '--skip-memory' && a !== '--dev' && a !== '--yes' && a !== '-y');
|
|
774
810
|
const arg = filteredArgs[0];
|
|
775
811
|
|
|
812
|
+
// Reject flag-looking arguments early so they don't get used as install paths
|
|
813
|
+
// (e.g. `npx get-claudia --foo` would otherwise create a ./--foo/ directory).
|
|
814
|
+
// --help and --version are handled at the top of main(); anything else with a
|
|
815
|
+
// leading dash is a typo or unsupported flag.
|
|
816
|
+
if (typeof arg === 'string' && arg.startsWith('-')) {
|
|
817
|
+
console.error(`${colors.red}Error:${colors.reset} unrecognized argument: ${arg}`);
|
|
818
|
+
console.error(`Run ${colors.cyan}npx get-claudia --help${colors.reset} for usage.`);
|
|
819
|
+
process.exit(1);
|
|
820
|
+
}
|
|
821
|
+
|
|
776
822
|
// ─── Subcommand: get-claudia google ─────────────────────────────────────
|
|
777
823
|
if (arg === 'google') {
|
|
778
824
|
await runGoogleSetup();
|
|
@@ -782,7 +828,9 @@ async function main() {
|
|
|
782
828
|
// Support "." or "upgrade" for current directory
|
|
783
829
|
const isCurrentDir = arg === '.' || arg === 'upgrade';
|
|
784
830
|
const targetDir = isCurrentDir ? '.' : (arg || 'claudia');
|
|
785
|
-
|
|
831
|
+
// resolve() (not join) so an absolute arg is honored as-is and the result is
|
|
832
|
+
// always absolute (this value is what gets written into ~/.claudia/claudia-home).
|
|
833
|
+
const targetPath = isCurrentDir ? process.cwd() : resolve(process.cwd(), targetDir);
|
|
786
834
|
|
|
787
835
|
// Check if directory already exists with Claudia files
|
|
788
836
|
let isUpgrade = false;
|
|
@@ -923,11 +971,14 @@ async function main() {
|
|
|
923
971
|
}
|
|
924
972
|
renderer.render();
|
|
925
973
|
|
|
926
|
-
//
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
renderer
|
|
930
|
-
|
|
974
|
+
// The `claudia` shell command is independent of the memory system, so install
|
|
975
|
+
// it here too, otherwise --skip-memory users get no `claudia` command.
|
|
976
|
+
runShellStep(renderer, targetPath, () => {
|
|
977
|
+
runVaultStep(renderer, () => {
|
|
978
|
+
renderer.stopSpinner();
|
|
979
|
+
renderer.render();
|
|
980
|
+
showCompletion(targetDir, isCurrentDir, false, undefined, isUpgrade);
|
|
981
|
+
});
|
|
931
982
|
});
|
|
932
983
|
return;
|
|
933
984
|
}
|
|
@@ -1517,13 +1568,38 @@ async function main() {
|
|
|
1517
1568
|
|
|
1518
1569
|
renderer.stopSpinner();
|
|
1519
1570
|
|
|
1520
|
-
//
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1571
|
+
// Shell helper step, then vault, then completion.
|
|
1572
|
+
// Pass the absolute targetPath (not the relative targetDir): this value lands
|
|
1573
|
+
// in ~/.claudia/claudia-home, and a relative value there breaks `claudia` from
|
|
1574
|
+
// any directory other than the install's parent.
|
|
1575
|
+
runShellStep(renderer, targetPath, () => {
|
|
1576
|
+
runVaultStep(renderer, () => {
|
|
1577
|
+
renderer.render();
|
|
1578
|
+
showDbScanResults(dbScan);
|
|
1579
|
+
showCompletion(targetDir, isCurrentDir, memoryOk, rootCause, isUpgrade);
|
|
1580
|
+
});
|
|
1525
1581
|
});
|
|
1526
1582
|
|
|
1583
|
+
// ── Shell helper step ──
|
|
1584
|
+
|
|
1585
|
+
function runShellStep(renderer, targetPath, callback) {
|
|
1586
|
+
renderer.update('shell', 'active', 'installing claudia command...');
|
|
1587
|
+
try {
|
|
1588
|
+
writeShellInit(homedir(), targetPath);
|
|
1589
|
+
const rc = appendShellRC(homedir());
|
|
1590
|
+
if (rc.skipped) {
|
|
1591
|
+
renderer.update('shell', 'done', 'files written (Windows: source manually)');
|
|
1592
|
+
} else if (rc.added.length > 0) {
|
|
1593
|
+
renderer.update('shell', 'done', `added to ${rc.added.length} rc file(s)`);
|
|
1594
|
+
} else {
|
|
1595
|
+
renderer.update('shell', 'done', 'already installed');
|
|
1596
|
+
}
|
|
1597
|
+
} catch (err) {
|
|
1598
|
+
renderer.update('shell', 'warn', `${err.message}`);
|
|
1599
|
+
}
|
|
1600
|
+
callback();
|
|
1601
|
+
}
|
|
1602
|
+
|
|
1527
1603
|
// ── Vault step ──
|
|
1528
1604
|
|
|
1529
1605
|
function runVaultStep(renderer, callback) {
|
|
@@ -1651,6 +1727,7 @@ async function main() {
|
|
|
1651
1727
|
console.log('');
|
|
1652
1728
|
console.log(` ${colors.cyan}${launchCmd}${colors.reset}`);
|
|
1653
1729
|
console.log('');
|
|
1730
|
+
console.log(` ${colors.dim}Tip: open a new terminal and just type ${colors.reset}${colors.cyan}claudia${colors.reset}${colors.dim} from anywhere.${colors.reset}`);
|
|
1654
1731
|
console.log(` ${colors.dim}What's new: /morning-brief · /inbox-check · /feedback${colors.reset}`);
|
|
1655
1732
|
} else {
|
|
1656
1733
|
// Fresh install: build anticipation for the onboarding
|
|
@@ -1661,6 +1738,7 @@ async function main() {
|
|
|
1661
1738
|
}
|
|
1662
1739
|
console.log(` ${colors.cyan}claude${colors.reset}`);
|
|
1663
1740
|
console.log('');
|
|
1741
|
+
console.log(` ${colors.dim}Or open a new terminal and type ${colors.reset}${colors.cyan}claudia${colors.reset}${colors.dim} from anywhere.${colors.reset}`);
|
|
1664
1742
|
console.log(` ${colors.dim}She'll introduce herself and learn how you work.${colors.reset}`);
|
|
1665
1743
|
console.log(` ${colors.dim}Try: ${colors.reset}${colors.cyan}"Say hi"${colors.reset} ${colors.dim}·${colors.reset} ${colors.cyan}/morning-brief${colors.reset} ${colors.dim}·${colors.reset} ${colors.cyan}"Who do I know?"${colors.reset}`);
|
|
1666
1744
|
}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
// Shell helper installer for `claudia` command.
|
|
2
|
+
//
|
|
3
|
+
// Writes two files into ~/.claudia/:
|
|
4
|
+
// - claudia-home : single-line file with the absolute path to the user's
|
|
5
|
+
// Claudia install directory (where `claude` should launch).
|
|
6
|
+
// - shell-init.sh : defines the `claudia` shell function (and `claudia yolo`).
|
|
7
|
+
//
|
|
8
|
+
// Then idempotently appends a one-line source to ~/.zshrc and ~/.bashrc so the
|
|
9
|
+
// function is available in every new shell. The marker comment is used to detect
|
|
10
|
+
// existing installs and avoid double-adding.
|
|
11
|
+
//
|
|
12
|
+
// On Windows we only write the files; rc-file plumbing is a no-op since neither
|
|
13
|
+
// zsh nor bash is standard there. The function content is still useful for users
|
|
14
|
+
// running WSL or Git Bash who source it manually.
|
|
15
|
+
|
|
16
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
17
|
+
import { join } from 'path';
|
|
18
|
+
|
|
19
|
+
export const SHELL_INIT_MARKER = '# Claudia shell helpers';
|
|
20
|
+
|
|
21
|
+
const RC_SNIPPET = `
|
|
22
|
+
${SHELL_INIT_MARKER} (\`claudia\` from anywhere, \`claudia yolo\` skips permissions)
|
|
23
|
+
[ -f "$HOME/.claudia/shell-init.sh" ] && source "$HOME/.claudia/shell-init.sh"
|
|
24
|
+
`;
|
|
25
|
+
|
|
26
|
+
export const SHELL_INIT_CONTENT = `# Claudia shell helpers — sourced from your shell rc.
|
|
27
|
+
# Edit ~/.claudia/claudia-home to change which folder \`claudia\` launches from.
|
|
28
|
+
|
|
29
|
+
_claudia_home() {
|
|
30
|
+
local home_file="$HOME/.claudia/claudia-home"
|
|
31
|
+
local dir=""
|
|
32
|
+
[ -f "$home_file" ] && dir="$(cat "$home_file" 2>/dev/null)"
|
|
33
|
+
|
|
34
|
+
# A relative value (e.g. an older install that stored "claudia") is anchored to
|
|
35
|
+
# $HOME, never the current directory, so \`claudia\` works from anywhere.
|
|
36
|
+
case "$dir" in
|
|
37
|
+
/*) ;; # already absolute
|
|
38
|
+
"") ;; # empty -> handled by recovery below
|
|
39
|
+
*) dir="$HOME/$dir" ;; # relative -> resolve under $HOME
|
|
40
|
+
esac
|
|
41
|
+
|
|
42
|
+
# Recover from a missing or stale path by falling back to the default install
|
|
43
|
+
# location when it looks like a real Claudia install.
|
|
44
|
+
if [ -z "$dir" ] || [ ! -d "$dir" ]; then
|
|
45
|
+
if [ -d "$HOME/claudia/.claude" ] || [ -f "$HOME/claudia/CLAUDE.md" ]; then
|
|
46
|
+
dir="$HOME/claudia"
|
|
47
|
+
fi
|
|
48
|
+
fi
|
|
49
|
+
|
|
50
|
+
if [ -z "$dir" ] || [ ! -d "$dir" ]; then
|
|
51
|
+
echo "Claudia install not found. Run: npx get-claudia ." >&2
|
|
52
|
+
[ -f "$home_file" ] && echo "(or set the correct path in $home_file)" >&2
|
|
53
|
+
return 1
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
# Self-heal: persist the corrected absolute path so the error never recurs.
|
|
57
|
+
if [ "$(cat "$home_file" 2>/dev/null)" != "$dir" ]; then
|
|
58
|
+
mkdir -p "$HOME/.claudia" 2>/dev/null
|
|
59
|
+
printf '%s\\n' "$dir" > "$home_file" 2>/dev/null || true
|
|
60
|
+
fi
|
|
61
|
+
|
|
62
|
+
printf '%s' "$dir"
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
_claudia_cd() {
|
|
66
|
+
local dir
|
|
67
|
+
dir="$(_claudia_home)" || return 1
|
|
68
|
+
cd "$dir"
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
update-claudia() {
|
|
72
|
+
local dir
|
|
73
|
+
dir="$(_claudia_home)" || return 1
|
|
74
|
+
echo "Updating Claudia at $dir ..."
|
|
75
|
+
npx get-claudia "$dir"
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
claudia() {
|
|
79
|
+
case "$1" in
|
|
80
|
+
yolo)
|
|
81
|
+
shift
|
|
82
|
+
_claudia_cd && claude --dangerously-skip-permissions "$@"
|
|
83
|
+
;;
|
|
84
|
+
update)
|
|
85
|
+
shift
|
|
86
|
+
update-claudia "$@"
|
|
87
|
+
;;
|
|
88
|
+
setup|system-health|google|doctor|--version|-V|help|--help|-h)
|
|
89
|
+
# Pass known npm-CLI subcommands through to the binary (if installed).
|
|
90
|
+
command claudia "$@"
|
|
91
|
+
;;
|
|
92
|
+
*)
|
|
93
|
+
_claudia_cd && claude "$@"
|
|
94
|
+
;;
|
|
95
|
+
esac
|
|
96
|
+
}
|
|
97
|
+
`;
|
|
98
|
+
|
|
99
|
+
// Write ~/.claudia/claudia-home and ~/.claudia/shell-init.sh.
|
|
100
|
+
// Returns { homeFile, initFile } absolute paths for caller logging.
|
|
101
|
+
export function writeShellInit(homeDir, claudiaTargetDir) {
|
|
102
|
+
const claudiaConfigDir = join(homeDir, '.claudia');
|
|
103
|
+
mkdirSync(claudiaConfigDir, { recursive: true });
|
|
104
|
+
|
|
105
|
+
const homeFile = join(claudiaConfigDir, 'claudia-home');
|
|
106
|
+
const initFile = join(claudiaConfigDir, 'shell-init.sh');
|
|
107
|
+
|
|
108
|
+
writeFileSync(homeFile, `${claudiaTargetDir}\n`);
|
|
109
|
+
writeFileSync(initFile, SHELL_INIT_CONTENT);
|
|
110
|
+
|
|
111
|
+
return { homeFile, initFile };
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Idempotently append the source line to a single rc file. Creates the file if
|
|
115
|
+
// it doesn't exist (the source line is harmless on its own). Returns one of:
|
|
116
|
+
// 'added' - the source line was just appended
|
|
117
|
+
// 'unchanged' - marker already present, nothing written
|
|
118
|
+
function appendToRc(rcPath) {
|
|
119
|
+
let existing = '';
|
|
120
|
+
if (existsSync(rcPath)) {
|
|
121
|
+
existing = readFileSync(rcPath, 'utf8');
|
|
122
|
+
if (existing.includes(SHELL_INIT_MARKER)) {
|
|
123
|
+
return 'unchanged';
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// Ensure separation from prior content
|
|
127
|
+
const sep = existing.length === 0 || existing.endsWith('\n') ? '' : '\n';
|
|
128
|
+
writeFileSync(rcPath, existing + sep + RC_SNIPPET);
|
|
129
|
+
return 'added';
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Append to the user's zsh and bash rc files. Skips on Windows.
|
|
133
|
+
// Returns { added: [...], unchanged: [...] } of rc paths.
|
|
134
|
+
export function appendShellRC(homeDir, platform = process.platform) {
|
|
135
|
+
const result = { added: [], unchanged: [], skipped: false };
|
|
136
|
+
if (platform === 'win32') {
|
|
137
|
+
result.skipped = true;
|
|
138
|
+
return result;
|
|
139
|
+
}
|
|
140
|
+
const rcFiles = [join(homeDir, '.zshrc'), join(homeDir, '.bashrc')];
|
|
141
|
+
for (const rc of rcFiles) {
|
|
142
|
+
const status = appendToRc(rc);
|
|
143
|
+
if (status === 'added') result.added.push(rc);
|
|
144
|
+
else result.unchanged.push(rc);
|
|
145
|
+
}
|
|
146
|
+
return result;
|
|
147
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.
|
|
3
|
-
"generated": "2026-05-
|
|
2
|
+
"version": "1.61.1",
|
|
3
|
+
"generated": "2026-05-23T14:34:46.165Z",
|
|
4
4
|
"algorithm": "sha256",
|
|
5
5
|
"files": {
|
|
6
6
|
".claude/rules/claudia-principles.md": "939e9720421628e7f2e4c8dfbaa4aeb9c1e18e8c6a5379cd6b772a6835b812e5",
|
|
@@ -26,7 +26,6 @@
|
|
|
26
26
|
".claude/skills/capture-meeting/SKILL.md": "815e7587fcd925323c379a6c57e458b3484d034338c1237378641d142c126175",
|
|
27
27
|
".claude/skills/capture-meeting/evals/basic.yaml": "47c4eb1479aeda8067bc877cebfe8688c9b2bb3ce09297e42375cdf558f412e3",
|
|
28
28
|
".claude/skills/client-health/SKILL.md": "fed639e6f2c4433cab6a6b4b59776985492dda16be3bd1e843c3e94175936655",
|
|
29
|
-
".claude/skills/close-the-loop/SKILL.md": "835af2b0bde5583d1dffa07f261a1ec50e87f99eb39694c00cb7965ccce21942",
|
|
30
29
|
".claude/skills/commitment-detector.md": "66f9e919349d1880eb12636cec6f583be1b3fbe3b28f6180ec732d3c284af3b6",
|
|
31
30
|
".claude/skills/connector-discovery.md": "a6659f6ed8a182f968cdc9b4a342de9015d5579859310b77ff230ce73397cdc5",
|
|
32
31
|
".claude/skills/databases/SKILL.md": "b2ce4ae30aafa2487dabd7befd067976f0092fcef31dea7601e1683ceca0ef50",
|
|
@@ -46,7 +45,6 @@
|
|
|
46
45
|
".claude/skills/ingest-sources/SKILL.md": "938b93d299649db156ad19e9a7bd5d09e950f53bc2eaf8a85386f9fdbca350d0",
|
|
47
46
|
".claude/skills/ingest-sources/references/extraction-patterns.md": "28d6dc604c4a11eacfe4523e705ad430ba8fe26632bafcccaef656e9618e5aea",
|
|
48
47
|
".claude/skills/judgment-awareness.md": "0077129a87f91d295515108f3f9a68ca6874c6e38fc7f2a73a462704fa00ba2d",
|
|
49
|
-
".claude/skills/manuscript-fact-check/SKILL.md": "3dbdeea105740e42b1ff9d5e7245dd37418401b36655169b5a5ab2a4a8d6a383",
|
|
50
48
|
".claude/skills/map-connections/SKILL.md": "e8133d5e3de36e32e3858a1ee3918a577855e77ade022933097f87a0100cc9a3",
|
|
51
49
|
".claude/skills/meditate/SKILL.md": "1d814f0c52f4309708669139ba4b637bf05a228e2381950ee3851c6145e25cc7",
|
|
52
50
|
".claude/skills/meditate/evals/basic.yaml": "daba441b2fd9d1d4afddcff6eaa9673884198b1d0f85d9d06edbe0738012291a",
|
|
@@ -78,6 +76,6 @@
|
|
|
78
76
|
".claude/skills/wiki/SKILL.md": "e45e8db6fce1d774e36c93be27e5d9153b3ae474c48db478a4d7ff2b138e42e8",
|
|
79
77
|
".claude/skills/wiki/references/citations-and-contradictions.md": "1b16301020fdb5e4840035ca22425ebb03202694e88eb494105ff39e22e03263",
|
|
80
78
|
".claude/skills/wiki/references/page-template.md": "b19382ee9366b1e7f8c9f230881ac3c45982b59ffee0d82fe64b103862ba4745",
|
|
81
|
-
"CLAUDE.md": "
|
|
79
|
+
"CLAUDE.md": "b8244c281afd5cf46544f1f68b4130672d9f6e6bcbcbae7defca3a31c09d4c12"
|
|
82
80
|
}
|
|
83
81
|
}
|
package/template-v2/CLAUDE.md
CHANGED
|
@@ -104,7 +104,7 @@ Uses three shades to approximate the installer's coloring: `▓▓` = hair, `█
|
|
|
104
104
|
|
|
105
105
|
```
|
|
106
106
|
|
|
107
|
-
|
|
107
|
+
▓▓▓▓▓▓▓▓▒▒
|
|
108
108
|
▓▓██████████▒▒
|
|
109
109
|
▓▓██ ██ ██▓▓
|
|
110
110
|
██████████
|
|
@@ -304,6 +304,27 @@ I use proactive, contextual, and explicit skills. See `.claude/skills/README.md`
|
|
|
304
304
|
| My learnings about you | `context/learnings.md` |
|
|
305
305
|
| Project details | `projects/[project]/overview.md` |
|
|
306
306
|
| Filed documents | `~/.claudia/files/` (entity-routed) |
|
|
307
|
+
| Shell helper init | `~/.claudia/shell-init.sh` (sourced from `.zshrc`/`.bashrc`) |
|
|
308
|
+
| Install path pointer | `~/.claudia/claudia-home` (one line, absolute path) |
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
## Launching from the Terminal
|
|
313
|
+
|
|
314
|
+
Once installed, the `claudia` shell command works from any directory:
|
|
315
|
+
|
|
316
|
+
| You type | What happens |
|
|
317
|
+
|----------|--------------|
|
|
318
|
+
| `claudia` | cd to your Claudia folder, launch `claude` |
|
|
319
|
+
| `claudia yolo` | cd, launch `claude --dangerously-skip-permissions` |
|
|
320
|
+
| `claudia -c "morning brief"` | cd, launch `claude -c "morning brief"` (any `claude` flag passes through) |
|
|
321
|
+
| `claudia --resume` | cd, launch `claude --resume` |
|
|
322
|
+
| `claudia update` / `update-claudia` | runs `npx get-claudia <your-install-path>` from anywhere — no need to cd first |
|
|
323
|
+
| `claudia setup` / `claudia system-health` | passes through to the npm `claudia` CLI binary |
|
|
324
|
+
|
|
325
|
+
The folder location is stored in `~/.claudia/claudia-home`. Move your install? Edit that file. Re-run `npx get-claudia .` from a new location and it'll update automatically.
|
|
326
|
+
|
|
327
|
+
On Windows the shell function is written to `~/.claudia/shell-init.sh` but not auto-sourced. WSL or Git Bash users can `source ~/.claudia/shell-init.sh` manually (or add it to their rc file).
|
|
307
328
|
|
|
308
329
|
---
|
|
309
330
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: close-the-loop
|
|
3
|
-
description: Process a call transcript into the full post-call loop. Files the transcript, drafts a personalized Gmail follow-up in the user's voice, logs commitments, appends a touchpoint to the contact's people file, and archives the source. The Gmail draft is NEVER auto-sent. Use when the user shares a transcript and wants the *whole* post-call workflow run, says "close the loop on this call", "process and draft followup for [person]", "wrap up the call with [person]".
|
|
4
|
-
effort-level: medium
|
|
5
|
-
invocation: explicit
|
|
6
|
-
argument-hint: "[transcript or person name]"
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Close the Loop
|
|
10
|
-
|
|
11
|
-
The full post-call orchestration. One input (a transcript), four artifacts, one drafted external action that stays human.
|
|
12
|
-
|
|
13
|
-
This skill is a *chain* on top of two existing skills:
|
|
14
|
-
|
|
15
|
-
- It starts where `capture-meeting` ends: transcript filed, commitments extracted, participants identified.
|
|
16
|
-
- It extends with the work `follow-up-draft` does: a personalized email built in the user's voice.
|
|
17
|
-
- It adds the multi-write fanout: people file touchpoint, commitments ledger append, transcript archive.
|
|
18
|
-
|
|
19
|
-
If the user only wants the capture half (no email drafted), route to `capture-meeting`.
|
|
20
|
-
If the user only wants the email half (capture already happened), route to `follow-up-draft`.
|
|
21
|
-
If they want the whole loop, this is the canonical skill.
|
|
22
|
-
|
|
23
|
-
## When to fire
|
|
24
|
-
|
|
25
|
-
Trigger phrases:
|
|
26
|
-
|
|
27
|
-
- "Close the loop on this call"
|
|
28
|
-
- "Process my call with [person] and draft the followup"
|
|
29
|
-
- "Wrap up the call with [person]"
|
|
30
|
-
- "I just got off a call with [person] — full workflow"
|
|
31
|
-
- A transcript dropped into a designated `transcripts-inbox/` folder when the user has the close-the-loop pattern configured
|
|
32
|
-
|
|
33
|
-
Do NOT fire for:
|
|
34
|
-
|
|
35
|
-
- General document processing (use `file-document` or `ingest-sources`)
|
|
36
|
-
- Pre-meeting prep (use `meeting-prep`)
|
|
37
|
-
- Generic email response with no meeting context (use `draft-reply`)
|
|
38
|
-
|
|
39
|
-
## The flow
|
|
40
|
-
|
|
41
|
-
| Step | Action | Touches |
|
|
42
|
-
|------|--------|---------|
|
|
43
|
-
| 1 | File raw transcript via `memory_file` | source preservation |
|
|
44
|
-
| 2 | Extract decisions, commitments (yours and theirs), unresolved questions | in-memory reasoning |
|
|
45
|
-
| 3 | Read `people/{contact}.md` for relationship context | files |
|
|
46
|
-
| 4 | Read recent Gmail history with the contact (tone calibration) | Gmail connector |
|
|
47
|
-
| 5 | Read `voice-followup.md` if it exists | files |
|
|
48
|
-
| 6 | Draft personalized email in Gmail Drafts | Gmail connector (DRAFT only, never send) |
|
|
49
|
-
| 7 | Append dated touchpoint to `people/{contact}.md` | files |
|
|
50
|
-
| 8 | Append commitments to `commitments.md` with deadlines | files |
|
|
51
|
-
| 9 | Move transcript from `transcripts-inbox/` to `archive/transcripts/{contact}/` | files |
|
|
52
|
-
| 10 | Report back: "Draft ready in Gmail. Logged N commitments. Touchpoint added to [contact]'s file." | chat |
|
|
53
|
-
|
|
54
|
-
## The human gate (non-negotiable)
|
|
55
|
-
|
|
56
|
-
The email **never sends automatically**. It lands in Gmail Drafts. The user opens, reviews, edits if needed, and hits Send themselves.
|
|
57
|
-
|
|
58
|
-
This is not a limitation. It is the design. External communication is always Human-Approved. See `claudia-principles.md` § 1 (Safety First).
|
|
59
|
-
|
|
60
|
-
If a future version of this skill ever auto-sends, that is a breaking change that requires an explicit logged decision.
|
|
61
|
-
|
|
62
|
-
## Processing steps
|
|
63
|
-
|
|
64
|
-
### 1. File the source (MANDATORY)
|
|
65
|
-
|
|
66
|
-
Same as `capture-meeting`. Call `memory_file` with:
|
|
67
|
-
|
|
68
|
-
- `filename`: `YYYY-MM-DD-[contact]-[topic].md`
|
|
69
|
-
- `source_type`: `transcript`
|
|
70
|
-
- `summary`: brief one-line summary
|
|
71
|
-
- `about`: `[contact-slug]`
|
|
72
|
-
- `content`: the full raw transcript
|
|
73
|
-
|
|
74
|
-
### 2. Extract via Document Processor
|
|
75
|
-
|
|
76
|
-
Dispatch the Document Processor agent (Haiku) with `extraction_type: "memory_operations"`. The agent returns commitments, decisions, and key topics as a structured operations array. Review for accuracy before storing.
|
|
77
|
-
|
|
78
|
-
### 3. Read relationship and voice context
|
|
79
|
-
|
|
80
|
-
In parallel:
|
|
81
|
-
|
|
82
|
-
- `people/{contact}.md` (if exists; if not, plan a touchpoint entry that will create the file)
|
|
83
|
-
- Recent Gmail thread with the contact (last 5 to 10 messages)
|
|
84
|
-
- `voice-followup.md` from the user's playground or context folder
|
|
85
|
-
|
|
86
|
-
If `voice-followup.md` does not exist, fall back to a neutral professional tone and flag to the user: "I drafted in a neutral voice. Create `voice-followup.md` to personalize."
|
|
87
|
-
|
|
88
|
-
### 4. Draft the email
|
|
89
|
-
|
|
90
|
-
Follow the structure from `voice-followup.md`. Default pattern when no voice file:
|
|
91
|
-
|
|
92
|
-
- Opening: reference the call directly. No "I wanted to circle back."
|
|
93
|
-
- Body beat 1: what *they* said that mattered (one or two sentences).
|
|
94
|
-
- Body beat 2: what *you* committed to, with dates.
|
|
95
|
-
- Closing: one clear next step with a specific date or window.
|
|
96
|
-
- Signoff: "Best," then first name. No "Warm regards." No em dashes.
|
|
97
|
-
|
|
98
|
-
Create the draft via the Gmail connector. Do NOT call any send tool. The draft must remain in Drafts.
|
|
99
|
-
|
|
100
|
-
### 5. The multi-write fanout
|
|
101
|
-
|
|
102
|
-
In sequence:
|
|
103
|
-
|
|
104
|
-
- `memory_batch` with the reviewed memory operations from step 2.
|
|
105
|
-
- Append to `people/{contact}.md` under the History section. Newest first. Date-stamped. Format: `### YYYY-MM-DD. [Topic].`
|
|
106
|
-
- Append to `commitments.md` under "Active: things I owe" and "Active: things others owe me". Include source attribution: `*(source: call YYYY-MM-DD)*`.
|
|
107
|
-
- Move the transcript file from `transcripts-inbox/` to `archive/transcripts/{contact-slug}/`.
|
|
108
|
-
|
|
109
|
-
### 6. Report
|
|
110
|
-
|
|
111
|
-
```
|
|
112
|
-
Draft ready in Gmail. Open Drafts to review and send.
|
|
113
|
-
Logged {N} commitments to commitments.md ({M} mine, {N-M} theirs).
|
|
114
|
-
Touchpoint added to people/{contact}.md.
|
|
115
|
-
Transcript archived to archive/transcripts/{contact-slug}/.
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
If anything failed (Gmail connector expired, person file write blocked, etc.), report the failure clearly and offer the recovery path. Do not silently proceed.
|
|
119
|
-
|
|
120
|
-
## Failure modes
|
|
121
|
-
|
|
122
|
-
| Failure | Recovery |
|
|
123
|
-
|---------|----------|
|
|
124
|
-
| Transcript has missing speaker labels | List commitments under "Active: unattributed" rather than guessing who owes what |
|
|
125
|
-
| No `people/{contact}.md` file exists | Offer to create one with what was learned. Do not auto-create silently. |
|
|
126
|
-
| `voice-followup.md` missing | Use neutral tone, flag the gap to the user |
|
|
127
|
-
| Gmail connector expired or disconnected | Skip the draft step, log everything else, instruct the user to reconnect Gmail and re-run from step 4 |
|
|
128
|
-
| Multiple contacts in the transcript | Ask the user which contact "owns" the followup before drafting. Do not draft to multiple recipients. |
|
|
129
|
-
|
|
130
|
-
## See also
|
|
131
|
-
|
|
132
|
-
- `capture-meeting` — the upstream half. Use when no email is needed.
|
|
133
|
-
- `follow-up-draft` — the downstream half. Use when capture already happened.
|
|
134
|
-
- `meeting-prep` — the inverse. Use before a call, not after.
|
|
135
|
-
- `commitment-detector` — proactive sibling. Fires on commitments mentioned in conversation, separate from this skill which processes formal transcripts.
|
|
136
|
-
|
|
137
|
-
## AIAC context
|
|
138
|
-
|
|
139
|
-
This is the anchor workflow for the AIAC Cowork course (`~/Downloads/Claude-Cowork-Course/`). Module 3 of the course walks members through building this exact skill from the constituent capture-meeting and follow-up-draft pieces. The course's `voice-followup.md` template is the recommended companion file.
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: manuscript-fact-check
|
|
3
|
-
description: Audit every quote and source claim in a draft manuscript against primary sources before it ships to a publisher, editor, or peer reviewer. Produces a structured per-claim matrix (claim, source verbatim, status, action, correction), applies corrections to the draft, and flags any remaining items that need physical-copy verification. Use when the user says "fact-check this", "verify the sources", "audit this manuscript", "check every quote", "build a fact-check matrix", "verify against primary sources", or before any publisher / editor submission.
|
|
4
|
-
effort-level: high
|
|
5
|
-
invocation: explicit
|
|
6
|
-
argument-hint: "[path to draft or article]"
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Manuscript Fact-Check
|
|
10
|
-
|
|
11
|
-
The pass that runs before a draft ships. Every quote attributed to a source, every research claim, every statistic, verified against the primary source. Drift caught, corrections applied, audit trail preserved.
|
|
12
|
-
|
|
13
|
-
This skill exists because Claudia's most catastrophic failure mode in writing work is the subtly-rewritten "quote" that drifts from the original. Editors at credible publishers catch these instantly. The chapter that ships with a misquote loses the editor's trust on page one, and the relationship rarely recovers.
|
|
14
|
-
|
|
15
|
-
## When to fire
|
|
16
|
-
|
|
17
|
-
Trigger phrases:
|
|
18
|
-
|
|
19
|
-
- "Fact-check this manuscript / chapter / article / paper"
|
|
20
|
-
- "Verify the sources in this draft"
|
|
21
|
-
- "Audit every quote in [file]"
|
|
22
|
-
- "Check the citations before I send this"
|
|
23
|
-
- "Build a fact-check matrix for [draft]"
|
|
24
|
-
- "Make sure these quotes are accurate against the originals"
|
|
25
|
-
- "I'm sending this to [publisher]: verify everything first"
|
|
26
|
-
|
|
27
|
-
Do NOT fire for:
|
|
28
|
-
|
|
29
|
-
- Polishing prose, restructuring sections, or style edits (different skills)
|
|
30
|
-
- Verifying a single fact in conversation (just look it up directly)
|
|
31
|
-
- Drafts that contain no quoted sources or specific statistics
|
|
32
|
-
|
|
33
|
-
## The three-tier strategy
|
|
34
|
-
|
|
35
|
-
Before any verification begins, classify every claim by tier. The tier determines whether the claim is verified directly by Claudia or delegated to a research-scout agent.
|
|
36
|
-
|
|
37
|
-
| Tier | What it is | Why direct verification | Examples |
|
|
38
|
-
|------|------------|--------------------------|----------|
|
|
39
|
-
| 1 | Quotes the publisher *owns* or that an audience knows verbatim | The publisher's editor will compare letter-by-letter. Any drift kills credibility. Never delegate. | Hill quotes for Napoleon Hill publisher. Bible quotes for theological work. Constitution quotes for legal work. The author's own prior books. |
|
|
40
|
-
| 2 | Peer-reviewed research claims | Verifiable through DOI / PubMed / journal archive. Agents are good at this. | Neuroscience studies, meta-analyses, survey data, citation chains. |
|
|
41
|
-
| 2.5 | Biographical quotes with retelling drift | Verifiable but commonly distorted in derivative sources. Agents work but must compare to primary source, not Wikipedia. | McCartney "Yesterday" story, Kekulé benzene dream, Jobs interviews, founder origin stories. |
|
|
42
|
-
|
|
43
|
-
**Rule:** Tier 1 is verified by Claudia personally via `firecrawl scrape` + `grep` against the primary public-domain text. Tiers 2 and 2.5 are dispatched to parallel research-scout agents with strict "quote verbatim or flag UNVERIFIABLE" instructions.
|
|
44
|
-
|
|
45
|
-
## The flow
|
|
46
|
-
|
|
47
|
-
| Step | Action | Touches |
|
|
48
|
-
|------|--------|---------|
|
|
49
|
-
| 1 | Read the draft. Itemize every claim attributed to a source: direct quotes, paraphrased quotes, statistics, named studies, citations. | In-memory list. |
|
|
50
|
-
| 2 | Classify each claim by tier (1, 2, 2.5). | In-memory list. |
|
|
51
|
-
| 3 | For Tier 1 claims: identify the primary source (public-domain text, official transcript, the publisher's own catalog). Fetch directly with `firecrawl scrape`. Search the source with `grep` for each quoted phrase. Compare verbatim. | `sources/.firecrawl/` |
|
|
52
|
-
| 4 | For Tier 2 and 2.5 claims: dispatch parallel research-scout agents. One agent for academic / peer-reviewed claims, one for biographical / example claims. Provide each agent with the exact manuscript wording and require structured output: claim, source verbatim, match status, confidence, recommended action. | Agent dispatch. |
|
|
53
|
-
| 5 | Build the matrix. One row per claim. Columns: Claim (verbatim from manuscript), Source (verbatim from primary), Status (EXACT / PARAPHRASE / DRIFT / UNVERIFIABLE), Confidence (HIGH / MEDIUM / LOW), Action (KEEP / EDIT / FLAG), Notes. Save as `08-Fact-Check-Matrix.md` (or matching number) in the project bundle. | Writes file. |
|
|
54
|
-
| 6 | Apply corrections to the manuscript source. For each DRIFT or PARAPHRASE flagged for EDIT: change the manuscript text to match the verified source wording. For each citation correction: update author names, years, page references. | Edits manuscript source. |
|
|
55
|
-
| 7 | Re-render derived formats (PDF, DOCX, HTML) from the corrected source. | Re-runs the rendering pipeline. |
|
|
56
|
-
| 8 | Report. Summarize what was verified EXACT, what required EDIT (with before / after), what remains FLAGGED for physical-copy verification, and what is now ready for the publisher. Honest about anything that could not be verified. | Chat output. |
|
|
57
|
-
|
|
58
|
-
## Status codes
|
|
59
|
-
|
|
60
|
-
| Code | Meaning |
|
|
61
|
-
|------|---------|
|
|
62
|
-
| **EXACT** | Manuscript wording matches the primary source verbatim. KEEP. |
|
|
63
|
-
| **PARAPHRASE** | Manuscript captures the source meaning but rewords slightly. May be acceptable (with quotation marks removed) or require restoration of the verbatim quote. |
|
|
64
|
-
| **DRIFT** | Manuscript presents text as a verbatim quote but the wording differs from the source. Always EDIT. |
|
|
65
|
-
| **UNVERIFIABLE** | The source could not be reached or the quote could not be located within it. FLAG for the user to verify against a physical copy or alternate source. |
|
|
66
|
-
|
|
67
|
-
## Output format (the matrix)
|
|
68
|
-
|
|
69
|
-
Use this structure for each claim in `08-Fact-Check-Matrix.md`:
|
|
70
|
-
|
|
71
|
-
```markdown
|
|
72
|
-
### [Claim ID]. [Brief topic]
|
|
73
|
-
|
|
74
|
-
| Field | Content |
|
|
75
|
-
|-------|---------|
|
|
76
|
-
| **Original claim** | "[verbatim from manuscript]" |
|
|
77
|
-
| **Source (verbatim)** | "[verbatim from primary source]" |
|
|
78
|
-
| **Status** | EXACT \| PARAPHRASE \| DRIFT \| UNVERIFIABLE |
|
|
79
|
-
| **Action** | KEEP \| EDIT \| FLAG |
|
|
80
|
-
| **Where it now stands** | "[corrected manuscript text, if action was EDIT]" |
|
|
81
|
-
| **Source citation** | [author, title, publisher, year, page] |
|
|
82
|
-
| **Notes** | [anything else the editor should know] |
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
End the matrix with a summary table and an "Outstanding items requiring action before submission" section that names every UNVERIFIABLE or FLAG claim and what the user must do to resolve it.
|
|
86
|
-
|
|
87
|
-
## Why this skill matters
|
|
88
|
-
|
|
89
|
-
For a publisher-facing submission, the editor's first read is a credibility test. A single fabricated quote, a wrong author initial, a confused year, a phrase attributed to one source when it comes from another: any of these tells the editor the rest of the manuscript cannot be trusted. The matrix prevents that. It also gives the editor a verification artifact: when they ask "where did this quote come from?", the answer is in the matrix, with the primary source cited and the verbatim text shown.
|
|
90
|
-
|
|
91
|
-
For the writer, the matrix is the audit trail that turns "I think the quote is right" into "I can prove the quote is right."
|
|
92
|
-
|
|
93
|
-
## Known failure modes
|
|
94
|
-
|
|
95
|
-
| Failure | What goes wrong | How to handle |
|
|
96
|
-
|---------|----------------|---------------|
|
|
97
|
-
| Upstream research agents fabricate citations | Agents have produced false author initials, false dates, false page numbers when their search returns weak hits | Always have the agent quote the source verbatim, not paraphrase it. If the verbatim text cannot be produced, status is UNVERIFIABLE, not EXACT. |
|
|
98
|
-
| The primary source is paywalled or behind anti-bot | WebFetch returns 403; agent reports the page as unverifiable | Try `firecrawl scrape` first. If still blocked, dispatch a different agent for that specific source. If still no, flag UNVERIFIABLE and ask the user to verify against a physical copy. |
|
|
99
|
-
| The quote is widely attributed but the page reference is wrong | The quote is real, the page number is folklore | Mark the quote EXACT and the page number FLAG. The author must verify page references against a physical copy before final submission. |
|
|
100
|
-
| The quote is "from" a famous person but only sourced to a later retelling | Common with Tesla, Edison, Twain, Einstein quotes | Skip the quote if the primary source is the person's own late autobiography or a posthumous secondary citation. Note exclusion in the editor's notes. |
|
|
101
|
-
|
|
102
|
-
## AIAC context
|
|
103
|
-
|
|
104
|
-
The reference implementation of this skill is the Napoleon Hill "Sixth Sense" chapter fact-check at `~/Downloads/Napoleon-Hill-Sixth-Sense/08-Fact-Check-Matrix.md`. 26 claims audited, ~14 EDITs applied, two FLAGs preserved for physical-copy verification. The chapter was meaningfully strengthened by the pass: at least three errors that would have been caught by a serious editor were caught here first.
|
|
105
|
-
|
|
106
|
-
## See also
|
|
107
|
-
|
|
108
|
-
- `auto-research` for iterative draft improvement (different concept: this audits sources, that iterates on prose quality)
|
|
109
|
-
- `summarize-doc` for executive summaries (different concept: this verifies an existing draft, that produces a new artifact)
|
|
110
|
-
- `ingest-sources` for multi-document processing (related concept: that processes raw inputs, this audits already-cited outputs)
|
|
111
|
-
- `capture-meeting` for meeting transcript processing (related concept for transcript-source claims, but different output)
|