# pi-config

Personal Pi configuration for **sebasfavaron**.

## Included
- `AGENTS.md`
- `MIGRATION.md`
- `settings.json`
- `extensions/subagent/`
- `extensions/questionnaire.ts`
- `extensions/session-memory-prompt.ts`
- `scripts/apply-pi-shutdown-hook-patch.py`
- `scripts/session-memory-analyzer.py`
- `scripts/session-memory-dispatcher.py`
- `scripts/install-session-memory-dispatcher.service`
- `bin/pi-loop` repeated multi-session task runner
- `docs/pi-loop.md` usage guide for repeated multi-session loops
- `bin/tmp-cleanup` / `/tmp` cleanup tool
- `scripts/install-tmp-cleanup-cron.sh` cron installer for /tmp cleanup
- `bin/laptop-*` remote laptop helper scripts
- `bin/laptop-write` atomic remote file writer for laptop files

## Goal

Make this repo both the source of truth **and the live Pi config directory**.

## Layout

Canonical layout lives in:
- `docs/system-layout.md`

Loose cross-session backlog lives in:
- `docs/BACKLOG.md`

Current roots:
- control plane: `/home/sebas/pi-config`
- durable memory: `/home/sebas/agents-database`
- runtime: `/home/sebas/runtime`
- work: `/home/sebas/work`
- outputs: `/home/sebas/outputs`
- archive: `/home/sebas/archive`

## Notes

- Direct, compressed, low-noise communication is the default style.
- Session close hook can still queue memory analysis before switch/fork/exit.
- Session memory uses an external local dispatcher on `127.0.0.1:17882`; the hook captures session identity/context and enqueues metadata under `sessions/session-memory-jobs/`.
- `scripts/session-memory-sweeper.py` is the reliable catch-up path for Telegram-heavy periods: it scans recent session files, skips obvious loop noise, and analyzes anything not yet processed.
- The analyzer first tries cheap `pi` model analysis (`gpt-5.4-mini`, thinking off); if that path is unavailable, it falls back to a deterministic episode-summary candidate instead of failing silently.
- The canonical memory pipeline lives in `agents-database` (`MemoryService` / `MemoryEngine`). Repo-local helpers should only capture session context and hand off to that service.
- For unattended `pi` scripts and jobs, prefer explicit provider/model selection. Current safe default on this machine: `--provider openai-codex --model gpt-5.4-mini`.
- Use `./scripts/install-session-memory-dispatcher.service` for the dispatcher and `./scripts/session-memory-sweeper.{service,timer}` for periodic catch-up.
- The old `session_before_shutdown` runtime patch remains as fallback only if you choose to keep it enabled.
- Reapply the runtime patch after Pi upgrades only if you still use that fallback: `./scripts/apply-pi-shutdown-hook-patch.py`
- **Pending validation:** confirm the default communication mode auto-loads in every new Pi session.
- Top-level `/tmp` files older than 3 days are cleaned every 3 days via `bin/tmp-cleanup`.
- Install the cleanup cron with `scripts/install-tmp-cleanup-cron.sh`.
- Remote laptop workflow can be driven from this Pi using `bin/laptop-run`, `bin/laptop-read`, `bin/laptop-write`, `bin/laptop-rsync`, `bin/laptop-mount`, and `bin/laptop-umount` against host `sebastians-macbook-pro-2`.

## Local server routes on `ballbox-first`

Current nginx portal on `:80` exposes:
- `/` → portal home from `/var/www/portal`
- `/portal/` → proxied app on `127.0.0.1:18789`
- `/calistenia/` → static files from `/home/sebas/clawd/web/calistenia/`
- `/files/` → copyparty file server on `127.0.0.1:3923`
- `/mp3-share/` → static directory listing from `/home/sebas/downloads/mp3-share/`
- `/gastos-europa/` → app de revisión/clasificación de gastos del viaje Europa en `127.0.0.1:18896`

Implementation notes:
- nginx route lives in `/etc/nginx/sites-available/kiosk`
- portal home link lives in `/var/www/portal/index.html`
- nginx access to `/home/sebas/downloads/mp3-share/` depends on ACLs that allow user `www-data` to traverse `/home/sebas` and read that subtree
- `downloads/` is the shared/download-served tree; `Downloads/` is the desktop/user inbox
- `gastos-europa` project doc lives at `/home/sebas/work/gastos-europa/README.md`

## Remote laptop helpers

Default host is `sebastians-macbook-pro-2`. Override with `LAPTOP_HOST` if needed.

Examples:
- `bin/laptop-run 'uname -a'`
- `bin/laptop-read /Users/sebas/.zshrc | sed -n '1,40p'`
- `bin/laptop-rsync sebastians-macbook-pro-2:/Users/sebas/Downloads/file ./`
- `bin/laptop-rsync ./localfile sebastians-macbook-pro-2:/Users/sebas/Downloads/`
- `printf 'new contents\n' | bin/laptop-write /Users/sebas/Downloads/test.txt`
- `bin/laptop-write --from ./localfile /Users/sebas/Downloads/test.txt`
- `bin/laptop-mount /Users/sebas/Downloads downloads` then work at `~/mnt/laptop/downloads`

## Batch `pi` helpers

Two first-class helpers:

- `bin/pi-loop`: run the same task through multiple sequential `pi` sessions so later passes can reinforce and refine earlier work.
- `bin/pi-job-*`: run one detached inspectable batch job with status/check/wait/stop flow.

Decision rule:

- multiple passes on the same prompt -> `pi-loop`
- one detached batch run -> `pi-job-*`

Unattended helpers should avoid implicit model/provider resolution.

- `bin/pi-loop` defaults to `--provider openai-codex --model gpt-5.4-mini --thinking low` and still lets you override via flags.
- `bin/pi-job-runner` forces `--provider openai-codex --model gpt-5.4-mini --thinking low` by default.
- `pi-job-*` overrides per process with env vars: `PI_PROVIDER`, `PI_MODEL`, `PI_THINKING`.

Start here:
- `docs/pi-loop.md`

Examples:
- `bin/pi-loop --count 3 --cwd /tmp/test --prompt "Touch one file"`
- `PI_MODEL=gpt-5.4 bin/pi-job-start --cwd /path/repo --prompt "Do the task"`

## /tmp cleanup

Top-level `/tmp` files older than 3 days are cleaned every 3 days.

- `bin/tmp-cleanup [--dry-run]`
- `scripts/install-tmp-cleanup-cron.sh`


README.md:9:- `extensions/subagent/`
README.md:10:- `extensions/questionnaire.ts`
README.md:11:- `extensions/session-memory-prompt.ts`
docs/service-manifest.md:84:  - `extensions/_shared/tool-usage.ts`
extensions/subagent/index.ts:24:import { appendToolUsageEvent } from "../_shared/tool-usage";
docs/bootstrap.md:77:- `extensions/`
extensions/humand-mode.ts.disabled:17:} from "./humand-shared.ts";
extensions/questionnaire.ts:11:import { appendToolUsageEvent } from "./_shared/tool-usage";
docs/pi-loop.md:20:pi --provider openai-codex --model gpt-5.4-mini --thinking low --no-extensions -p ...
extensions/session-memory-dispatcher.ts:3:import { appendToolUsageEvent } from "./_shared/tool-usage";
extensions/humand-mode.ts:17:} from "./humand-shared.ts";
extensions/session-switch/index.ts:2:import { appendToolUsageEvent } from "../_shared/tool-usage";
extensions/session-switch/relaunch.ts:7:import { getPiSpawnCommand, type PiSpawnDeps } from "../_shared/pi-spawn.ts";


**Fixing shared helper loading**

I need to fix how the shared helper is organized, specifically by moving it into a _shared directory, and only loading extensions explicitly listed in the settings. I think there's also a need to auto-load top-level TypeScript files in the extensions directory. Wait, I see that the error mentions it failed to load the shared helper, likely due to how the extension directories are set up. I need to confirm if `settings.packages` includes the extensions directory or if it’s missing.

**Investigating extension loader errors**

I’m seeing that the error path for the shared file suggests the extension loader might treat imported files as separate extensions. It seems there could be some automatic discovery of context files. When I ran the pi after copying, the settings didn’t include humand-mode.ts but still tried to load humand-shared.ts. I think just having the file present may trigger loading, which causes issues.

I should relocate the helper into the _shared directory to see if that fixes the problem, while also checking other helper directories for similar index.ts files to avoid conflicts.

write

import { execFileSync } from "node:child_process";
import fs from "node:fs";
import path from "node:path";

export const HUMAND_ROOT = "/home/sebas/work/humand";
export const HUMAND_PROMPT = "/home/sebas/pi-config/humand/HUMAND.md";
export const HUMAND_SETUP = "/home/sebas/pi-config/humand/workflow-setup.sh";
export const HUMAND_ORGS = ["HumandDev", "sfavaron-hu"];

export type HumandRepoMeta = {
	github?: string;
	platform?: string;
	role?: string;
	dependency_order?: number;
	depends_on?: string[];
	base_branch?: string;
	pr_base?: string;
	package_manager?: string;
	lint_cmd?: string | null;
	type_check_cmd?: string | null;
	test_cmd?: string | null;
	has_translations?: boolean;
};

export function isInsideHumandTree(cwd: string): boolean {
	const resolved = path.resolve(cwd);
	return resolved === HUMAND_ROOT || resolved.startsWith(`${HUMAND_ROOT}/`);
}

export function getOriginUrl(cwd: string): string {
	try {
		return execFileSync("git", ["remote", "get-url", "origin"], {
			cwd,
			encoding: "utf8",
			stdio: ["ignore", "pipe", "ignore"],
		}).trim();
	} catch {
		return "";
	}
}

export function hasHumandRemote(cwd: string): boolean {
	const url = getOriginUrl(cwd);
	return HUMAND_ORGS.some((org) => url.includes(org));
}

export function detectHumandMode(cwd: string): boolean {
	return isInsideHumandTree(cwd) || hasHumandRemote(cwd);
}

export function getBootstrapEnv(cwd: string): Record<string, string> {
	try {
		const output = execFileSync("bash", [HUMAND_SETUP, cwd], {
			encoding: "utf8",
			stdio: ["ignore", "pipe", "ignore"],
		}).trim();
		const env: Record<string, string> = {};
		for (const line of output.split("\n")) {
			const idx = line.indexOf("=");
			if (idx <= 0) continue;
			const key = line.slice(0, idx);
			let value = line.slice(idx + 1);
			if ((value.startsWith("'") && value.endsWith("'")) || (value.startsWith('"') && value.endsWith('"'))) {
				value = value.slice(1, -1);
			}
			env[key] = value;
		}
		return env;
	} catch {
		return {};
	}
}

export function readJsonFile(filePath: string): any {
	return JSON.parse(fs.readFileSync(filePath, "utf8"));
}

export function loadHumandConfig(cwd: string) {
	const env = getBootstrapEnv(cwd);
	const reposFile = env.HUMAND_PI_REPOS_FILE || "";
	const teamsFile = env.HUMAND_PI_TEAMS_FILE || "";
	const localConfigFile = env.HUMAND_PI_LOCAL_CONFIG_FILE || "";
	const reposJson = reposFile && fs.existsSync(reposFile) ? readJsonFile(reposFile) : { repos: {} };
	const teamsJson = teamsFile && fs.existsSync(teamsFile) ? readJsonFile(teamsFile) : { teams: {} };
	const localConfigJson = localConfigFile && fs.existsSync(localConfigFile) ? readJsonFile(localConfigFile) : { repos: {} };
	return { env, reposFile, teamsFile, localConfigFile, reposJson, teamsJson, localConfigJson };
}

export function resolveLocalRepoPaths(localConfigFile: string, localConfigJson: any): Record<string, string> {
	const baseDir = localConfigFile ? path.dirname(localConfigFile) : process.env.HOME || "/home/sebas";
	const repos = localConfigJson?.repos || {};
	const resolved: Record<string, string> = {};
	for (const [key, rel] of Object.entries(repos)) {
		if (typeof rel !== "string" || !rel.trim()) continue;
		resolved[key] = path.resolve(baseDir, rel);
	}
	return resolved;
}

export function git(args: string[], cwd: string): string {
	return execFileSync("git", args, { cwd, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
}

export function gitSafe(args: string[], cwd: string): string {
	try {
		return git(args, cwd);
	} catch {
		return "";
	}
}

export function repoExistsAsGitRepo(repoPath: string): boolean {
	return fs.existsSync(repoPath) && fs.existsSync(path.join(repoPath, ".git"));
}

export function getHumandStatus(cwd: string) {
	const { env, reposFile, teamsFile, localConfigFile, reposJson, teamsJson, localConfigJson } = loadHumandConfig(cwd);
	const repoMeta = reposJson?.repos || {};
	const localRepos = localConfigJson?.repos || {};
	const resolvedLocalRepos = resolveLocalRepoPaths(localConfigFile, localConfigJson);
	const configuredRepoKeys = Object.keys(localRepos);
	const bundledRepoKeys = Object.keys(repoMeta);
	const missingRepoKeys = bundledRepoKeys.filter((key) => !(key in localRepos));
	const existingRepoKeys = configuredRepoKeys.filter((key) => repoExistsAsGitRepo(resolvedLocalRepos[key] || ""));

	return {
		active: detectHumandMode(cwd),
		cwd,
		origin: getOriginUrl(cwd),
		prompt: HUMAND_PROMPT,
		env,
		reposFile,
		teamsFile,
		localConfigFile,
		hasLocalConfig: Boolean(localConfigFile && fs.existsSync(localConfigFile)),
		bundledRepoCount: bundledRepoKeys.length,
		configuredRepoCount: configuredRepoKeys.length,
		existingRepoCount: existingRepoKeys.length,
		missingRepoKeys,
		teamCount: teamsJson?.teams ? Object.keys(teamsJson.teams).length : 0,
	};
}

export function extractTicketKey(branchName: string): string | null {
	const match = branchName.match(/\b([A-Z]{2,10}-\d+)\b/);
	return match ? match[1] : null;
}

export function sanitizeBranchDescription(text: string): string {
	return text
		.toLowerCase()
		.replace(/[^a-z0-9\s-]+/g, " ")
		.trim()
		.replace(/\s+/g, "-")
		.replace(/-+/g, "-") || "work";
}

export function buildBranchName(branchType: string, ticket: string | undefined, description: string): string {
	const cleanType = branchType || "feat";
	const cleanDesc = sanitizeBranchDescription(description);
	const ticketPart = ticket?.trim() ? ticket.trim() : "no-ticket";
	return `${cleanType}/${ticketPart}-${cleanDesc}`;
}

export function resolveFeatureFromCwd(cwd: string, branchOverride?: string) {
	const { localConfigFile, reposJson, localConfigJson } = loadHumandConfig(cwd);
	const localRepoPaths = resolveLocalRepoPaths(localConfigFile, localConfigJson);
	const repoMeta = (reposJson?.repos || {}) as Record<string, HumandRepoMeta>;
	const candidateBranch = branchOverride || gitSafe(["branch", "--show-current"], cwd);
	let branch = candidateBranch;

	if (!branch) {
		for (const [repoKey, repoPath] of Object.entries(localRepoPaths)) {
			if (!repoExistsAsGitRepo(repoPath)) continue;
			const current = gitSafe(["branch", "--show-current"], repoPath);
			const base = repoMeta[repoKey]?.base_branch || "main";
			if (current && current !== base) {
				branch = current;
				break;
			}
		}
	}

	if (!branch) {
		return { branch: "", ticket: null, repos: {}, repoOrder: [] as string[] };
	}

	const repos: Record<string, string> = {};
	for (const [repoKey, repoPath] of Object.entries(localRepoPaths)) {
		if (!repoExistsAsGitRepo(repoPath)) continue;
		const worktreesRaw = gitSafe(["worktree", "list", "--porcelain"], repoPath);
		if (worktreesRaw) {
			const chunks = worktreesRaw.split(/\n\n+/).map((chunk) => chunk.trim()).filter(Boolean);
			for (const chunk of chunks) {
				const lines = chunk.split("\n");
				const worktreePath = lines.find((l) => l.startsWith("worktree "))?.slice(9) || "";
				const headRef = lines.find((l) => l.startsWith("branch refs/heads/"))?.slice("branch refs/heads/".length) || "";
				if (worktreePath && headRef === branch) {
					repos[repoKey] = worktreePath;
					break;
				}
			}
		}
		if (repos[repoKey]) continue;
		const current = gitSafe(["branch", "--show-current"], repoPath);
		if (current === branch) repos[repoKey] = repoPath;
	}

	const repoOrder = Object.keys(repos).sort((a, b) => (repoMeta[a]?.dependency_order || 999) - (repoMeta[b]?.dependency_order || 999));
	return { branch, ticket: extractTicketKey(branch), repos, repoOrder };
}

export function createWorktreeForBranch(repoPath: string, branchName: string, baseBranch: string) {
	const branchDesc = branchName.includes("/") ? branchName.split("/")[1] : branchName;
	const parentDir = path.dirname(repoPath);
	const repoName = path.basename(repoPath);
	const worktreePath = path.join(parentDir, `${repoName}--${branchDesc}`);
	git(["fetch", "origin"], repoPath);
	git(["worktree", "add", worktreePath, `origin/${baseBranch}`, "-b", branchName], repoPath);
	return worktreePath;
}

export function checkoutInPlaceBranch(repoPath: string, branchName: string, baseBranch: string) {
	git(["fetch", "origin"], repoPath);
	git(["checkout", baseBranch], repoPath);
	git(["pull", "origin", baseBranch], repoPath);
	git(["checkout", "-b", branchName], repoPath);
	return repoPath;
}


Successfully wrote 8295 bytes to /home/sebas/pi-config/extensions/_shared/humand-shared.ts


Successfully replaced 1 block(s) in /home/sebas/pi-config/extensions/humand-mode.ts.

     ...
  13 	loadHumandConfig,
  14 	resolveFeatureFromCwd,
  15 	resolveLocalRepoPaths,
  16 	sanitizeBranchDescription,
- 17 } from "./humand-shared.ts";
+ 17 } from "./_shared/humand-shared.ts";
  18
  19 const NOTICE = [
  20 	"Humand mode active.",
  21 	"Isolated Humand workflow available.",
     ...

--- /home/sebas/pi-config/extensions/humand-mode.ts
+++ /home/sebas/pi-config/extensions/humand-mode.ts
@@ -13,9 +13,9 @@
 	loadHumandConfig,
 	resolveFeatureFromCwd,
 	resolveLocalRepoPaths,
 	sanitizeBranchDescription,
-} from "./humand-shared.ts";
+} from "./_shared/humand-shared.ts";

 const NOTICE = [
 	"Humand mode active.",
 	"Isolated Humand workflow available.",


bash

cd /home/sebas/pi-config/extensions && rm -f humand-shared.ts && cd /home/sebas && pi --mode text -p "say ok" --no-session --thinking off


ok


**Testing command functionality**

I need to see if the humand extension is active and if a specific command exists. Using it in non-interactive mode might complicate things. I’m considering running it in the humand current working directory, but I wonder if some prompts might include it.

Should I list all extensions with `pi list`, since they might not display if auto-discovered? It seems simpler to run with `pi --mode json -p "..."`. Looking at starting it with the current directory as `/home/sebas/work/humand` could help, ensuring no errors arise.

test -d /home/sebas/work/humand && echo yes || echo no

cd /home/sebas && rg -n "humand-shared\.ts" /home/sebas/pi-config/extensions -g '!node_modules'


yes


/home/sebas/pi-config/extensions/humand-mode.ts.disabled:17:} from "./humand-shared.ts";
/home/sebas/pi-config/extensions/humand-mode.ts:17:} from "./_shared/humand-shared.ts";


cd /home/sebas/work/humand && pi --mode text -p "say ok" --no-session --thinking off


**Considering code management**

I think I might need to clean up a disabled import, but that's optional. Keeping backups seems like a good idea too. I should probably mention the root cause of any issues I'm facing. Adding settings could be helpful, but maybe it's not necessary after all. I should also check the git diff to keep things concise. It’s all about finding the balance in managing this code!

cd /home/sebas/pi-config && git diff -- extensions/humand-mode.ts extensions/_shared/humand-shared.ts settings.json | sed -n '1,220p'


diff --git a/settings.json b/settings.json
index 8e26e67..d7ca7c3 100644
--- a/settings.json
+++ b/settings.json
@@ -1,14 +1,11 @@
 {
-  "lastChangelogVersion": "0.77.0",
+  "lastChangelogVersion": "0.78.1",
   "defaultProvider": "openai-codex",
   "defaultModel": "gpt-5.4",
   "defaultThinkingLevel": "low",
   "enabledModels": [
     "openai-codex/gpt-5.4",
-    "google-gemini-cli/gemini-3-flash-preview",
     "openai-codex/gpt-5.4-mini",
-    "nvidia/nvidia/nemotron-4-340b-instruct",
-    "nvidia/minimaxai/minimax-m2.7",
     "openrouter/nvidia/nemotron-3-super-120b-a12b:free",
     "openrouter/qwen/qwen3-coder:free"
   ],


**Investigating Git status**

I think the issue with Diff not showing new files might be because they are untracked. It seems like I should mention that. I could run a `git status` command to check for any untracked files. That should give me a clearer picture of what’s going on. I wonder if there are any additional steps I need to take after this to get everything in sync. Let me explore that further!

cd /home/sebas/pi-config && git status --short extensions/humand-mode.ts extensions/_shared/humand-shared.ts extensions/humand-mode.ts.disabled extensions/humand-shared.ts.disabled


?? extensions/_shared/humand-shared.ts
?? extensions/humand-mode.ts
?? extensions/humand-mode.ts.disabled
?? extensions/humand-shared.ts.disabled


**Identifying untracked files**

I think I should mention that there are some untracked files here. The user might be okay with that, but it's still good to point out. Maybe I can also update the todo list to reflect that the task is completed. It's essential to keep the user informed about what's going on! I'll make sure everything is clear and organized for them.

todo

Root cause: pi auto-loads top-level files in extensions/. humand-shared.ts was a helper, not an extension, so pi tried to load it as an extension and failed startup. Fixed by moving shared helper to extensions/_shared/humand-shared.ts, updating humand-mode import, restoring humand-mode.ts, and removing the top-level humand-shared.ts loader conflict. Validated pi starts in /home/sebas and /home/sebas/work/humand.


Updated #1 (in_progress → completed)

Debug humand extension loading and restore working pi startup


Sí. Quedó andando.

Causa:
- `pi` auto-carga archivos top-level en `extensions/`
- `humand-shared.ts` era helper, no extensión
- `pi` intentaba cargarlo como extensión
- fallaba con:
  - `Extension does not export a valid factory function`

Arreglo:
- restauré `extensions/humand-mode.ts`
- moví el helper a:
  - `extensions/_shared/humand-shared.ts`
- cambié el import en `humand-mode.ts`
- eliminé el conflicto del top-level `humand-shared.ts`

Validado:
- `pi -p "say ok"` en `/home/sebas` → OK
- `pi -p "say ok"` en `/home/sebas/work/humand` → OK

Archivos:
- nuevo: `/home/sebas/pi-config/extensions/_shared/humand-shared.ts`
- activo: `/home/sebas/pi-config/extensions/humand-mode.ts`
- backups:
  - `/home/sebas/pi-config/extensions/humand-mode.ts.disabled`
  - `/home/sebas/pi-config/extensions/humand-shared.ts.disabled`

Si querés, siguiente paso:
- limpio los `.disabled`
- o dejo todo así por seguridad.


validaste que haga lo que debe tambien?


bash

cd /home/sebas/work/humand && bash /home/sebas/pi-config/humand/workflow-setup.sh "$PWD" | sed -n '1,80p'

cd /home/sebas/work/humand && git remote get-url origin


User packages:
  git:github.com/apmantza/pi-free
    /home/sebas/pi-config/git/github.com/apmantza/pi-free
  npm:pi-btw
    /home/sebas/pi-config/npm/node_modules/pi-btw
  ../../../home/sebas/.agents/extensions/resume-hint/resume-hint.js
    /home/sebas/.agents/extensions/resume-hint/resume-hint.js
  /home/sebas/pi-config/extensions/questionnaire.ts
    /home/sebas/pi-config/extensions/questionnaire.ts
  /home/sebas/pi-config/extensions/session-switch/index.ts
    /home/sebas/pi-config/extensions/session-switch/index.ts
  npm:@juicesharp/rpiv-todo
    /home/sebas/pi-config/npm/node_modules/@juicesharp/rpiv-todo
  /mnt/rpi/dev/pi-telegram-sebas
    /mnt/rpi/dev/pi-telegram-sebas


fatal: not a git repository (or any of the parent directories): .git

Command exited with code 128


find /home/sebas/work/humand -maxdepth 3 -type d -name .git -prune -print | sed 's#/.git##' | head -40


/home/sebas/work/humand/eslint-plugin-suggest-hugo-components
/home/sebas/work/humand/humand-web
/home/sebas/work/humand/humand-mobile
/home/sebas/work/humand/react-workflows
/home/sebas/work/humand/hu-ai-agent-plugin
/home/sebas/work/humand/humand-backoffice
/home/sebas/work/humand/humand-product-workflow
/home/sebas/work/humand/material-hu
/home/sebas/work/humand/humand-main-api
/home/sebas/work/humand/humand-biome-config
/home/sebas/work/humand/hu-developer-bot
/home/sebas/work/humand/hu-translations
/home/sebas/work/humand/hu-rooms


cd /home/sebas/work/humand/humand-web && git remote get-url origin

cd /home/sebas/work/humand/humand-web && pi --mode text -p "Use tool humand_context and print active plus origin only." --no-session --thinking off

cd /home/sebas/work/humand/humand-web && pi --mode text -p "Use tool humand_status and print configured_repo_count, existing_repo_count, has_local_config only." --no-session --thinking off


active=true
origin=https://github.com/HumandDev/humand-web.git


configured_repo_count=8
existing_repo_count=8
has_local_config=true


limpia los disabled, si


cd /home/sebas/pi-config/extensions && rm -f humand-mode.ts.disabled humand-shared.ts.disabled && ls -1


humand-mode.ts
questionnaire.ts
session-memory-dispatcher.ts
session-switch
_shared
subagent


Sí. También validé función básica:

- `humand_context` en `humand-web`:
  - `active=true`
  - origin Humand correcto
- `humand_status`:
  - `configured_repo_count=8`
  - `existing_repo_count=8`
  - `has_local_config=true`

Y ya limpié:
- borrados `humand-mode.ts.disabled`
- borrados `humand-shared.ts.disabled`

Estado final:
- `extensions/humand-mode.ts`
- `extensions/_shared/humand-shared.ts`

Si querés, siguiente paso:
- hago commit
- o lo dejo sin commit.


variables carga? skills humand? hooks humand?


**Running validations for skills**

I think I need a concise answer regarding the status. Maybe I should run some quick validations for variables and see if any skill files exist that I can use. I’m considering hooks, particularly the extension hook resources for session start. It would be good to see what’s validated and what isn’t. Since the user asked about skills, I should probably inspect human skills and maybe run one of them. Let’s gather up this information!

cd /home/sebas/work/humand/humand-web && pi --mode text -p "Print exactly these env vars if available from tools or context: HUMAND_PI_CONFIG_HOME, HUMAND_PI_STATE_HOME, HUMAND_PI_LOCAL_CONFIG_FILE." --no-session --thinking off

cd /home/sebas/work/humand/humand-web && pi --mode text -p "What skills are available that start with humand-? List names only." --no-session --thinking off


---
name: humand-tech-context
description: Activate isolated Humand workflow context and load shared Humand multi-repo config
---

# humand-tech-context

Use only for Humand work.

## Goal

Load the isolated Humand workflow layer without affecting Ballbox/personal work.

## Files

- root: `/home/sebas/pi-config/humand`
- workflow setup: `/home/sebas/pi-config/humand/workflow-setup.sh`
- repos config: `/home/sebas/pi-config/humand/config/workflow/repos.json`
- teams config: `/home/sebas/pi-config/humand/config/workflow/teams.json`
- local config example: `/home/sebas/pi-config/humand/config/workflow/local-config.example.json`
- cloned upstream hook: `/home/sebas/pi-config/humand/hooks/session-start`
- source plugin clone: `/home/sebas/work/humand/hu-ai-agent-plugin/plugins/humand-tech`

## Workflow

1. Confirm task is Humand-specific.
2. Load setup vars:

```bash
eval "$(bash /home/sebas/pi-config/humand/workflow-setup.sh <workspace_root>)"
```

3. Use these env vars:
   - `HUMAND_PI_REPOS_FILE`
   - `HUMAND_PI_TEAMS_FILE`
   - `HUMAND_PI_LOCAL_CONFIG_FILE`
   - `HUMAND_PI_CONFIG_HOME`
   - `HUMAND_PI_STATE_HOME`
4. Prefer explicit Humand commands/skills. Do not change generic agent behavior globally.
5. If `HUMAND_PI_LOCAL_CONFIG_FILE` is empty, set it up before repo-resolution workflows.

## Current scope

Imported first:
- shared repo metadata
- teams metadata
- isolated workflow bootstrap
- cloned upstream session-start hook for reference
- session auto-detection notice via Pi extension

Not imported yet:
- full `/start`, `/status`, `/pr`, `/merge-watch`, `/summary`
- superpowers global enforcement
- marketplace/plugin manifests


---
name: humand-status
description: Inspect isolated Humand workflow readiness and repo coverage on this Pi
---

# humand-status

Use for Humand work only.

## Fast path

Prefer the `humand_status` tool when available.

## Fallback

1. Run:

```bash
eval "$(bash /home/sebas/pi-config/humand/workflow-setup.sh <workspace_root>)"
```

2. Read:
- `HUMAND_PI_REPOS_FILE`
- `HUMAND_PI_TEAMS_FILE`
- `HUMAND_PI_LOCAL_CONFIG_FILE`

3. Report:
- whether Humand mode should be active
- local config path or missing
- bundled repo count
- configured repo count
- existing repo count
- team count
- missing repo keys

4. If local config is missing, recommend `humand-initial-setup`.


HUMAND_PI_CONFIG_HOME=/home/sebas/.config/pi-humand
HUMAND_PI_STATE_HOME=/home/sebas/.local/state/pi-humand
HUMAND_PI_LOCAL_CONFIG_FILE=/home/sebas/.config/pi-humand/local-config.json


humand-feature-resolution
humand-initial-setup
humand-start
humand-status
humand-tech-context


cd /home/sebas/work/humand/humand-web && pi --mode text -p "Use tool humand_feature_resolution and report branch only." --no-session --thinking off


#!/usr/bin/env bash
# SessionStart hook for superpowers plugin

set -euo pipefail

# Determine plugin root directory
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PLUGIN_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"

# Check if legacy skills directory exists and build warning
warning_message=""
legacy_skills_dir="${HOME}/.config/superpowers/skills"
if [ -d "$legacy_skills_dir" ]; then
    warning_message="\n\n<important-reminder>IN YOUR FIRST REPLY AFTER SEEING THIS MESSAGE YOU MUST TELL THE USER:⚠ **WARNING:** Superpowers now uses Claude Code's skills system. Custom skills in ~/.config/superpowers/skills will not be read. Move custom skills to ~/.claude/skills instead. To make this message go away, remove ~/.config/superpowers/skills</important-reminder>"
fi

# Read using-superpowers content
using_superpowers_content=$(cat "${PLUGIN_ROOT}/skills/using-superpowers/SKILL.md" 2>&1 || echo "Error reading using-superpowers skill")

# Escape string for JSON embedding using bash parameter substitution.
# Each ${s//old/new} is a single C-level pass - orders of magnitude
# faster than the character-by-character loop this replaces.
escape_for_json() {
    local s="$1"
    s="${s//\\/\\\\}"
    s="${s//\"/\\\"}"
    s="${s//$'\n'/\\n}"
    s="${s//$'\r'/\\r}"
    s="${s//$'\t'/\\t}"
    printf '%s' "$s"
}

using_superpowers_escaped=$(escape_for_json "$using_superpowers_content")
warning_escaped=$(escape_for_json "$warning_message")
session_context="<EXTREMELY_IMPORTANT>\nYou have superpowers.\n\n**Below is the full content of your 'superpowers:using-superpowers' skill - your introduction to using skills. For all other skills, use the 'Skill' tool:**\n\n${using_superpowers_escaped}\n\n${warning_escaped}\n</EXTREMELY_IMPORTANT>"

# Output context injection as JSON.
# Cursor hooks expect additional_context (snake_case).
# Claude Code hooks expect hookSpecificOutput.additionalContext (nested).
# Copilot CLI (v1.0.11+) and others expect additionalContext (top-level, SDK standard).
# Claude Code reads BOTH additional_context and hookSpecificOutput without
# deduplication, so we must emit only the field the current platform consumes.
#
# Uses printf instead of heredoc to work around bash 5.3+ heredoc hang.
# See: https://github.com/obra/superpowers/issues/571
if [ -n "${CURSOR_PLUGIN_ROOT:-}" ]; then
  # Cursor sets CURSOR_PLUGIN_ROOT (may also set CLAUDE_PLUGIN_ROOT)
  printf '{\n  "additional_context": "%s"\n}\n' "$session_context"
elif [ -n "${CLAUDE_PLUGIN_ROOT:-}" ] && [ -z "${COPILOT_CLI:-}" ]; then
  # Claude Code sets CLAUDE_PLUGIN_ROOT without COPILOT_CLI
  printf '{\n  "hookSpecificOutput": {\n    "hookEventName": "SessionStart",\n    "additionalContext": "%s"\n  }\n}\n' "$session_context"
else
  # Copilot CLI (sets COPILOT_CLI=1) or unknown platform — SDK standard format
  printf '{\n  "additionalContext": "%s"\n}\n' "$session_context"
fi

exit 0


develop


**Evaluating extension integration**

I need to confirm if certain variables load successfully, including human skills, and if hooks are operational. It seems there might be a file that's referenced but not properly integrated. I want to be truthful about this. I should mention the validated extension tools and indicate that the session_start hook is likely not explicitly validated due to being non-interactive. It looks like the upstream hook file exists only as a reference and might not be wired correctly.

Sí, parcial. Estado real:

- variables: sí
  - `HUMAND_PI_CONFIG_HOME`
  - `HUMAND_PI_STATE_HOME`
  - `HUMAND_PI_LOCAL_CONFIG_FILE`
  - también cargan `REPOS_FILE` y `TEAMS_FILE`
- skills humand: sí
  - `humand-feature-resolution`
  - `humand-initial-setup`
  - `humand-start`
  - `humand-status`
  - `humand-tech-context`
- tools/extensión humand: sí
  - `humand_context` OK
  - `humand_status` OK
  - `humand_feature_resolution` OK

Validación hecha:
- en `~/work/humand/humand-web`
- `active=true`
- origin Humand correcto
- config local presente
- repo coverage: `8/8`
- branch resolution devolvió `develop`

Hooks:
- hay 2 cosas distintas

1. hook de la extensión `pi`
- `resources_discover`
- `session_start`
- eso no lo validé visualmente en UI
- pero la extensión carga y sus tools funcionan

2. hook upstream en:
- `/home/sebas/pi-config/humand/hooks/session-start`
- existe
- lo leí
- no está conectado automáticamente a `pi` por este arreglo
- hoy queda más como referencia/importado, no como prueba de ejecución real

Conclusión:
- bootstrap/env: OK
- skills: OK
- tools/comandos base humand: OK
- hook visual/session notice: no probado
- hook upstream externo: presente, no probado como runtime real

Si querés, hago la última milla:
- probar en sesión interactiva que aparezca el notice de `session_start`
- y verificar si falta meter `humand-mode.ts` en `settings.json` para que no dependa de autodiscovery.


"hoy queda más como referencia/importado" esta bien, pero dejalo claro cerca del/en el hook
a que te referis con "que no dependa de autodiscovery"?


**Clarifying user requests**

I see the user asked for clarification and might want some changes. I should focus on completing the task first through a to-do item, which seems manageable since it's a small follow-up. I’ll also need to explain autodiscovery and ensure I edit the comment near the hook to make everything clear for the user. Keeping communication straightforward is essential, so I'll handle that properly!

edit

#!/usr/bin/env bash
# SessionStart hook for superpowers plugin

#!/usr/bin/env bash
# SessionStart hook for upstream superpowers plugin reference.
# On this Pi, this file is not wired into pi runtime by default.
# Humand activation here currently comes from pi extension humand-mode.ts + Humand skills/bootstrap,
# not from executing this hook automatically at session start.


Successfully replaced 1 block(s) in /home/sebas/pi-config/humand/hooks/session-start.

  1 #!/usr/bin/env bash
- 2 # SessionStart hook for superpowers plugin
+ 2 # SessionStart hook for upstream superpowers plugin reference.
+ 3 # On this Pi, this file is not wired into pi runtime by default.
+ 4 # Humand activation here currently comes from pi extension humand-mode.ts + Humand skills/bootstrap,
+ 5 # not from executing this hook automatically at session start.
  3
  4 set -euo pipefail
  5
  6 # Determine plugin root directory
    ...

--- /home/sebas/pi-config/humand/hooks/session-start
+++ /home/sebas/pi-config/humand/hooks/session-start
@@ -1,6 +1,9 @@
 #!/usr/bin/env bash
-# SessionStart hook for superpowers plugin
+# SessionStart hook for upstream superpowers plugin reference.
+# On this Pi, this file is not wired into pi runtime by default.
+# Humand activation here currently comes from pi extension humand-mode.ts + Humand skills/bootstrap,
+# not from executing this hook automatically at session start.

 set -euo pipefail

 # Determine plugin root directory


Listo. Lo dejé aclarado al principio del hook.

Sobre “autodiscovery”:

- ahora `humand-mode.ts` funciona sin estar en `settings.json`
- eso implica que `pi` lo está encontrando solo por estar como archivo top-level en `extensions/`

O sea:
- si `pi` sigue auto-descubriendo `extensions/*.ts`, carga
- si ese comportamiento cambia en una update, podría dejar de cargar

Por eso decía “no dependa de autodiscovery”:
- opción más explícita/robusta:
  - agregar `/home/sebas/pi-config/extensions/humand-mode.ts`
  - a `settings.json -> packages`

Hoy:
- funciona
- pero por descubrimiento implícito, no por registro explícito

Si querés, lo dejo explícito en `settings.json`.


pero no haria que se cargue siempre eso?


Sí.

Si lo meto en `settings.json`, cargaría siempre.
Eso rompe la idea de:

- Humand sólo cuando aplica
- Ballbox/personal igual que antes

La buena noticia:
- cargar siempre la extensión no activa siempre “modo Humand”
- la extensión ya se auto-limita por cwd/origin:
  - `detectHumandMode(cwd)`

Pero igual:
- agrega ruido global
- registra tools/comandos Humand en todas las sesiones
- cambia superficie global aunque no se use

Entonces mejor así:
- extensión disponible
- activación efectiva sólo en contexto Humand
- sin fijarla en `settings.json`

O sea: no la metería en `settings.json` salvo que quieras asegurar carga global a propósito.


listo, si
algo mas para portar completamente?


Sí. Faltan cosas si querés “port completo”.

Ya está:
- bootstrap/env
- detección por cwd/origin
- notice/session extension base
- tools:
  - `humand_context`
  - `humand_status`
  - `humand_feature_resolution`
  - `humand_start_feature`
- skills Humand base
- shared repo/team/local config load

Falta o quedó parcial:
- comandos completos tipo:
  - `/start`
  - `/status`
  - `/pr`
  - `/merge-watch`
  - `/summary`
- cualquier manifest/plugin wiring del upstream
- hooks upstream reales ejecutándose, no sólo copiados como referencia
- “superpowers global enforcement”
- validación UI interactiva del notice `session_start`
- docs locales de qué parte quedó portada y qué no

Mi recomendación:
1. dejar un `PORTING-STATUS.md`
2. mapear upstream vs local
3. portar sólo los comandos con uso real
4. probar cada uno en loop real Humand

Si querés, hago ese cierre:
- inventario completo de gap
- estado archivo por archivo
- plan corto para terminar el port.


deja ese doc y hoy encara los
mandos completos tipo:
     - /start
     - /status
     - /pr
     - /merge-watch
     - /summary
validandolos que carguen

de funcionar actualizas el doc


**Organizing tasks and skills**

I need to create a task list, and I’m considering inspecting the human source plugin. Maybe I should use the humand-tech-context skill? I’ll definitely need to read through everything. I must clarify what’s already done. The user is clear: I need to leave documentation and focus on tackling commands to ensure they load correctly. If everything works, I’ll update the documentation. I also want to check the source plugin clone.

todo

Port remaining Humand commands and document status

Create a porting status doc, port Humand commands /start, /status, /pr, /merge-watch, /summary from upstream or equivalent local behavior, validate they load in pi, and update the doc with final status.


Created #2: Port remaining Humand commands and document status (pending)


Updated #2 (pending → in_progress)


bash

cd /home/sebas/work/humand/hu-ai-agent-plugin && find . -maxdepth 4 \( -iname '*start*' -o -iname '*status*' -o -iname '*pr*' -o -iname '*merge*' -o -iname '*summary*' \) | sed -n '1,200p'

cd /home/sebas/work/humand/hu-ai-agent-plugin && rg -n "registerCommand\(|/start|/status|/pr|merge-watch|summary|SessionStart|plugin manifest|skills" .


---
name: humand-tech-context
description: Activate isolated Humand workflow context and load shared Humand multi-repo config
---

# humand-tech-context

Use only for Humand work.

## Goal

Load the isolated Humand workflow layer without affecting Ballbox/personal work.

## Files

- root: `/home/sebas/pi-config/humand`
- workflow setup: `/home/sebas/pi-config/humand/workflow-setup.sh`
- repos config: `/home/sebas/pi-config/humand/config/workflow/repos.json`
- teams config: `/home/sebas/pi-config/humand/config/workflow/teams.json`
- local config example: `/home/sebas/pi-config/humand/config/workflow/local-config.example.json`
- cloned upstream hook: `/home/sebas/pi-config/humand/hooks/session-start`
- source plugin clone: `/home/sebas/work/humand/hu-ai-agent-plugin/plugins/humand-tech`

## Workflow

1. Confirm task is Humand-specific.
2. Load setup vars:

```bash
eval "$(bash /home/sebas/pi-config/humand/workflow-setup.sh <workspace_root>)"
```

3. Use these env vars:
   - `HUMAND_PI_REPOS_FILE`
   - `HUMAND_PI_TEAMS_FILE`
   - `HUMAND_PI_LOCAL_CONFIG_FILE`
   - `HUMAND_PI_CONFIG_HOME`
   - `HUMAND_PI_STATE_HOME`
4. Prefer explicit Humand commands/skills. Do not change generic agent behavior globally.
5. If `HUMAND_PI_LOCAL_CONFIG_FILE` is empty, set it up before repo-resolution workflows.

## Current scope

Imported first:
- shared repo metadata
- teams metadata
- isolated workflow bootstrap
- cloned upstream session-start hook for reference
- session auto-detection notice via Pi extension

Not imported yet:
- full `/start`, `/status`, `/pr`, `/merge-watch`, `/summary`
- superpowers global enforcement
- marketplace/plugin manifests


./.git/hooks/pre-merge-commit.sample
./.git/hooks/pre-push.sample
./.git/hooks/pre-receive.sample
./.git/hooks/pre-rebase.sample
./.git/hooks/prepare-commit-msg.sample
./.git/hooks/pre-applypatch.sample
./.git/hooks/pre-commit.sample
./docs/superpowers/specs/2026-05-05-superpowers-v51-prep-design.md
./plugins/humand-area-starter
./plugins/humand-react/commands/compose-pr.md
./plugins/humand-react/commands/create-pr-gh.md
./plugins/humand-react/commands/pr-tribe-by-ticket.json
./plugins/humand-backend/skills/kickoff-java-project
./plugins/humand-product-workflow
./plugins/humand-product-workflow/skills/sprint-report
./plugins/humand-product-workflow/skills/pm-product-advisor
./plugins/humand-product-workflow/skills/hu-team-staging-status
./plugins/humand-product-workflow/scripts/run-sprint-report.py
./plugins/humand-product-workflow/scripts/process-sprint-data.py
./plugins/humand-product-workflow/scripts/search-prs-for-keys.sh
./plugins/humand-product-workflow/scripts/fetch-jira-sprint-issues.sh
./plugins/humand-product-workflow/scripts/generate-sprint-report.py
./plugins/humand-product-workflow/config/sprint-report-context.json
./plugins/humand-tech/rules/workflow-superpowers-precedence.md
./plugins/humand-tech/skills/merge-watch
./plugins/humand-tech/skills/status
./plugins/humand-tech/skills/pr
./plugins/humand-tech/skills/start
./plugins/humand-tech/skills/start-from-jira-ticket
./plugins/humand-tech/skills/summary
./plugins/humand-tech/hooks/session-start
./plugins/humand-tech/scripts/merge-watch.sh
./plugins/humand-frontend-sandbox/skills/plan-project
./plugins/humand-frontend-sandbox/skills/humandify-project
./plugins/humand-frontend-sandbox/skills/get-started
./plugins/humand-frontend-sandbox/skills/bootstrap-react-project
./plugins/humand-frontend-sandbox/skills/document-project
./plugins/humand-frontend-sandbox/commands/stop-project.md
./plugins/humand-frontend-sandbox/commands/start-project.md


./plugins/humand-tech/skills/writing-skills/anthropic-best-practices.md:318:**Product**: API usage, features, adoption → See [reference/product.md](reference/product.md)
./plugins/humand-tech/skills/writing-skills/anthropic-best-practices.md:328:grep -i "api usage" reference/product.md
./plugins/humand-tech/skills/writing-skills/anthropic-best-practices.md:428:- [ ] Step 4: Create structured summary
./plugins/humand-tech/skills/writing-skills/anthropic-best-practices.md:444:**Step 4: Create structured summary**
./plugins/humand-tech/skills/writing-skills/anthropic-best-practices.md:570:Legacy v1 API (deprecated 2025-08)
./plugins/humand-tech/skills/writing-skills/anthropic-best-practices.md:614:## Executive summary
./plugins/humand-tech/skills/writing-skills/anthropic-best-practices.md:638:## Executive summary
./plugins/humand-tech/skills/writing-skills/anthropic-best-practices.md:741:  "skills": ["pdf-processing"],
./plugins/humand-tech/skills/writing-skills/anthropic-best-practices.md:771:     Claude models understand the Skill format and structure natively. You don't need special system prompts or a "writing skills" skill to get Claude to help create Skills. Simply ask Claude to create a Skill and it will generate properly structured SKILL.md content with appropriate frontmatter and body content.
./plugins/humand-tech/skills/writing-skills/anthropic-best-practices.md:853:The sections below focus on Skills that include executable scripts. If your Skill uses only markdown instructions, skip to [Checklist for effective Skills](#checklist-for-effective-skills).
./plugins/humand-tech/skills/writing-skills/anthropic-best-practices.md:919:<img src="https://mintcdn.com/anthropic-claude-docs/4Bny2bjzuGBK7o00/images/agent-skills-executable-scripts.png?fit=max&auto=format&n=4Bny2bjzuGBK7o00&q=85&s=4bbc45f2c2e0bee9f2f0d5da669bad00" alt="Bundling executable scripts alongside instruction files" data-og-width="2048" width="2048" data-og-height="1154" height="1154" data-path="images/agent-skills-executable-scripts.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/anthropic-claude-docs/4Bny2bjzuGBK7o00/images/agent-skills-executable-scripts.png?w=280&fit=max&auto=format&n=4Bny2bjzuGBK7o00&q=85&s=9a04e6535a8467bfeea492e517de389f 280w, https://mintcdn.com/anthropic-claude-docs/4Bny2bjzuGBK7o00/images/agent-skills-executable-scripts.png?w=560&fit=max&auto=format&n=4Bny2bjzuGBK7o00&q=85&s=e49333ad90141af17c0d7651cca7216b 560w, https://mintcdn.com/anthropic-claude-docs/4Bny2bjzuGBK7o00/images/agent-skills-executable-scripts.png?w=840&fit=max&auto=format&n=4Bny2bjzuGBK7o00&q=85&s=954265a5df52223d6572b6214168c428 840w, https://mintcdn.com/anthropic-claude-docs/4Bny2bjzuGBK7o00/images/agent-skills-executable-scripts.png?w=1100&fit=max&auto=format&n=4Bny2bjzuGBK7o00&q=85&s=2ff7a2d8f2a83ee8af132b29f10150fd 1100w, https://mintcdn.com/anthropic-claude-docs/4Bny2bjzuGBK7o00/images/agent-skills-executable-scripts.png?w=1650&fit=max&auto=format&n=4Bny2bjzuGBK7o00&q=85&s=48ab96245e04077f4d15e9170e081cfb 1650w, https://mintcdn.com/anthropic-claude-docs/4Bny2bjzuGBK7o00/images/agent-skills-executable-scripts.png?w=2500&fit=max&auto=format&n=4Bny2bjzuGBK7o00&q=85&s=0301a6c8b3ee879497cc5b5483177c90 2500w" />
./plugins/humand-tech/skills/writing-skills/anthropic-best-practices.md:1015:Skills run in a code execution environment with filesystem access, bash commands, and code execution capabilities. For the conceptual explanation of this architecture, see [The Skills architecture](/en/docs/agents-and-tools/agent-skills/overview#the-skills-architecture) in the overview.
./plugins/humand-tech/skills/writing-skills/anthropic-best-practices.md:1051:For complete details on the technical architecture, see [How Skills work](/en/docs/agents-and-tools/agent-skills/overview#how-skills-work) in the Skills overview.
./plugins/humand-tech/skills/writing-skills/anthropic-best-practices.md:1095:The SKILL.md frontmatter requires `name` (64 characters max) and `description` (1024 characters max) fields. See the [Skills overview](/en/docs/agents-and-tools/agent-skills/overview#skill-structure) for complete structure details.
./plugins/humand-tech/skills/writing-skills/anthropic-best-practices.md:1099:Keep SKILL.md body under 500 lines for optimal performance. If your content exceeds this, split it into separate files using the progressive disclosure patterns described earlier. For architectural details, see the [Skills overview](/en/docs/agents-and-tools/agent-skills/overview#how-skills-work).
./plugins/humand-tech/skills/writing-skills/anthropic-best-practices.md:1139:  <Card title="Get started with Agent Skills" icon="rocket" href="/en/docs/agents-and-tools/agent-skills/quickstart">
./plugins/humand-tech/skills/writing-skills/anthropic-best-practices.md:1143:  <Card title="Use Skills in Claude Code" icon="terminal" href="/en/docs/claude-code/skills">
./plugins/humand-tech/skills/writing-skills/anthropic-best-practices.md:1147:  <Card title="Use Skills with the API" icon="code" href="/en/api/skills-guide">
./plugins/humand-tech/skills/writing-skills/persuasion-principles.md:5:LLMs respond to the same persuasion principles as humans. Understanding this psychology helps you design more effective skills - not to manipulate, but to ensure critical practices are followed even under pressure.
./plugins/humand-tech/skills/writing-skills/persuasion-principles.md:14:**How it works in skills:**
./plugins/humand-tech/skills/writing-skills/persuasion-principles.md:20:- Discipline-enforcing skills (TDD, verification requirements)
./plugins/humand-tech/skills/writing-skills/persuasion-principles.md:33:**How it works in skills:**
./plugins/humand-tech/skills/writing-skills/persuasion-principles.md:39:- Ensuring skills are actually followed
./plugins/humand-tech/skills/writing-skills/persuasion-principles.md:52:**How it works in skills:**
./plugins/humand-tech/skills/writing-skills/persuasion-principles.md:71:**How it works in skills:**
./plugins/humand-tech/skills/writing-skills/persuasion-principles.md:90:**How it works in skills:**
./plugins/humand-tech/skills/writing-skills/persuasion-principles.md:110:- Rarely needed in skills
./plugins/humand-react/commands/workflows/jira-ticket-implementation.md:19:3. **Read the refinement file** end-to-end: understand the full plan, what's done, what's pending. Extract the ticket ID and module from the refinement's "Ticket (summary)" section.
./plugins/humand-react/commands/compose-pr.md:114:- If the user or the ticket context names the tribe, use the matching label. You can search [this json](./pr-tribe-by-ticket.json) by JiraTicketID.
./plugins/humand-e2e/knowledge/writing-tests/forms.md:11:- summary/review data consistency
./plugins/humand-e2e/knowledge/writing-tests/forms.md:25:- user-entered values appear in summary
./plugins/humand-tech/skills/writing-skills/SKILL.md:2:name: writing-skills
./plugins/humand-tech/skills/writing-skills/SKILL.md:3:description: Use when creating new skills, editing existing skills, or verifying skills work before deployment
./plugins/humand-tech/skills/writing-skills/SKILL.md:10:**Writing skills IS Test-Driven Development applied to process documentation.**
./plugins/humand-tech/skills/writing-skills/SKILL.md:12:**Personal skills live in agent-specific directories (`~/.claude/skills` for Claude Code, `~/.agents/skills/` for Codex)**
./plugins/humand-tech/skills/writing-skills/SKILL.md:76:skills/
./plugins/humand-tech/skills/writing-skills/SKILL.md:82:**Flat namespace** - all skills in one searchable namespace
./plugins/humand-tech/skills/writing-skills/SKILL.md:96:- Two required fields: `name` and `description` (see [agentskills.io/specification](https://agentskills.io/specification) for all supported fields)
./plugins/humand-tech/skills/writing-skills/SKILL.md:146:**Purpose:** Claude reads description to decide which skills to load for a given task. Make it answer: "Should I read this skill right now?"
./plugins/humand-tech/skills/writing-skills/SKILL.md:156:When the description was changed to just "Use when executing implementation plans with independent tasks" (no workflow summary), Claude correctly read the flowchart and followed the two-stage review process.
./plugins/humand-tech/skills/writing-skills/SKILL.md:167:# ✅ GOOD: Just triggering conditions, no workflow summary
./plugins/humand-tech/skills/writing-skills/SKILL.md:210:- ✅ `creating-skills` not `skill-creation`
./plugins/humand-tech/skills/writing-skills/SKILL.md:215:**Problem:** getting-started and frequently-referenced skills load into EVERY conversation. Every token counts.
./plugins/humand-tech/skills/writing-skills/SKILL.md:219:- Frequently-loaded skills: <200 words total
./plugins/humand-tech/skills/writing-skills/SKILL.md:220:- Other skills: <500 words (still be concise)
./plugins/humand-tech/skills/writing-skills/SKILL.md:257:- Don't repeat what's in cross-referenced skills
./plugins/humand-tech/skills/writing-skills/SKILL.md:263:wc -w skills/path/SKILL.md
./plugins/humand-tech/skills/writing-skills/SKILL.md:270:- ✅ `using-skills` not `skill-usage`
./plugins/humand-tech/skills/writing-skills/SKILL.md:275:- `creating-skills`, `testing-skills`, `debugging-with-logs`
./plugins/humand-tech/skills/writing-skills/SKILL.md:280:**When writing documentation that references other skills:**
./plugins/humand-tech/skills/writing-skills/SKILL.md:285:- ❌ Bad: `See skills/testing/test-driven-development` (unclear if required)
./plugins/humand-tech/skills/writing-skills/SKILL.md:286:- ❌ Bad: `@skills/testing/test-driven-development/SKILL.md` (force-loads, burns context)
./plugins/humand-tech/skills/writing-skills/SKILL.md:380:This applies to NEW skills AND EDITS to existing skills.
./plugins/humand-tech/skills/writing-skills/SKILL.md:450:| "Testing is overkill" | Untested skills have issues. Always. 15 min testing saves hours. |
./plugins/humand-tech/skills/writing-skills/SKILL.md:556:**Testing methodology:** See @testing-skills-with-subagents.md for the complete testing methodology:
./plugins/humand-tech/skills/writing-skills/SKILL.md:588:- Create multiple skills in batch without testing each
./plugins/humand-tech/skills/writing-skills/SKILL.md:594:Deploying untested skills = deploying untested code. It's a violation of quality standards.
./plugins/humand-tech/skills/writing-skills/SKILL.md:601:- [ ] Create pressure scenarios (3+ combined pressures for discipline skills)
./plugins/humand-tech/skills/writing-skills/SKILL.md:607:- [ ] YAML frontmatter with required `name` and `description` fields (max 1024 chars; see [spec](https://agentskills.io/specification))
./plugins/humand-tech/skills/writing-skills/SKILL.md:649:**Creating skills IS TDD for process documentation.**
./plugins/humand-tech/skills/writing-skills/SKILL.md:655:If you follow TDD for code, follow it for skills. It's the same discipline applied to documentation.
./plugins/humand-react/skills/refactor-form-to-conventions/SKILL.md:382:├── index.tsx       # export { FormName } from './form'; export { default } from './provider';
./plugins/humand-tech/skills/initial-setup/SKILL.md:97:Check that Atlassian MCP is available for ticket info (used by /start, /pr, etc.):
./plugins/humand-tech/skills/initial-setup/SKILL.md:108:Include Jira MCP status in the final summary (step 9).
./plugins/humand-tech/skills/initial-setup/SKILL.md:134:Accept corrections inline (e.g. "humand-web: ~/projects/humand-web"). Once the user confirms, write the file:
./plugins/humand-tech/skills/initial-setup/SKILL.md:207:- Suggest fixing local permissions before running `/commit` or `/pr`
./plugins/humand-tech/skills/initial-setup/SKILL.md:234:- Do not block setup completion, but keep it as a warning in the summary
./plugins/humand-tech/skills/initial-setup/SKILL.md:254:Then offer `/start`:
./plugins/humand-tech/skills/initial-setup/SKILL.md:257:Would you like me to run /start to begin a new feature?
./plugins/humand-tech/skills/initial-setup/SKILL.md:260:If the user accepts, immediately invoke `/start`. If they decline, stop.
./plugins/humand-tech/skills/initial-setup/SKILL.md:266:- Missing repos can be skipped; they just won't appear in /start's repo selection
./plugins/humand-tech/skills/dispatching-parallel-agents/SKILL.md:79:- Read each summary
./plugins/humand-tech/skills/dispatching-parallel-agents/SKILL.md:124:**✅ Specific:** "Return summary of root cause and changes"
./plugins/humand-tech/skills/dispatching-parallel-agents/SKILL.md:170:1. **Review each summary** - Understand what changed
./plugins/humand-tech/skills/receiving-code-review/SKILL.md:80:  Say so: "I can't verify this without [X]. Should I [investigate/ask/proceed]?"
./plugins/humand-frontend-sandbox/skills/document-feature/SKILL.md:116:> [3–5 line summary of what the feature does]
./plugins/humand-frontend-sandbox/skills/document-feature/SKILL.md:170:5. When done, report a summary:
./plugins/humand-frontend-sandbox/skills/build-feature/SKILL.md:14:**MANDATORY: Before writing any code, complete the pre-flight rules check** defined in `rules/workflows/preflight-rules-check.md`. Read ALL listed rules from `humand-react` and `sandbox.md` before proceeding to step 2. Do not skip this.
./plugins/humand-frontend-sandbox/skills/publish-to-github/SKILL.md:37:    Report back as a compact summary:
./plugins/humand-tech/skills/executing-plans/SKILL.md:61:- Reference skills when plan says to
./plugins/humand-tech/skills/executing-plans/SKILL.md:67:**Required workflow skills:**
./plugins/humand-frontend-sandbox/skills/sync-vercel-env/SKILL.md:21:- `.vercel/project.json` exists (project is linked). If not, stop:
./plugins/humand-frontend-sandbox/skills/sync-vercel-env/SKILL.md:29:bun <plugin-dir>/skills/sync-vercel-env/scripts/sync-vercel-env.ts
./plugins/humand-react/skills/refactor-to-conventions/SKILL.md:41:Output a summary table:
./plugins/humand-react/skills/split-module-services-or-types/SKILL.md:14:   - `services/process.ts`
./plugins/humand-react/skills/split-module-services-or-types/SKILL.md:29:   - `types/process.ts`
./plugins/humand-react/skills/refine-jira-ticket/SKILL.md:77:| **Ticket (summary)** | Issue + **refined** expected behavior (as validated in step 2). |
./plugins/humand-tech/skills/summary/SKILL.md:2:name: summary
./plugins/humand-tech/skills/summary/SKILL.md:6:# /summary — Resumen diario (Humand Tech Plugin)
./plugins/humand-tech/skills/summary/SKILL.md:37:- 5a. GitHub: fetch PRs por repo → `/tmp/prs_<repo>.json` (3 archivos)
./plugins/humand-tech/skills/summary/SKILL.md:49:- 12c. **Cleanup obligatorio:** `rm -f /tmp/prs_* /tmp/jira_cache.json /tmp/slack_*` — siempre, éxito o fallo
./plugins/humand-tech/skills/summary/SKILL.md:68:El agente debe registrar la hora de inicio al comenzar `/summary`. Si transcurren **30 minutos** sin haber completado el envío a Slack (o la presentación del resumen en pantalla), **abortar inmediatamente** y mostrar al usuario: «El resumen no pudo completarse en 30 minutos. Revisar logs y reintentar con `/summary`.»
./plugins/humand-tech/skills/summary/SKILL.md:83:**Si falta GH_TOKEN:** no continuar. Decir: «Para ejecutar /summary necesitas `GH_TOKEN`. Añádelo en `.env` (ver `.env.example`). Vuelve a ejecutar /summary cuando esté configurado.»
./plugins/humand-tech/skills/summary/SKILL.md:106:«Autenticación con GitHub falló. Revisa que `GH_TOKEN` esté definido y sea válido en `.env`. Crea un PAT con scope `repo` y `read:user`. Vuelve a ejecutar /summary cuando esté resuelto.»
./plugins/humand-tech/skills/summary/SKILL.md:157:   Ejemplo: `SINCE="2026-03-11T03:00:00Z"` y `UNTIL="2026-03-12T03:00:00Z"` para el 11/03 en ART. Guardar los PRs filtrados en `/tmp/prs_${REPO}.json` para usarlos en pasos siguientes.
./plugins/humand-tech/skills/summary/SKILL.md:189:    "/tmp/prs_humand-web.json",
./plugins/humand-tech/skills/summary/SKILL.md:190:    "/tmp/prs_humand-backoffice.json",
./plugins/humand-tech/skills/summary/SKILL.md:191:    "/tmp/prs_humand-mobile.json",
./plugins/humand-tech/skills/summary/SKILL.md:218:    "https://humand.atlassian.net/rest/api/3/issue/$KEY?fields=summary,issuetype,description,status,assignee,parent,project")
./plugins/humand-tech/skills/summary/SKILL.md:240:      "https://humand.atlassian.net/rest/api/3/issue/$PARENT_KEY?fields=summary,issuetype,description,status,assignee,parent,project")
./plugins/humand-tech/skills/summary/SKILL.md:392:- QA Manual genérico como: `"Probar el flujo del módulo en develop y regresión básica"`, `"Reproducir pasos de Jira y validar el resultado esperado en develop"`, `"Manual test on staging/production after deploy"`, o cualquier variante de estas frases.
./plugins/humand-tech/skills/summary/SKILL.md:442:   **Canal destino (obligatorio):** todos los payloads deben incluir `"channel": "#daily-humand-web-summary"` (channel ID: `C0AJYBBHRUN`).
./plugins/humand-tech/skills/summary/SKILL.md:461:   | QA Manual **no** es solo texto genérico en inglés (p. ej. `Manual test on staging/production after deploy`, variantes de “verify on staging”) | Sustituir por pasos concretos en **español** inferidos de Jira, PR y cambios. |
./plugins/humand-tech/skills/summary/SKILL.md:477:   - **Archivo de idempotencia (nunca en el workspace):** definir `SUMMARY_TS_FILE="$STATE_HOME/summary-ts-${SUMMARY_DATE}.txt"`. `$STATE_HOME` viene de `workflow-setup.sh`. Antes de la primera escritura: `mkdir -p "$STATE_HOME"`.
./plugins/humand-tech/skills/summary/SKILL.md:526:rm -f /tmp/prs_humand-web.json \
./plugins/humand-tech/skills/summary/SKILL.md:527:      /tmp/prs_humand-backoffice.json \
./plugins/humand-tech/skills/summary/SKILL.md:528:      /tmp/prs_humand-mobile.json \
./plugins/humand-tech/skills/summary/SKILL.md:538:El archivo de idempotencia (`$STATE_HOME/summary-ts-*.txt`) **no** se borra aquí — ese persiste a propósito entre reinicios para el guard anti-doble-mensaje.
./plugins/humand-tech/skills/systematic-debugging/CREATION-LOG.md:57:Created 4 validation tests following skills/meta/testing-skills-with-subagents:
./plugins/humand-tech/skills/systematic-debugging/CREATION-LOG.md:85:- Added link to skills/testing/test-driven-development
./plugins/humand-tech/skills/systematic-debugging/CREATION-LOG.md:107:1. Load skill: skills/debugging/systematic-debugging
./plugins/humand-frontend-sandbox/skills/get-started/SKILL.md:3:description: Use when the user asks what they can do, what skills are available, how to get started, or wants an overview of the humand-frontend-sandbox plugin capabilities.
./plugins/humand-frontend-sandbox/skills/get-started/SKILL.md:14:> **Maintainer note:** This list is hardcoded — skills are NOT auto-discovered. When adding a new skill, update this section and the workflow below. See `skills/CLAUDE.md`.
./plugins/humand-react/skills/implement-jira-ticket/SKILL.md:51:- Extract the **ticket ID** and **module** from the refinement's "Ticket (summary)" section.
./plugins/humand-react/skills/implement-jira-ticket/SKILL.md:81:| What ticket am I working on? | Ask the user, or read from `REFINEMENT-*.md` → "Ticket (summary)" section |
./plugins/humand-tech/skills/systematic-debugging/test-pressure-2.md:5:You have access to: skills/debugging/systematic-debugging
./plugins/humand-tech/skills/systematic-debugging/test-pressure-3.md:5:You have access to: skills/debugging/systematic-debugging
./plugins/humand-frontend-sandbox/skills/setup-supabase/SKILL.md:82:> https://supabase.com/dashboard/project/<ref>/settings/api-keys
./plugins/humand-frontend-sandbox/skills/setup-supabase/SKILL.md:87:The script writes `.env.local`, updates `.env.example` (non-secret values only), creates `supabase/migrations/`, and installs `@supabase/supabase-js`. Stdout is a JSON summary.
./plugins/humand-frontend-sandbox/skills/setup-supabase/SKILL.md:97:    bun <plugin-dir>/skills/setup-supabase/scripts/scaffold.ts \\
./plugins/humand-frontend-sandbox/skills/setup-supabase/SKILL.md:104:    Report the JSON summary from stdout. Do NOT echo the key.
./plugins/humand-frontend-sandbox/skills/setup-supabase/SKILL.md:167:Report a one-line summary to the user — no jargon:
./plugins/humand-frontend-sandbox/skills/setup-supabase/SKILL.md:188:### 12. Final summary
./plugins/humand-frontend-sandbox/skills/setup-supabase/SKILL.md:194:> - **Proyecto:** `<name>` — https://supabase.com/dashboard/project/<ref>
./plugins/humand-e2e/skills/e2e-setup/SKILL.md:8:Create or update `.e2e/context.local.json` so the rest of the E2E skills know where the app source repos live on this machine. Without this context, skills run in "degraded mode" and cannot cross-reference routes, services, components, or translations from the apps.
./plugins/humand-e2e/skills/e2e-setup/SKILL.md:12:The Humand E2E test repo (e.g. `humand-frontend-testing`) is **separate** from the app repos (`humand-web`, `humand-backoffice`, `hu-translations`, `material-hu`). Each developer clones those repos to different paths on their machine. This skill captures those paths once and writes them to a per-machine config that other skills consume.
./plugins/humand-e2e/skills/e2e-setup/SKILL.md:16:- `.e2e/context.local.json` — gitignored, per-machine. The real config consumed by skills.
./plugins/humand-e2e/skills/e2e-setup/SKILL.md:60:If a sub-path is missing, omit it from the config (skills will degrade gracefully).
./plugins/humand-e2e/skills/e2e-setup/SKILL.md:62:> Note: Humand apps are **in the middle of a per-module services migration**. Newer modules own their `services.ts` next to their `index.tsx` (e.g. `src/pages/dashboard/performance/services.ts`); legacy ones still keep services under a shared directory like `src/services/`; some have files in both during transition. There is no single canonical `servicesPath` that holds across modules, so this config does not record one. Consumer skills that need to read services should search per-module first (`<pagesPath>/<module>/services.ts`) and fall back to `<sourceRoot>/services/` when nothing is found there.
./plugins/humand-e2e/skills/e2e-setup/SKILL.md:105:### 8) Print a summary
./plugins/humand-e2e/skills/e2e-setup/SKILL.md:116:## How other skills consume the context
./plugins/humand-e2e/skills/e2e-setup/SKILL.md:118:Other E2E skills add a "Resolve app context" step at the start of their workflow:
./plugins/humand-frontend-sandbox/skills/setup-supabase/scripts/scaffold.ts:103:    `# Dashboard: https://supabase.com/dashboard/project/${ref}`,
./plugins/humand-frontend-sandbox/skills/setup-supabase/scripts/scaffold.ts:164:  const summary = {
./plugins/humand-frontend-sandbox/skills/setup-supabase/scripts/scaffold.ts:169:    dashboardUrl: `https://supabase.com/dashboard/project/${projectRef}`,
./plugins/humand-frontend-sandbox/skills/setup-supabase/scripts/scaffold.ts:176:  process.stdout.write(JSON.stringify(summary, null, 2) + '\n');
./plugins/humand-tech/skills/systematic-debugging/test-pressure-1.md:5:You have access to: skills/debugging/systematic-debugging
./plugins/humand-e2e/skills/e2e-heal/SKILL.md:60:Read `.e2e/context.local.json`. If missing, suggest running `/e2e-setup` first. The healer is the most context-hungry of the E2E skills — without app source access it can only fix surface symptoms, not root causes. If the dev opts to proceed without context, declare this is **degraded mode** and skip diagnosis steps that require source reads.
./plugins/humand-e2e/skills/e2e-page-object/SKILL.md:110:These artifacts are not consumed by downstream skills and should not be committed.
./plugins/humand-frontend-sandbox/skills/setup-sandbox/SKILL.md:46:- Prints the final JSON to stdout on success — capture it to show the user a summary
./plugins/humand-frontend-sandbox/skills/setup-sandbox/scripts/setup-env.ps1:3:# Output: writes ~/.humand/sandbox-installed.json and prints a JSON summary to stdout.
./plugins/humand-tech/skills/systematic-debugging/test-academic.md:3:You have access to the systematic debugging skill at skills/debugging/systematic-debugging
./plugins/humand-frontend-sandbox/skills/setup-sandbox/scripts/setup-env.sh:4:# Output: writes ~/.humand/sandbox-installed.json and prints a JSON summary to stdout.
./plugins/humand-tech/skills/systematic-debugging/root-cause-tracing.md:36:Error: git init failed in ~/project/packages/core
./plugins/humand-tech/skills/start/SKILL.md:6:# /start - Initialize Feature & Begin Work (Humand Tech Plugin)
./plugins/humand-tech/skills/start/SKILL.md:50:- **No local state is written.** The branch and worktree created by this skill are the sole record of the feature. `/commit`, `/pr`, and `/status` discover feature state from `git branch --show-current` and `git worktree list` at invocation time.
./plugins/humand-tech/skills/start/SKILL.md:56:The user may invoke `/start` with a ticket ID, URL, or bare description. Extract the ticket key if present.
./plugins/humand-tech/skills/start/SKILL.md:58:- `/start SQSH-1234` → ticket key is `SQSH-1234`
./plugins/humand-tech/skills/start/SKILL.md:59:- `/start https://humand.atlassian.net/browse/SQSH-1234` → ticket key is `SQSH-1234`
./plugins/humand-tech/skills/start/SKILL.md:60:- `/start` with no argument → ask: `What ticket are you working on? (ID, URL, or "none")`
./plugins/humand-tech/skills/start/SKILL.md:84:  "https://humand.atlassian.net/rest/api/3/issue/$TICKET_KEY?fields=summary,issuetype,description,parent,customfield_10107")
./plugins/humand-tech/skills/start/SKILL.md:298:4. When the skill returns, show its summary and file list, then continue with 7d.
./plugins/humand-tech/skills/start/SKILL.md:339:- All skills (`/commit`, `/pr`, `/status`) resolve the active feature from `git branch --show-current` in CWD and `git worktree list` per repo — no context files are read or written.
./plugins/humand-tech/skills/subagent-driven-development/code-quality-reviewer-prompt.md:13:  DESCRIPTION: [task summary, from implementer's report]
./plugins/humand-tech/skills/subagent-driven-development/SKILL.md:269:**Required workflow skills:**
./plugins/humand-tech/skills/systematic-debugging/SKILL.md:202:   - Each fix reveals new shared state/coupling/problem in different place
./plugins/humand-tech/skills/systematic-debugging/SKILL.md:286:**Related skills:**
./plugins/humand-tech/skills/merge-watch/SKILL.md:2:name: merge-watch
./plugins/humand-tech/skills/merge-watch/SKILL.md:6:# /merge-watch - Auto-Merge PR When Ready (with CI Fix) (Humand Tech Plugin)
./plugins/humand-tech/skills/merge-watch/SKILL.md:18:- **Watcher script:** `bash "$PLUGIN_ROOT/scripts/merge-watch.sh"`.
./plugins/humand-tech/skills/merge-watch/SKILL.md:37:This skill accepts an optional branch argument (example: `/merge-watch feat/SQSH-1234-foo`) to override CWD detection.
./plugins/humand-tech/skills/merge-watch/SKILL.md:83:merge-watch requires jq. Install it and run /merge-watch again.
./plugins/humand-tech/skills/merge-watch/SKILL.md:88:Run the merge-watch script in the **foreground** with CI failure detection enabled:
./plugins/humand-tech/skills/merge-watch/SKILL.md:91:EXIT_ON_CI_FAIL=1 bash "$PLUGIN_ROOT/scripts/merge-watch.sh" \
./plugins/humand-tech/skills/merge-watch/SKILL.md:243:nohup timeout 3600 bash "$PLUGIN_ROOT/scripts/merge-watch.sh" \
./plugins/humand-tech/skills/merge-watch/SKILL.md:245:  > /tmp/merge-watch-<pr_number>.log 2>&1 &
./plugins/humand-tech/skills/merge-watch/SKILL.md:250:Check progress with `cat /tmp/merge-watch-<pr_number>.log`.
./plugins/humand-tech/skills/merge-watch/SKILL.md:257:**If merged (exit 0):** Report success. Offer `/start` to begin a new feature if the user wants.
./plugins/humand-tech/skills/merge-watch/SKILL.md:285:Check progress: cat /tmp/merge-watch-<pr_number>.log
./plugins/humand-tech/skills/merge-watch/SKILL.md:291:- `/merge-watch` — watch the PR for the current branch in the current repo
./plugins/humand-tech/skills/merge-watch/SKILL.md:292:- `/merge-watch <pr_number>` — watch a specific PR in the current repo
./plugins/humand-tech/skills/merge-watch/SKILL.md:293:- `/merge-watch <owner/repo> <pr_number>` — watch a PR in a different repo
./plugins/humand-tech/skills/merge-watch/SKILL.md:299:- If no PR is found for the current branch: show error and suggest creating one with `/pr`.
./plugins/humand-tech/skills/pr/SKILL.md:6:# /pr - Create or Update PRs (Humand Tech Plugin)
./plugins/humand-tech/skills/pr/SKILL.md:40:This skill accepts an optional branch argument (example: `/pr feat/SQSH-1234-foo`) to override CWD detection.
./plugins/humand-tech/skills/pr/SKILL.md:50:If no repo is found on a non-base branch: stop and tell the user to run `/start` first or check out the feature branch manually.
./plugins/humand-tech/skills/pr/SKILL.md:98:  humand-web: src/components/Profile.tsx, src/pages/profile/index.tsx, ...
./plugins/humand-tech/skills/pr/SKILL.md:110:   [2] Enter custom summary
./plugins/humand-tech/skills/pr/SKILL.md:192:2. If `## Summary` exists but `### What Changed` and/or `### Test Plan` are missing, inject missing ones **inside Summary** after summary bullets.
./plugins/humand-tech/skills/pr/SKILL.md:212:- **Summary bullet points**: Use the user-provided or auto-suggested summary (1-3 bullets)
./plugins/humand-tech/skills/pr/SKILL.md:275:Show the PR summary:
./plugins/humand-tech/skills/pr/SKILL.md:298:Then offer `/merge-watch`:
./plugins/humand-tech/skills/pr/SKILL.md:300:- **Single PR:** `Would you like me to run /merge-watch to auto-merge PR #789 when CI passes?`
./plugins/humand-tech/skills/pr/SKILL.md:301:- **Multiple PRs:** List the PRs and ask: `Would you like me to run /merge-watch on these PRs? I'll start with the first one.`
./plugins/humand-tech/skills/pr/SKILL.md:303:If the user accepts, immediately invoke `/merge-watch` for the first (or only) PR. If they decline, stop.
./plugins/humand-tech/skills/pr/SKILL.md:307:If PRs already exist (from a previous /pr):
./plugins/humand-tech/skills/pr/SKILL.md:322:- `/pr` invokes `/commit` automatically if uncommitted changes exist — no need to run `/commit` first
./plugins/humand-tech/skills/pr/SKILL.md:323:- Pushing is handled by `/commit`; `/pr` only ensures branches are pushed if somehow missed
./plugins/humand-tech/skills/requesting-code-review/SKILL.md:37:- `{DESCRIPTION}` - Brief summary of what you built
./plugins/humand-product-workflow/README.md:3:Shared Cursor skills and agent configuration for the Humand development team.
./plugins/humand-product-workflow/README.md:19:skills/
./plugins/humand-product-workflow/README.md:42:4. Configure the Notion MCP server in Cursor (`https://mcp.notion.com/mcp`) — skills publish output to Notion pages
./plugins/humand-product-workflow/README.md:54:4. Use Cloud Agents to run the skills:
./plugins/humand-product-workflow/README.md:72:Scripts in `scripts/` are shared across skills.
./plugins/humand-product-workflow/config/repos.json:2:  "_doc": "Repo metadata shared by skills. 'scan' repos are actively checked for branches in staging-status. Unknown repos discovered via Jira dev-info use platform_heuristics for best-guess classification.",
./plugins/humand-product-workflow/config/sprint-report-context.json:34:      "summary", "issuetype", "status", "priority", "assignee", "parent",
./plugins/humand-product-workflow/config/sprint-report-context.json:57:    "platform_from_subtask_title": "Parse 'Web | ...' prefix from subtask summary to determine platform. Multiple subtasks → multi-platform ticket."
./plugins/humand-tech/skills/requesting-code-review/code-reviewer.md:125:- `{DESCRIPTION}` — brief summary of what was built
./plugins/humand-tech/skills/status/SKILL.md:6:# /status - Cross-Repo Feature Status
./plugins/humand-tech/skills/status/SKILL.md:63:   - Unpushed commits, no PRs → offer `/pr`
./plugins/humand-tech/skills/status/SKILL.md:64:   - Open PRs, CI passing → offer `/merge-watch`
./plugins/humand-tech/skills/status/SKILL.md:70:### When /status --current: single-feature mode
./plugins/humand-tech/skills/status/SKILL.md:143:2. **Unpushed commits, no PRs** → `You have unpushed commits. Would you like me to run /pr to push and create PRs?`
./plugins/humand-tech/skills/status/SKILL.md:144:3. **Open PRs, CI passing** → `Your PRs look ready. Would you like me to run /merge-watch to auto-merge?`
./plugins/humand-tech/skills/status/SKILL.md:159:Run /start to begin a new feature.
./plugins/humand-tech/skills/status/SKILL.md:164:- `/status` - Status for **all** active features discovered from git (default)
./plugins/humand-tech/skills/status/SKILL.md:165:- `/status --current` or `/status current` - Status for the current feature only (resolved from CWD)
./plugins/humand-tech/skills/status/SKILL.md:166:- `/status --quick` - Just the tables, no PR details
./plugins/humand-tech/skills/status/SKILL.md:167:- `/status --prs` - Focus on PR states and review status
./plugins/humand-product-workflow/scripts/generate-sprint-report.py:18:                    Each object must have: key, fields.summary, fields.issuetype.name,
./plugins/humand-product-workflow/scripts/generate-sprint-report.py:92:    title_lower = ticket["summary"].lower().strip()
./plugins/humand-product-workflow/scripts/generate-sprint-report.py:121:def code_summary(ticket):
./plugins/humand-product-workflow/scripts/generate-sprint-report.py:167:def pr_list_summary(ticket, reviews):
./plugins/humand-product-workflow/scripts/generate-sprint-report.py:184:def review_summary(ticket, reviews):
./plugins/humand-product-workflow/scripts/generate-sprint-report.py:210:def activity_summary(ticket, branches_data):
./plugins/humand-product-workflow/scripts/generate-sprint-report.py:216:        return code_summary(ticket)
./plugins/humand-product-workflow/scripts/generate-sprint-report.py:288:            "summary": f["summary"],
./plugins/humand-product-workflow/scripts/generate-sprint-report.py:519:            lines.append(f"| {t['key']} {jira(t['key'])} | {t['summary'][:65]} | {t['type']} | {t['assignee']} | {code_summary(t)} |")
./plugins/humand-product-workflow/scripts/generate-sprint-report.py:528:                f"| {t['key']} {jira(t['key'])} | {t['summary'][:65]} | {t['type']} | {t['assignee']}"
./plugins/humand-product-workflow/scripts/generate-sprint-report.py:529:                f" | {pr_list_summary(t, reviews)} | {review_summary(t, reviews)} |"
./plugins/humand-product-workflow/scripts/generate-sprint-report.py:538:            lines.append(f"| {t['key']} {jira(t['key'])} | {t['summary'][:65]} | {t['type']} | {t['assignee']} | {activity_summary(t, branches_data)} |")
./plugins/humand-product-workflow/scripts/generate-sprint-report.py:546:            lines.append(f"| {t['key']} {jira(t['key'])} | {t['summary'][:65]} | {t['assignee']} | Flaggeado en Jira |")
./plugins/humand-product-workflow/scripts/generate-sprint-report.py:554:            lines.append(f"| {t['key']} {jira(t['key'])} | {t['summary'][:65]} | {t['type']} | {t['assignee']} |")
./plugins/humand-product-workflow/scripts/generate-sprint-report.py:594:                "summary": t["summary"],
./plugins/humand-product-workflow/scripts/generate-sprint-report.py:601:                "code": code_summary(t),
./plugins/humand-product-workflow/scripts/generate-sprint-report.py:607:    fieldnames = ["key", "summary", "type", "status", "category", "priority", "assignee", "points", "code"]
./plugins/humand-frontend-sandbox/skills/add-login/references/AUTH-LOGIN.md:57:| `src/providers/AuthProvider.tsx` | React context + `useAuth()` hook |
./plugins/humand-frontend-sandbox/skills/add-login/references/AUTH-LOGIN.md:58:| `src/providers/ProtectedRoute.tsx` | Route guard — renders children only when authenticated |
./plugins/humand-product-workflow/scripts/fetch-jira-sprint-issues.sh:60:FIELDS="summary,issuetype,status,priority,assignee,parent,customfield_10020,customfield_10021,customfield_10028,customfield_10000,customfield_10097"
./plugins/humand-tech/skills/brainstorming/SKILL.md:164:`skills/brainstorming/visual-companion.md`
./plugins/humand-tech/skills/brainstorming/visual-companion.md:37:scripts/start-server.sh --project-dir /path/to/project
./plugins/humand-tech/skills/brainstorming/visual-companion.md:40:#           "screen_dir":"/path/to/project/.superpowers/brainstorm/12345-1706000000/content",
./plugins/humand-tech/skills/brainstorming/visual-companion.md:41:#           "state_dir":"/path/to/project/.superpowers/brainstorm/12345-1706000000/state"}
./plugins/humand-tech/skills/brainstorming/visual-companion.md:55:scripts/start-server.sh --project-dir /path/to/project
./plugins/humand-tech/skills/brainstorming/visual-companion.md:63:scripts/start-server.sh --project-dir /path/to/project
./plugins/humand-tech/skills/brainstorming/visual-companion.md:71:scripts/start-server.sh --project-dir /path/to/project
./plugins/humand-tech/skills/brainstorming/visual-companion.md:78:scripts/start-server.sh --project-dir /path/to/project --foreground
./plugins/humand-tech/skills/brainstorming/visual-companion.md:86:scripts/start-server.sh \
./plugins/humand-tech/skills/brainstorming/visual-companion.md:87:  --project-dir /path/to/project \
./plugins/humand-tech/skills/brainstorming/visual-companion.md:105:   - Give a brief text summary of what's on screen (e.g., "Showing 3 layout options for the homepage")
./plugins/humand-tech/skills/brainstorming/scripts/start-server.sh:137:      echo "{\"error\": \"Server started but was killed. Retry in a persistent terminal with: $SCRIPT_DIR/start-server.sh${PROJECT_DIR:+ --project-dir $PROJECT_DIR} --host $BIND_HOST --url-host $URL_HOST --foreground\"}"
./plugins/humand-frontend-sandbox/skills/add-login/SKILL.md:18:3. Creates `src/providers/AuthProvider.tsx` — React context + `useAuth()` hook.
./plugins/humand-frontend-sandbox/skills/add-login/SKILL.md:19:4. Creates `src/providers/ProtectedRoute.tsx` — Route guard component.
./plugins/humand-frontend-sandbox/skills/add-login/SKILL.md:73:import { AuthProvider } from './providers/AuthProvider';
./plugins/humand-frontend-sandbox/skills/add-login/SKILL.md:74:import { ProtectedRoute } from './providers/ProtectedRoute';
./plugins/humand-product-workflow/scripts/process-sprint-data.py:83:        "summary": f.get("summary", ""),
./plugins/humand-product-workflow/scripts/process-sprint-data.py:100:def detect_platform_from_title(summary):
./plugins/humand-product-workflow/scripts/process-sprint-data.py:102:    s = summary.strip()
./plugins/humand-product-workflow/scripts/process-sprint-data.py:118:    title = subtask["summary"].strip()
./plugins/humand-product-workflow/scripts/process-sprint-data.py:138:    parent_title_map = {p["key"]: p["summary"] for p in parents}
./plugins/humand-product-workflow/scripts/process-sprint-data.py:195:            p = detect_platform_from_title(s["summary"])
./plugins/humand-product-workflow/scripts/process-sprint-data.py:211:        parent["_subtask_summary"] = {
./plugins/humand-product-workflow/scripts/process-sprint-data.py:237:    ss = p.get("_subtask_summary")
./plugins/humand-product-workflow/scripts/process-sprint-data.py:246:        sub_info, p["summary"][:75],
./plugins/humand-product-workflow/scripts/process-sprint-data.py:260:                f'{{"cachedValue":{{"summary":{{"pullrequest":{{"overall":'
./plugins/humand-product-workflow/scripts/process-sprint-data.py:279:                "summary": p["summary"],
./plugins/humand-frontend-sandbox/skills/add-login/scripts/install-files.ts:46:      'src/providers/AuthProvider.tsx',
./plugins/humand-frontend-sandbox/skills/add-login/scripts/install-files.ts:47:      'src/providers/ProtectedRoute.tsx',
./plugins/humand-frontend-sandbox/skills/add-login/scripts/install-files.ts:56:      'src/providers/AuthContext.tsx',
./plugins/humand-frontend-sandbox/skills/add-login/scripts/install-files.ts:89:  { src: 'AuthProvider.tsx',    dest: 'src/providers/AuthProvider.tsx' },
./plugins/humand-frontend-sandbox/skills/add-login/scripts/install-files.ts:90:  { src: 'ProtectedRoute.tsx',  dest: 'src/providers/ProtectedRoute.tsx' },
./plugins/humand-frontend-sandbox/rules/workflows/preflight-rules-check.md:2:description: Mandatory compliance gate. Forces the agent to use skills for code generation and read humand-react conventions before writing any code. NEVER skip.
./plugins/humand-frontend-sandbox/rules/workflows/preflight-rules-check.md:24:Do NOT create folders or files in `src/pages/` directly. The skills ensure correct structure, routing, nav registration, and convention compliance.
./plugins/humand-frontend-sandbox/rules/workflows/sandbox-workflow.md:117:2. Greet the user with a summary of the current state:
./plugins/humand-frontend-sandbox/rules/workflows/sandbox-workflow.md:120:   > Before we continue, type `/clear` to start fresh. The summary above will help you pick up where we left off.
./plugins/humand-frontend-sandbox/rules/workflows/build-feature.md:49:Example: `<Route path="/processes/list" element={<ProcessesList />} />`
./plugins/humand-frontend-sandbox/rules/workflows/build-feature.md:61:  { key: 'processes', title: 'Procesos', path: '/processes/list', icon: <IconSomeIcon /> }
./plugins/humand-product-workflow/skills/redash-schema/reference/sql-patterns.md:104:Consolidated summary with current state per group/item:
./plugins/humand-product-workflow/skills/redash-schema/reference/ds-13-insights.md:103:| `ai_chatbot_conversation_summary` | Conversation summaries |
./plugins/humand-product-workflow/skills/redash-schema/reference/ds-13-insights.md:104:| `ai_chatbot_feedback_summary` | User feedback on chatbot |
./plugins/humand-product-workflow/skills/redash-schema/reference/ds-13-insights.md:105:| `ai_chatbot_metrics_summary` | Aggregated chatbot metrics |
./plugins/humand-frontend-sandbox/skills/humandify-project/SKILL.md:263:> Siguiente paso: corrí `/start-project` para ver el proyecto en el navegador. Si querés documentarlo para gestionar features, seguí con `/document-project`.
./plugins/humand-frontend-sandbox/skills/add-super-admin-login/templates/App.snippet.tsx:8:import { AuthProvider, useAuth } from './providers/AuthContext';
./plugins/humand-frontend-sandbox/skills/add-super-admin-login/templates/DashboardLayout.snippet.tsx:7:import { useAuth } from '../../providers/AuthContext';
./plugins/humand-product-workflow/skills/pm-product-advisor/SKILL.md:50:La **Fase 3** delega la creación de issues en el skill **`humand-pm-jira`** tal como está documentado en `skills/humand-pm-jira/SKILL.md` **del mismo bundle del plugin**. Esa skill debe describir el flujo **MCP de Atlassian** (tools `createJiraIssue`, `editJiraIssue`, etc.), no únicamente el cliente Python `jira_client.py` legacy. Si en un checkout antiguo `humand-pm-jira` aún fuera solo REST/CLI, la Fase 3 no coincidiría con las instrucciones de este skill: actualizar el plugin o alinear `humand-pm-jira` antes de usar Product Advisor en producción.
./plugins/humand-product-workflow/skills/redash-connect/SKILL.md:141:## Related skills
./plugins/humand-product-workflow/skills/hu-team-staging-status/team-staging-status.py:47:# plugins/humand-product-workflow/skills/hu-team-staging-status/team-staging-status.py
./plugins/humand-product-workflow/skills/hu-team-staging-status/team-staging-status.py:158:    summary: str
./plugins/humand-product-workflow/skills/hu-team-staging-status/team-staging-status.py:542:    data = jira_get("/rest/api/3/search/jql", {"jql": jql, "maxResults": "100", "fields": "summary,status,assignee,issuetype,parent"})
./plugins/humand-product-workflow/skills/hu-team-staging-status/team-staging-status.py:557:            summary=f.get("summary", ""),
./plugins/humand-product-workflow/skills/hu-team-staging-status/team-staging-status.py:616:        {"jql": jql, "maxResults": str(len(keys)), "fields": "summary,status,assignee,issuetype,parent"},
./plugins/humand-product-workflow/skills/hu-team-staging-status/team-staging-status.py:632:            summary=f.get("summary", issue["key"]),
./plugins/humand-product-workflow/skills/hu-team-staging-status/team-staging-status.py:788:                ticket = ticket_map.get(key) or Ticket(key=key, summary=f"Ticket {key}", status="", assignee="")
./plugins/humand-product-workflow/skills/hu-team-staging-status/team-staging-status.py:940:            lines.append(f"- {t.summary} ({assignee}) — [{t.key}]({jira_url}) `{t.status}`")
./plugins/humand-product-workflow/skills/hu-team-staging-status/team-staging-status.py:959:    parts = [f"- {t.summary}"]
./plugins/humand-product-workflow/skills/hu-team-staging-status/SKILL.md:8:Per-repo summary of what's in staging vs develop for a team, plus what entered the latest production release. Jira is the source of truth for ticket linkage. Output goes to a Notion page.
./plugins/humand-product-workflow/skills/hu-team-staging-status/SKILL.md:28:python3 skills/hu-team-staging-status/team-staging-status.py
./plugins/humand-product-workflow/skills/hu-team-staging-status/SKILL.md:78:Agent-generated summary, commentary, or section headers must be in **Spanish**.
./plugins/humand-frontend-sandbox/rules/file-types/sandbox.md:37:- `src/providers/` — React context providers
./plugins/humand-product-workflow/skills/feature-estimate-plan/SKILL.md:180:- summary,
./plugins/humand-frontend-sandbox/skills/add-super-admin-login/references/AUTH-SUPER-ADMIN-LOGIN.md:32:| `src/providers/AuthContext.tsx` | React context — holds `accessToken`, `isAuthenticated`, `login()`, `logout()` |
./plugins/humand-frontend-sandbox/skills/add-super-admin-login/templates/Callback/index.tsx:8:import { useAuth } from '../../../providers/AuthContext';
./plugins/humand-product-workflow/skills/setup/SKILL.md:3:description: Verify local prerequisites and connectivity for Humand product workflow skills
./plugins/humand-product-workflow/skills/setup/SKILL.md:81:  --data-urlencode "fields=summary" | python3 -c "import json,sys; d=json.load(sys.stdin); issues=d.get('issues',[]); print(f'OK — {len(issues)} issue(s) returned') if issues else print('FAIL — no issues (check permissions or active sprint)')"
./plugins/humand-frontend-sandbox/skills/add-super-admin-login/SKILL.md:36:├── AuthContext.tsx                 → src/providers/AuthContext.tsx
./plugins/humand-product-workflow/skills/humand-pm-jira/SKILL.md:83:- `cloudId`, `projectKey`, `issueTypeName`, `summary`
./plugins/humand-product-workflow/skills/humand-pm-jira/SKILL.md:161:- `projectKey`, `issueTypeName`, `summary`
./plugins/humand-product-workflow/skills/humand-pm-jira/SKILL.md:225:Siguen en `skills/humand-pm-jira/scripts/` para tareas puntuales **sin** pasar por el flujo principal del agente:
./plugins/humand-product-workflow/skills/humand-pm-jira/SKILL.md:230:    | python3 skills/humand-pm-jira/scripts/build_adf_from_pages.py
./plugins/humand-product-workflow/skills/humand-pm-jira/SKILL.md:236:  python3 skills/humand-pm-jira/scripts/convert_subtasks_type.py --parent SQPD-3356 --dry-run
./plugins/humand-product-workflow/skills/humand-pm-jira/SKILL.md:237:  python3 skills/humand-pm-jira/scripts/convert_subtasks_type.py --parent SQPD-3356
./plugins/humand-product-workflow/skills/humand-features-notion/SKILL.md:83:📝 Changelog
./plugins/humand-product-workflow/skills/humand-features-notion/SKILL.md:120:  📝 Changelog
./plugins/humand-product-workflow/skills/humand-pm-jira/scripts/convert_subtasks_type.py:165:    fields = ["key", "summary", "issuetype", "parent"]
./plugins/humand-product-workflow/skills/sprint-report/SKILL.md:90:  fields: ["summary","issuetype","status","priority","assignee","parent","customfield_10020","customfield_10021","customfield_10028","customfield_10000","customfield_10097"],
./plugins/humand-product-workflow/skills/sprint-report/SKILL.md:104:python3 scripts/process-sprint-data.py page1.json [page2.json ...] \
./plugins/humand-product-workflow/skills/sprint-report/SKILL.md:129:  --data-urlencode "fields=summary,issuetype,status,priority,assignee,parent,customfield_10020,customfield_10021,customfield_10028,customfield_10000,customfield_10097" \
./plugins/humand-product-workflow/skills/sprint-report/SKILL.md:146:python3 scripts/process-sprint-data.py /tmp/<KEY>-raw.json /tmp/<KEY>-backfill.json \
./plugins/humand-frontend-sandbox/skills/add-super-admin-login/scripts/install-files.ts:47:      'src/providers/AuthProvider.tsx',
./plugins/humand-frontend-sandbox/skills/add-super-admin-login/scripts/install-files.ts:48:      'src/providers/ProtectedRoute.tsx',
./plugins/humand-frontend-sandbox/skills/add-super-admin-login/scripts/install-files.ts:57:      'src/providers/AuthContext.tsx',
./plugins/humand-frontend-sandbox/skills/add-super-admin-login/scripts/install-files.ts:88:  { src: 'AuthContext.tsx',       dest: 'src/providers/AuthContext.tsx' },
./plugins/humand-product-workflow/skills/humand-pm-jira/scripts/jira_client.py:12:    python jira_client.py create-issue --project KEY --summary "..." [--description "..."] [--description-adf path/to/adf.json] [--type Story]
./plugins/humand-product-workflow/skills/humand-pm-jira/scripts/jira_client.py:13:    python jira_client.py create-issue --project KEY --summary "Subtarea" --parent PARENT-KEY --type "Sub-task"
./plugins/humand-product-workflow/skills/humand-pm-jira/scripts/jira_client.py:270:    body = {"jql": jql, "maxResults": max_results, "fields": ["key", "summary", "status"]}
./plugins/humand-product-workflow/skills/humand-pm-jira/scripts/jira_client.py:284:        summary = (fields.get("summary") or "?")[:48]
./plugins/humand-product-workflow/skills/humand-pm-jira/scripts/jira_client.py:286:        print(f"{key:<14} {summary:<50} {status}")
./plugins/humand-product-workflow/skills/humand-pm-jira/scripts/jira_client.py:296:    summary = fields.get("summary", "?")
./plugins/humand-product-workflow/skills/humand-pm-jira/scripts/jira_client.py:302:    print(f"Summary: {summary}")
./plugins/humand-product-workflow/skills/humand-pm-jira/scripts/jira_client.py:418:def cmd_create_issue(config, project_key, summary, description=None, description_adf_path=None, issuetype="Story", mini_app=None, parent_key=None, components=None, priority=None):
./plugins/humand-product-workflow/skills/humand-pm-jira/scripts/jira_client.py:425:            "summary": summary,
./plugins/humand-product-workflow/skills/humand-pm-jira/scripts/jira_client.py:552:    create_parser.add_argument("--summary", required=True, help="Issue summary")
./plugins/humand-product-workflow/skills/humand-pm-jira/scripts/jira_client.py:591:        cmd_create_issue(config, args.project, args.summary, desc, args.description_adf_path, args.issuetype, args.mini_app, args.parent_key, args.components, args.priority)

[Showing lines 211-533 of 533 (50.0KB limit). Full output: /tmp/pi-bash-79dbe266c54e7755.log]