[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6QNK6AC1TKB9CZ2NNPA9DN5":3,"skill-same:01M6QNK6AC1TKB9CZ2NNPA9DN5":96},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":59,"commitSha":60,"skillDirectory":61,"forksCount":14,"repositoryHtmlUrl":62,"repositoryHomepageUrl":63,"ownerHtmlUrl":64,"ownerBlogUrl":65,"ownerDescription":66,"updatedAt":67,"install":68,"resources":81},"01M6QNK6AC1TKB9CZ2NNPA9DN5","tensorboard",null,"Visualize training metrics, debug models with histograms, compare experiments, visualize model graphs, and profile performance with TensorBoard - Google's ML visualization toolkit","Tashima-Tarsh\u002FDisha6.6","Tashima-Tarsh","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F269906498?v=4","01M6PBH98X03XERH0HFT4PFB1P","NITISH KUMAR","01M6PBH9DA0M6KM3Z12P848F0K",0,"MIT","https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fqc-tensorboard\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000013","分析与可视化","SCENARIO","使用场景",[5,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"metrics","orchestra","Model Debugging","Training Metrics","Experiment Tracking","ai-research","experiment","model","performance profiling","google","visualization","debugging","training","pytorch","debug","experiments","tensorflow","performance","visualize","2026-11-10 10:12:30",false,"---\nname: tensorboard\ndescription: Visualize training metrics, debug models with histograms, compare experiments, visualize model graphs, and profile performance with TensorBoard - Google's ML visualization toolkit\nversion: 1.0.0\nauthor: Orchestra Research\nlicense: MIT\ntags: [MLOps, TensorBoard, Visualization, Training Metrics, Model Debugging, PyTorch, TensorFlow, Experiment Tracking, Performance Profiling]\ndependencies: [tensorboard, torch, tensorflow]\ncategory: \"ai-research\"\n---\n\n# TensorBoard: Visualization Toolkit for ML\n\n## When to Use This Skill\n\nUse TensorBoard when you need to:\n- **Visualize training metrics** like loss and accuracy over time\n- **Debug models** with histograms and distributions\n- **Compare experiments** across multiple runs\n- **Visualize model graphs** and architecture\n- **Project embeddings** to lower dimensions (t-SNE, PCA)\n- **Track hyperparameter** experiments\n- **Profile performance** and identify bottlenecks\n- **Visualize images and text** during training\n\n**Users**: 20M+ downloads\u002Fyear | **GitHub Stars**: 27k+ | **License**: Apache 2.0\n\n## Installation\n\n```bash\n# Install TensorBoard\npip install tensorboard\n\n# PyTorch integration\npip install torch torchvision tensorboard\n\n# TensorFlow integration (TensorBoard included)\npip install tensorflow\n\n# Launch TensorBoard\ntensorboard --logdir=runs\n# Access at http:\u002F\u002Flocalhost:6006\n```\n\n## Quick Start\n\n### PyTorch\n\n```python\nfrom torch.utils.tensorboard import SummaryWriter\n\n# Create writer\nwriter = SummaryWriter('runs\u002Fexperiment_1')\n\n# Training loop\nfor epoch in range(10):\n    train_loss = train_epoch()\n    val_acc = validate()\n\n    # Log metrics\n    writer.add_scalar('Loss\u002Ftrain', train_loss, epoch)\n    writer.add_scalar('Accuracy\u002Fval', val_acc, epoch)\n\n# Close writer\nwriter.close()\n\n# Launch: tensorboard --logdir=runs\n```\n\n### TensorFlow\u002FKeras\n\n```python\nimport tensorflow as tf\n\n# Create callback\ntensorboard_callback = tf.keras.callbacks.TensorBoard(\n    log_dir='logs\u002Ffit',\n    histogram_freq=1\n)\n\n# Train model\nmodel.fit(\n    x_train, y_train,\n    epochs=10,\n    validation_data=(x_val, y_val),\n    callbacks=[tensorboard_callback]\n)\n\n# Launch: tensorboard --logdir=logs\n```\n\n## Core Concepts\n\n### 1. SummaryWriter (PyTorch)\n\n```python\nfrom torch.utils.tensorboard import SummaryWriter\n\n# Default directory: runs\u002FCURRENT_DATETIME\nwriter = SummaryWriter()\n\n# Custom directory\nwriter = SummaryWriter('runs\u002Fexperiment_1')\n\n# Custom comment (appended to default directory)\nwriter = SummaryWriter(comment='baseline')\n\n# Log data\nwriter.add_scalar('Loss\u002Ftrain', 0.5, step=0)\nwriter.add_scalar('Loss\u002Ftrain', 0.3, step=1)\n\n# Flush and close\nwriter.flush()\nwriter.close()\n```\n\n### 2. Logging Scalars\n\n```python\n# PyTorch\nfrom torch.utils.tensorboard import SummaryWriter\nwriter = SummaryWriter()\n\nfor epoch in range(100):\n    train_loss = train()\n    val_loss = validate()\n\n    # Log individual metrics\n    writer.add_scalar('Loss\u002Ftrain', train_loss, epoch)\n    writer.add_scalar('Loss\u002Fval', val_loss, epoch)\n    writer.add_scalar('Accuracy\u002Ftrain', train_acc, epoch)\n    writer.add_scalar('Accuracy\u002Fval', val_acc, epoch)\n\n    # Learning rate\n    lr = optimizer.param_groups[0]['lr']\n    writer.add_scalar('Learning_rate', lr, epoch)\n\nwriter.close()\n```\n\n```python\n# TensorFlow\nimport tensorflow as tf\n\ntrain_summary_writer = tf.summary.create_file_writer('logs\u002Ftrain')\nval_summary_writer = tf.summary.create_file_writer('logs\u002Fval')\n\nfor epoch in range(100):\n    with train_summary_writer.as_default():\n        tf.summary.scalar('loss', train_loss, step=epoch)\n        tf.summary.scalar('accuracy', train_acc, step=epoch)\n\n    with val_summary_writer.as_default():\n        tf.summary.scalar('loss', val_loss, step=epoch)\n        tf.summary.scalar('accuracy', val_acc, step=epoch)\n```\n\n### 3. Logging Multiple Scalars\n\n```python\n# PyTorch: Group related metrics\nwriter.add_scalars('Loss', {\n    'train': train_loss,\n    'validation': val_loss,\n    'test': test_loss\n}, epoch)\n\nwriter.add_scalars('Metrics', {\n    'accuracy': accuracy,\n    'precision': precision,\n    'recall': recall,\n    'f1': f1_score\n}, epoch)\n```\n\n### 4. Logging Images\n\n```python\n# PyTorch\nimport torch\nfrom torchvision.utils import make_grid\n\n# Single image\nwriter.add_image('Input\u002Fsample', img_tensor, epoch)\n\n# Multiple images as grid\nimg_grid = make_grid(images[:64], nrow=8)\nwriter.add_image('Batch\u002Finputs', img_grid, epoch)\n\n# Predictions visualization\npred_grid = make_grid(predictions[:16], nrow=4)\nwriter.add_image('Predictions', pred_grid, epoch)\n```\n\n```python\n# TensorFlow\nimport tensorflow as tf\n\nwith file_writer.as_default():\n    # Encode images as PNG\n    tf.summary.image('Training samples', images, step=epoch, max_outputs=25)\n```\n\n### 5. Logging Histograms\n\n```python\n# PyTorch: Track weight distributions\nfor name, param in model.named_parameters():\n    writer.add_histogram(name, param, epoch)\n\n    # Track gradients\n    if param.grad is not None:\n        writer.add_histogram(f'{name}.grad', param.grad, epoch)\n\n# Track activations\nwriter.add_histogram('Activations\u002Frelu1', activations, epoch)\n```\n\n```python\n# TensorFlow\nwith file_writer.as_default():\n    tf.summary.histogram('weights\u002Flayer1', layer1.kernel, step=epoch)\n    tf.summary.histogram('activations\u002Frelu1', activations, step=epoch)\n```\n\n### 6. Logging Model Graph\n\n```python\n# PyTorch\nimport torch\n\nmodel = MyModel()\ndummy_input = torch.randn(1, 3, 224, 224)\n\nwriter.add_graph(model, dummy_input)\nwriter.close()\n```\n\n```python\n# TensorFlow (automatic with Keras)\ntensorboard_callback = tf.keras.callbacks.TensorBoard(\n    log_dir='logs',\n    write_graph=True\n)\n\nmodel.fit(x, y, callbacks=[tensorboard_callback])\n```\n\n## Advanced Features\n\n### Embedding Projector\n\nVisualize high-dimensional data (embeddings, features) in 2D\u002F3D.\n\n```python\nimport torch\nfrom torch.utils.tensorboard import SummaryWriter\n\n# Get embeddings (e.g., word embeddings, image features)\nembeddings = model.get_embeddings(data)  # Shape: (N, embedding_dim)\n\n# Metadata (labels for each point)\nmetadata = ['class_1', 'class_2', 'class_1', ...]\n\n# Images (optional, for image embeddings)\nlabel_images = torch.stack([img1, img2, img3, ...])\n\n# Log to TensorBoard\nwriter.add_embedding(\n    embeddings,\n    metadata=metadata,\n    label_img=label_images,\n    global_step=epoch\n)\n```\n\n**In TensorBoard:**\n- Navigate to \"Projector\" tab\n- Choose PCA, t-SNE, or UMAP visualization\n- Search, filter, and explore clusters\n\n### Hyperparameter Tuning\n\n```python\nfrom torch.utils.tensorboard import SummaryWriter\n\n# Try different hyperparameters\nfor lr in [0.001, 0.01, 0.1]:\n    for batch_size in [16, 32, 64]:\n        # Create unique run directory\n        writer = SummaryWriter(f'runs\u002Flr{lr}_bs{batch_size}')\n\n        # Log hyperparameters\n        writer.add_hparams(\n            {'lr': lr, 'batch_size': batch_size},\n            {'hparam\u002Faccuracy': final_acc, 'hparam\u002Floss': final_loss}\n        )\n\n        # Train and log\n        for epoch in range(10):\n            loss = train(lr, batch_size)\n            writer.add_scalar('Loss\u002Ftrain', loss, epoch)\n\n        writer.close()\n\n# Compare in TensorBoard's \"HParams\" tab\n```\n\n### Text Logging\n\n```python\n# PyTorch: Log text (e.g., model predictions, summaries)\nwriter.add_text('Predictions', f'Epoch {epoch}: {predictions}', epoch)\nwriter.add_text('Config', str(config), 0)\n\n# Log markdown tables\nmarkdown_table = \"\"\"\n| Metric | Value |\n|--------|-------|\n| Accuracy | 0.95 |\n| F1 Score | 0.93 |\n\"\"\"\nwriter.add_text('Results', markdown_table, epoch)\n```\n\n### PR Curves\n\nPrecision-Recall curves for classification.\n\n```python\nfrom torch.utils.tensorboard import SummaryWriter\n\n# Get predictions and labels\npredictions = model(test_data)  # Shape: (N, num_classes)\nlabels = test_labels  # Shape: (N,)\n\n# Log PR curve for each class\nfor i in range(num_classes):\n    writer.add_pr_curve(\n        f'PR_curve\u002Fclass_{i}',\n        labels == i,\n        predictions[:, i],\n        global_step=epoch\n    )\n```\n\n## Integration Examples\n\n### PyTorch Training Loop\n\n```python\nimport torch\nimport torch.nn as nn\nfrom torch.utils.tensorboard import SummaryWriter\n\n# Setup\nwriter = SummaryWriter('runs\u002Fresnet_experiment')\nmodel = ResNet50()\noptimizer = torch.optim.Adam(model.parameters(), lr=0.001)\ncriterion = nn.CrossEntropyLoss()\n\n# Log model graph\ndummy_input = torch.randn(1, 3, 224, 224)\nwriter.add_graph(model, dummy_input)\n\n# Training loop\nfor epoch in range(50):\n    model.train()\n    train_loss = 0.0\n    train_correct = 0\n\n    for batch_idx, (data, target) in enumerate(train_loader):\n        optimizer.zero_grad()\n        output = model(data)\n        loss = criterion(output, target)\n        loss.backward()\n        optimizer.step()\n\n        train_loss += loss.item()\n        pred = output.argmax(dim=1)\n        train_correct += pred.eq(target).sum().item()\n\n        # Log batch metrics (every 100 batches)\n        if batch_idx % 100 == 0:\n            global_step = epoch * len(train_loader) + batch_idx\n            writer.add_scalar('Loss\u002Ftrain_batch', loss.item(), global_step)\n\n    # Epoch metrics\n    train_loss \u002F= len(train_loader)\n    train_acc = train_correct \u002F len(train_loader.dataset)\n\n    # Validation\n    model.eval()\n    val_loss = 0.0\n    val_correct = 0\n\n    with torch.no_grad():\n        for data, target in val_loader:\n            output = model(data)\n            val_loss += criterion(output, target).item()\n            pred = output.argmax(dim=1)\n            val_correct += pred.eq(target).sum().item()\n\n    val_loss \u002F= len(val_loader)\n    val_acc = val_correct \u002F len(val_loader.dataset)\n\n    # Log epoch metrics\n    writer.add_scalars('Loss', {'train': train_loss, 'val': val_loss}, epoch)\n    writer.add_scalars('Accuracy', {'train': train_acc, 'val': val_acc}, epoch)\n\n    # Log learning rate\n    writer.add_scalar('Learning_rate', optimizer.param_groups[0]['lr'], epoch)\n\n    # Log histograms (every 5 epochs)\n    if epoch % 5 == 0:\n        for name, param in model.named_parameters():\n            writer.add_histogram(name, param, epoch)\n\n    # Log sample predictions\n    if epoch % 10 == 0:\n        sample_images = data[:8]\n        writer.add_image('Sample_inputs', make_grid(sample_images), epoch)\n\nwriter.close()\n```\n\n### TensorFlow\u002FKeras Training\n\n```python\nimport tensorflow as tf\n\n# Define model\nmodel = tf.keras.models.Sequential([\n    tf.keras.layers.Conv2D(32, 3, activation='relu', input_shape=(28, 28, 1)),\n    tf.keras.layers.MaxPooling2D(),\n    tf.keras.layers.Flatten(),\n    tf.keras.layers.Dense(128, activation='relu'),\n    tf.keras.layers.Dense(10, activation='softmax')\n])\n\nmodel.compile(\n    optimizer='adam',\n    loss='sparse_categorical_crossentropy',\n    metrics=['accuracy']\n)\n\n# TensorBoard callback\ntensorboard_callback = tf.keras.callbacks.TensorBoard(\n    log_dir='logs\u002Ffit',\n    histogram_freq=1,          # Log histograms every epoch\n    write_graph=True,          # Visualize model graph\n    write_images=True,         # Visualize weights as images\n    update_freq='epoch',       # Log metrics every epoch\n    profile_batch='500,520',   # Profile batches 500-520\n    embeddings_freq=1          # Log embeddings every epoch\n)\n\n# Train\nmodel.fit(\n    x_train, y_train,\n    epochs=10,\n    validation_data=(x_val, y_val),\n    callbacks=[tensorboard_callback]\n)\n```\n\n## Comparing Experiments\n\n### Multiple Runs\n\n```bash\n# Run experiments with different configs\npython train.py --lr 0.001 --logdir runs\u002Fexp1\npython train.py --lr 0.01 --logdir runs\u002Fexp2\npython train.py --lr 0.1 --logdir runs\u002Fexp3\n\n# View all runs together\ntensorboard --logdir=runs\n```\n\n**In TensorBoard:**\n- All runs appear in the same dashboard\n- Toggle runs on\u002Foff for comparison\n- Use regex to filter run names\n- Overlay charts to compare metrics\n\n### Organizing Experiments\n\n```python\n# Hierarchical organization\nruns\u002F\n├── baseline\u002F\n│   ├── run_1\u002F\n│   └── run_2\u002F\n├── improved\u002F\n│   ├── run_1\u002F\n│   └── run_2\u002F\n└── final\u002F\n    └── run_1\u002F\n\n# Log with hierarchy\nwriter = SummaryWriter('runs\u002Fbaseline\u002Frun_1')\n```\n\n## Best Practices\n\n### 1. Use Descriptive Run Names\n\n```python\n# ✅ Good: Descriptive names\nfrom datetime import datetime\ntimestamp = datetime.now().strftime('%Y%m%d_%H%M%S')\nwriter = SummaryWriter(f'runs\u002Fresnet50_lr0.001_bs32_{timestamp}')\n\n# ❌ Bad: Auto-generated names\nwriter = SummaryWriter()  # Creates runs\u002FJan01_12-34-56_hostname\n```\n\n### 2. Group Related Metrics\n\n```python\n# ✅ Good: Grouped metrics\nwriter.add_scalar('Loss\u002Ftrain', train_loss, step)\nwriter.add_scalar('Loss\u002Fval', val_loss, step)\nwriter.add_scalar('Accuracy\u002Ftrain', train_acc, step)\nwriter.add_scalar('Accuracy\u002Fval', val_acc, step)\n\n# ❌ Bad: Flat namespace\nwriter.add_scalar('train_loss', train_loss, step)\nwriter.add_scalar('val_loss', val_loss, step)\n```\n\n### 3. Log Regularly but Not Too Often\n\n```python\n# ✅ Good: Log epoch metrics always, batch metrics occasionally\nfor epoch in range(100):\n    for batch_idx, (data, target) in enumerate(train_loader):\n        loss = train_step(data, target)\n\n        # Log every 100 batches\n        if batch_idx % 100 == 0:\n            writer.add_scalar('Loss\u002Fbatch', loss, global_step)\n\n    # Always log epoch metrics\n    writer.add_scalar('Loss\u002Fepoch', epoch_loss, epoch)\n\n# ❌ Bad: Log every batch (creates huge log files)\nfor batch in train_loader:\n    writer.add_scalar('Loss', loss, step)  # Too frequent\n```\n\n### 4. Close Writer When Done\n\n```python\n# ✅ Good: Use context manager\nwith SummaryWriter('runs\u002Fexp1') as writer:\n    for epoch in range(10):\n        writer.add_scalar('Loss', loss, epoch)\n# Automatically closes\n\n# Or manually\nwriter = SummaryWriter('runs\u002Fexp1')\n# ... logging ...\nwriter.close()\n```\n\n### 5. Use Separate Writers for Train\u002FVal\n\n```python\n# ✅ Good: Separate log directories\ntrain_writer = SummaryWriter('runs\u002Fexp1\u002Ftrain')\nval_writer = SummaryWriter('runs\u002Fexp1\u002Fval')\n\ntrain_writer.add_scalar('loss', train_loss, epoch)\nval_writer.add_scalar('loss', val_loss, epoch)\n```\n\n## Performance Profiling\n\n### TensorFlow Profiler\n\n```python\n# Enable profiling\ntensorboard_callback = tf.keras.callbacks.TensorBoard(\n    log_dir='logs',\n    profile_batch='10,20'  # Profile batches 10-20\n)\n\nmodel.fit(x, y, callbacks=[tensorboard_callback])\n\n# View in TensorBoard Profile tab\n# Shows: GPU utilization, kernel stats, memory usage, bottlenecks\n```\n\n### PyTorch Profiler\n\n```python\nimport torch.profiler as profiler\n\nwith profiler.profile(\n    activities=[\n        profiler.ProfilerActivity.CPU,\n        profiler.ProfilerActivity.CUDA\n    ],\n    on_trace_ready=torch.profiler.tensorboard_trace_handler('.\u002Fruns\u002Fprofiler'),\n    record_shapes=True,\n    with_stack=True\n) as prof:\n    for batch in train_loader:\n        loss = train_step(batch)\n        prof.step()\n\n# View in TensorBoard Profile tab\n```\n\n## Resources\n\n- **Documentation**: https:\u002F\u002Fwww.tensorflow.org\u002Ftensorboard\n- **PyTorch Integration**: https:\u002F\u002Fpytorch.org\u002Fdocs\u002Fstable\u002Ftensorboard.html\n- **GitHub**: https:\u002F\u002Fgithub.com\u002Ftensorflow\u002Ftensorboard (27k+ stars)\n- **TensorBoard.dev**: https:\u002F\u002Ftensorboard.dev (share experiments publicly)\n\n## See Also\n\n- `references\u002Fvisualization.md` - Comprehensive visualization guide\n- `references\u002Fprofiling.md` - Performance profiling patterns\n- `references\u002Fintegrations.md` - Framework-specific integration examples\n\n\n","# TensorBoard: Visualization Toolkit for ML\n\n## When to Use This Skill\n\nUse TensorBoard when you need to:\n- **Visualize training metrics** like loss and accuracy over time\n- **Debug models** with histograms and distributions\n- **Compare experiments** across multiple runs\n- **Visualize model graphs** and architecture\n- **Project embeddings** to lower dimensions (t-SNE, PCA)\n- **Track hyperparameter** experiments\n- **Profile performance** and identify bottlenecks\n- **Visualize images and text** during training\n\n**Users**: 20M+ downloads\u002Fyear | **GitHub Stars**: 27k+ | **License**: Apache 2.0\n\n## Installation\n\n```bash\n# Install TensorBoard\npip install tensorboard\n\n# PyTorch integration\npip install torch torchvision tensorboard\n\n# TensorFlow integration (TensorBoard included)\npip install tensorflow\n\n# Launch TensorBoard\ntensorboard --logdir=runs\n# Access at http:\u002F\u002Flocalhost:6006\n```\n\n## Quick Start\n\n### PyTorch\n\n```python\nfrom torch.utils.tensorboard import SummaryWriter\n\n# Create writer\nwriter = SummaryWriter('runs\u002Fexperiment_1')\n\n# Training loop\nfor epoch in range(10):\n    train_loss = train_epoch()\n    val_acc = validate()\n\n    # Log metrics\n    writer.add_scalar('Loss\u002Ftrain', train_loss, epoch)\n    writer.add_scalar('Accuracy\u002Fval', val_acc, epoch)\n\n# Close writer\nwriter.close()\n\n# Launch: tensorboard --logdir=runs\n```\n\n### TensorFlow\u002FKeras\n\n```python\nimport tensorflow as tf\n\n# Create callback\ntensorboard_callback = tf.keras.callbacks.TensorBoard(\n    log_dir='logs\u002Ffit',\n    histogram_freq=1\n)\n\n# Train model\nmodel.fit(\n    x_train, y_train,\n    epochs=10,\n    validation_data=(x_val, y_val),\n    callbacks=[tensorboard_callback]\n)\n\n# Launch: tensorboard --logdir=logs\n```\n\n## Core Concepts\n\n### 1. SummaryWriter (PyTorch)\n\n```python\nfrom torch.utils.tensorboard import SummaryWriter\n\n# Default directory: runs\u002FCURRENT_DATETIME\nwriter = SummaryWriter()\n\n# Custom directory\nwriter = SummaryWriter('runs\u002Fexperiment_1')\n\n# Custom comment (appended to default directory)\nwriter = SummaryWriter(comment='baseline')\n\n# Log data\nwriter.add_scalar('Loss\u002Ftrain', 0.5, step=0)\nwriter.add_scalar('Loss\u002Ftrain', 0.3, step=1)\n\n# Flush and close\nwriter.flush()\nwriter.close()\n```\n\n### 2. Logging Scalars\n\n```python\n# PyTorch\nfrom torch.utils.tensorboard import SummaryWriter\nwriter = SummaryWriter()\n\nfor epoch in range(100):\n    train_loss = train()\n    val_loss = validate()\n\n    # Log individual metrics\n    writer.add_scalar('Loss\u002Ftrain', train_loss, epoch)\n    writer.add_scalar('Loss\u002Fval', val_loss, epoch)\n    writer.add_scalar('Accuracy\u002Ftrain', train_acc, epoch)\n    writer.add_scalar('Accuracy\u002Fval', val_acc, epoch)\n\n    # Learning rate\n    lr = optimizer.param_groups[0]['lr']\n    writer.add_scalar('Learning_rate', lr, epoch)\n\nwriter.close()\n```\n\n```python\n# TensorFlow\nimport tensorflow as tf\n\ntrain_summary_writer = tf.summary.create_file_writer('logs\u002Ftrain')\nval_summary_writer = tf.summary.create_file_writer('logs\u002Fval')\n\nfor epoch in range(100):\n    with train_summary_writer.as_default():\n        tf.summary.scalar('loss', train_loss, step=epoch)\n        tf.summary.scalar('accuracy', train_acc, step=epoch)\n\n    with val_summary_writer.as_default():\n        tf.summary.scalar('loss', val_loss, step=epoch)\n        tf.summary.scalar('accuracy', val_acc, step=epoch)\n```\n\n### 3. Logging Multiple Scalars\n\n```python\n# PyTorch: Group related metrics\nwriter.add_scalars('Loss', {\n    'train': train_loss,\n    'validation': val_loss,\n    'test': test_loss\n}, epoch)\n\nwriter.add_scalars('Metrics', {\n    'accuracy': accuracy,\n    'precision': precision,\n    'recall': recall,\n    'f1': f1_score\n}, epoch)\n```\n\n### 4. Logging Images\n\n```python\n# PyTorch\nimport torch\nfrom torchvision.utils import make_grid\n\n# Single image\nwriter.add_image('Input\u002Fsample', img_tensor, epoch)\n\n# Multiple images as grid\nimg_grid = make_grid(images[:64], nrow=8)\nwriter.add_image('Batch\u002Finputs', img_grid, epoch)\n\n# Predictions visualization\npred_grid = make_grid(predictions[:16], nrow=4)\nwriter.add_image('Predictions', pred_grid, epoch)\n```\n\n```python\n# TensorFlow\nimport tensorflow as tf\n\nwith file_writer.as_default():\n    # Encode images as PNG\n    tf.summary.image('Training samples', images, step=epoch, max_outputs=25)\n```\n\n### 5. Logging Histograms\n\n```python\n# PyTorch: Track weight distributions\nfor name, param in model.named_parameters():\n    writer.add_histogram(name, param, epoch)\n\n    # Track gradients\n    if param.grad is not None:\n        writer.add_histogram(f'{name}.grad', param.grad, epoch)\n\n# Track activations\nwriter.add_histogram('Activations\u002Frelu1', activations, epoch)\n```\n\n```python\n# TensorFlow\nwith file_writer.as_default():\n    tf.summary.histogram('weights\u002Flayer1', layer1.kernel, step=epoch)\n    tf.summary.histogram('activations\u002Frelu1', activations, step=epoch)\n```\n\n### 6. Logging Model Graph\n\n```python\n# PyTorch\nimport torch\n\nmodel = MyModel()\ndummy_input = torch.randn(1, 3, 224, 224)\n\nwriter.add_graph(model, dummy_input)\nwriter.close()\n```\n\n```python\n# TensorFlow (automatic with Keras)\ntensorboard_callback = tf.keras.callbacks.TensorBoard(\n    log_dir='logs',\n    write_graph=True\n)\n\nmodel.fit(x, y, callbacks=[tensorboard_callback])\n```\n\n## Advanced Features\n\n### Embedding Projector\n\nVisualize high-dimensional data (embeddings, features) in 2D\u002F3D.\n\n```python\nimport torch\nfrom torch.utils.tensorboard import SummaryWriter\n\n# Get embeddings (e.g., word embeddings, image features)\nembeddings = model.get_embeddings(data)  # Shape: (N, embedding_dim)\n\n# Metadata (labels for each point)\nmetadata = ['class_1', 'class_2', 'class_1', ...]\n\n# Images (optional, for image embeddings)\nlabel_images = torch.stack([img1, img2, img3, ...])\n\n# Log to TensorBoard\nwriter.add_embedding(\n    embeddings,\n    metadata=metadata,\n    label_img=label_images,\n    global_step=epoch\n)\n```\n\n**In TensorBoard:**\n- Navigate to \"Projector\" tab\n- Choose PCA, t-SNE, or UMAP visualization\n- Search, filter, and explore clusters\n\n### Hyperparameter Tuning\n\n```python\nfrom torch.utils.tensorboard import SummaryWriter\n\n# Try different hyperparameters\nfor lr in [0.001, 0.01, 0.1]:\n    for batch_size in [16, 32, 64]:\n        # Create unique run directory\n        writer = SummaryWriter(f'runs\u002Flr{lr}_bs{batch_size}')\n\n        # Log hyperparameters\n        writer.add_hparams(\n            {'lr': lr, 'batch_size': batch_size},\n            {'hparam\u002Faccuracy': final_acc, 'hparam\u002Floss': final_loss}\n        )\n\n        # Train and log\n        for epoch in range(10):\n            loss = train(lr, batch_size)\n            writer.add_scalar('Loss\u002Ftrain', loss, epoch)\n\n        writer.close()\n\n# Compare in TensorBoard's \"HParams\" tab\n```\n\n### Text Logging\n\n```python\n# PyTorch: Log text (e.g., model predictions, summaries)\nwriter.add_text('Predictions', f'Epoch {epoch}: {predictions}', epoch)\nwriter.add_text('Config', str(config), 0)\n\n# Log markdown tables\nmarkdown_table = \"\"\"\n| Metric | Value |\n|--------|-------|\n| Accuracy | 0.95 |\n| F1 Score | 0.93 |\n\"\"\"\nwriter.add_text('Results', markdown_table, epoch)\n```\n\n### PR Curves\n\nPrecision-Recall curves for classification.\n\n```python\nfrom torch.utils.tensorboard import SummaryWriter\n\n# Get predictions and labels\npredictions = model(test_data)  # Shape: (N, num_classes)\nlabels = test_labels  # Shape: (N,)\n\n# Log PR curve for each class\nfor i in range(num_classes):\n    writer.add_pr_curve(\n        f'PR_curve\u002Fclass_{i}',\n        labels == i,\n        predictions[:, i],\n        global_step=epoch\n    )\n```\n\n## Integration Examples\n\n### PyTorch Training Loop\n\n```python\nimport torch\nimport torch.nn as nn\nfrom torch.utils.tensorboard import SummaryWriter\n\n# Setup\nwriter = SummaryWriter('runs\u002Fresnet_experiment')\nmodel = ResNet50()\noptimizer = torch.optim.Adam(model.parameters(), lr=0.001)\ncriterion = nn.CrossEntropyLoss()\n\n# Log model graph\ndummy_input = torch.randn(1, 3, 224, 224)\nwriter.add_graph(model, dummy_input)\n\n# Training loop\nfor epoch in range(50):\n    model.train()\n    train_loss = 0.0\n    train_correct = 0\n\n    for batch_idx, (data, target) in enumerate(train_loader):\n        optimizer.zero_grad()\n        output = model(data)\n        loss = criterion(output, target)\n        loss.backward()\n        optimizer.step()\n\n        train_loss += loss.item()\n        pred = output.argmax(dim=1)\n        train_correct += pred.eq(target).sum().item()\n\n        # Log batch metrics (every 100 batches)\n        if batch_idx % 100 == 0:\n            global_step = epoch * len(train_loader) + batch_idx\n            writer.add_scalar('Loss\u002Ftrain_batch', loss.item(), global_step)\n\n    # Epoch metrics\n    train_loss \u002F= len(train_loader)\n    train_acc = train_correct \u002F len(train_loader.dataset)\n\n    # Validation\n    model.eval()\n    val_loss = 0.0\n    val_correct = 0\n\n    with torch.no_grad():\n        for data, target in val_loader:\n            output = model(data)\n            val_loss += criterion(output, target).item()\n            pred = output.argmax(dim=1)\n            val_correct += pred.eq(target).sum().item()\n\n    val_loss \u002F= len(val_loader)\n    val_acc = val_correct \u002F len(val_loader.dataset)\n\n    # Log epoch metrics\n    writer.add_scalars('Loss', {'train': train_loss, 'val': val_loss}, epoch)\n    writer.add_scalars('Accuracy', {'train': train_acc, 'val': val_acc}, epoch)\n\n    # Log learning rate\n    writer.add_scalar('Learning_rate', optimizer.param_groups[0]['lr'], epoch)\n\n    # Log histograms (every 5 epochs)\n    if epoch % 5 == 0:\n        for name, param in model.named_parameters():\n            writer.add_histogram(name, param, epoch)\n\n    # Log sample predictions\n    if epoch % 10 == 0:\n        sample_images = data[:8]\n        writer.add_image('Sample_inputs', make_grid(sample_images), epoch)\n\nwriter.close()\n```\n\n### TensorFlow\u002FKeras Training\n\n```python\nimport tensorflow as tf\n\n# Define model\nmodel = tf.keras.models.Sequential([\n    tf.keras.layers.Conv2D(32, 3, activation='relu', input_shape=(28, 28, 1)),\n    tf.keras.layers.MaxPooling2D(),\n    tf.keras.layers.Flatten(),\n    tf.keras.layers.Dense(128, activation='relu'),\n    tf.keras.layers.Dense(10, activation='softmax')\n])\n\nmodel.compile(\n    optimizer='adam',\n    loss='sparse_categorical_crossentropy',\n    metrics=['accuracy']\n)\n\n# TensorBoard callback\ntensorboard_callback = tf.keras.callbacks.TensorBoard(\n    log_dir='logs\u002Ffit',\n    histogram_freq=1,          # Log histograms every epoch\n    write_graph=True,          # Visualize model graph\n    write_images=True,         # Visualize weights as images\n    update_freq='epoch',       # Log metrics every epoch\n    profile_batch='500,520',   # Profile batches 500-520\n    embeddings_freq=1          # Log embeddings every epoch\n)\n\n# Train\nmodel.fit(\n    x_train, y_train,\n    epochs=10,\n    validation_data=(x_val, y_val),\n    callbacks=[tensorboard_callback]\n)\n```\n\n## Comparing Experiments\n\n### Multiple Runs\n\n```bash\n# Run experiments with different configs\npython train.py --lr 0.001 --logdir runs\u002Fexp1\npython train.py --lr 0.01 --logdir runs\u002Fexp2\npython train.py --lr 0.1 --logdir runs\u002Fexp3\n\n# View all runs together\ntensorboard --logdir=runs\n```\n\n**In TensorBoard:**\n- All runs appear in the same dashboard\n- Toggle runs on\u002Foff for comparison\n- Use regex to filter run names\n- Overlay charts to compare metrics\n\n### Organizing Experiments\n\n```python\n# Hierarchical organization\nruns\u002F\n├── baseline\u002F\n│   ├── run_1\u002F\n│   └── run_2\u002F\n├── improved\u002F\n│   ├── run_1\u002F\n│   └── run_2\u002F\n└── final\u002F\n    └── run_1\u002F\n\n# Log with hierarchy\nwriter = SummaryWriter('runs\u002Fbaseline\u002Frun_1')\n```\n\n## Best Practices\n\n### 1. Use Descriptive Run Names\n\n```python\n# ✅ Good: Descriptive names\nfrom datetime import datetime\ntimestamp = datetime.now().strftime('%Y%m%d_%H%M%S')\nwriter = SummaryWriter(f'runs\u002Fresnet50_lr0.001_bs32_{timestamp}')\n\n# ❌ Bad: Auto-generated names\nwriter = SummaryWriter()  # Creates runs\u002FJan01_12-34-56_hostname\n```\n\n### 2. Group Related Metrics\n\n```python\n# ✅ Good: Grouped metrics\nwriter.add_scalar('Loss\u002Ftrain', train_loss, step)\nwriter.add_scalar('Loss\u002Fval', val_loss, step)\nwriter.add_scalar('Accuracy\u002Ftrain', train_acc, step)\nwriter.add_scalar('Accuracy\u002Fval', val_acc, step)\n\n# ❌ Bad: Flat namespace\nwriter.add_scalar('train_loss', train_loss, step)\nwriter.add_scalar('val_loss', val_loss, step)\n```\n\n### 3. Log Regularly but Not Too Often\n\n```python\n# ✅ Good: Log epoch metrics always, batch metrics occasionally\nfor epoch in range(100):\n    for batch_idx, (data, target) in enumerate(train_loader):\n        loss = train_step(data, target)\n\n        # Log every 100 batches\n        if batch_idx % 100 == 0:\n            writer.add_scalar('Loss\u002Fbatch', loss, global_step)\n\n    # Always log epoch metrics\n    writer.add_scalar('Loss\u002Fepoch', epoch_loss, epoch)\n\n# ❌ Bad: Log every batch (creates huge log files)\nfor batch in train_loader:\n    writer.add_scalar('Loss', loss, step)  # Too frequent\n```\n\n### 4. Close Writer When Done\n\n```python\n# ✅ Good: Use context manager\nwith SummaryWriter('runs\u002Fexp1') as writer:\n    for epoch in range(10):\n        writer.add_scalar('Loss', loss, epoch)\n# Automatically closes\n\n# Or manually\nwriter = SummaryWriter('runs\u002Fexp1')\n# ... logging ...\nwriter.close()\n```\n\n### 5. Use Separate Writers for Train\u002FVal\n\n```python\n# ✅ Good: Separate log directories\ntrain_writer = SummaryWriter('runs\u002Fexp1\u002Ftrain')\nval_writer = SummaryWriter('runs\u002Fexp1\u002Fval')\n\ntrain_writer.add_scalar('loss', train_loss, epoch)\nval_writer.add_scalar('loss', val_loss, epoch)\n```\n\n## Performance Profiling\n\n### TensorFlow Profiler\n\n```python\n# Enable profiling\ntensorboard_callback = tf.keras.callbacks.TensorBoard(\n    log_dir='logs',\n    profile_batch='10,20'  # Profile batches 10-20\n)\n\nmodel.fit(x, y, callbacks=[tensorboard_callback])\n\n# View in TensorBoard Profile tab\n# Shows: GPU utilization, kernel stats, memory usage, bottlenecks\n```\n\n### PyTorch Profiler\n\n```python\nimport torch.profiler as profiler\n\nwith profiler.profile(\n    activities=[\n        profiler.ProfilerActivity.CPU,\n        profiler.ProfilerActivity.CUDA\n    ],\n    on_trace_ready=torch.profiler.tensorboard_trace_handler('.\u002Fruns\u002Fprofiler'),\n    record_shapes=True,\n    with_stack=True\n) as prof:\n    for batch in train_loader:\n        loss = train_step(batch)\n        prof.step()\n\n# View in TensorBoard Profile tab\n```\n\n## Resources\n\n- **Documentation**: https:\u002F\u002Fwww.tensorflow.org\u002Ftensorboard\n- **PyTorch Integration**: https:\u002F\u002Fpytorch.org\u002Fdocs\u002Fstable\u002Ftensorboard.html\n- **GitHub**: https:\u002F\u002Fgithub.com\u002Ftensorflow\u002Ftensorboard (27k+ stars)\n- **TensorBoard.dev**: https:\u002F\u002Ftensorboard.dev (share experiments publicly)\n\n## See Also\n\n- `references\u002Fvisualization.md` - Comprehensive visualization guide\n- `references\u002Fprofiling.md` - Performance profiling patterns\n- `references\u002Fintegrations.md` - Framework-specific integration examples\n\n\n",{"name":5,"tags":48,"author":55,"license":15,"version":56,"category":29,"description":7,"dependencies":57},[49,50,51,27,26,52,53,28,54],"MLOps","TensorBoard","Visualization","PyTorch","TensorFlow","Performance Profiling","Orchestra Research","1.0.0",[5,58,40],"torch","main","0da4485785ee599388900be50db1635489d53056",".agents\u002Fskills\u002Fqc-tensorboard","https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6","https:\u002F\u002Fdisha6.6.thenitishkr.in\u002F","https:\u002F\u002Fgithub.com\u002FTashima-Tarsh","www.thenitishkr","thenitishkr | AI • Cyber-security • Research\r\n","2026-11-08 03:33:25",{"source":8,"skillName":5,"commands":69,"prompt":79,"zipAvailable":80},[70,73,76],{"tool":71,"command":72},"npx","npx skills add Tashima-Tarsh\u002FDisha6.6 --skill tensorboard",{"tool":74,"command":75},"bunx","bunx skills add Tashima-Tarsh\u002FDisha6.6 --skill tensorboard",{"tool":77,"command":78},"pnpm","pnpm dlx skills add Tashima-Tarsh\u002FDisha6.6 --skill tensorboard","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fqc-tensorboard\u002FSKILL.md",true,[82,88,92],{"path":83,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":86,"sourceHtmlUrl":87},"references\u002Fintegrations.md","REFERENCE","参考文档",16205,"https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fqc-tensorboard\u002Freferences\u002Fintegrations.md",{"path":89,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":90,"sourceHtmlUrl":91},"references\u002Fprofiling.md",13337,"https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fqc-tensorboard\u002Freferences\u002Fprofiling.md",{"path":93,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":94,"sourceHtmlUrl":95},"references\u002Fvisualization.md",14897,"https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fqc-tensorboard\u002Freferences\u002Fvisualization.md",[97,127,152,179,204,228],{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":106,"publishedAt":43},"01M6QRD07D4TGNDK6VJ4EHF8BV","youtube-full","Use when the user needs YouTube transcripts, video search, channel browsing, playlist extraction, or content monitoring. Trigger phrases: 'get the transcript for', 'search YouTube for', 'what are the latest videos on', 'list this playlist', 'monitor this channel', or any request involving a YouTube URL, video ID, or @handle. Do NOT use for downloading video or audio files, YouTube engagement data (likes, comments), or private\u002Fage-restricted videos.","https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fyoutube-full\u002FSKILL.md",[103],{"categoryNo":104,"categoryName":105,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",[107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126],"youtube full","youtube","full","transcript","search","monitoring","data","Video","Audio","list","files","do","get","age","trigger","URL","for","browsing","request","youtube transcripts",{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":133,"publishedAt":43},"01M6QRCJ3112VYPA97YG7KGMC2","x-twitter-growth","X\u002FTwitter growth engine for building audience, crafting viral content, and analyzing engagement. Use when the user wants to grow on X\u002FTwitter, write tweets or threads, analyze their X profile, research competitors on X, plan a posting strategy, or optimize engagement. Complements social-content (generic multi-platform) with X-specific depth: algorithm mechanics, thread engineering, reply strategy, profile optimization, and competitive intelligence via web search.","https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fx-twitter-growth\u002FSKILL.md",[],[134,135,136,137,111,138,139,140,141,142,143,144,145,146,147,148,149,150,151,123],"twitter","x twitter growth","growth","research","content","engineering","plan","web search","competitors","analyze","engine","write","strategy","use","platform","grow","posting","competitive",{"skillNo":153,"name":154,"nameZh":6,"description":155,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":156,"categories":157,"keywords":161,"publishedAt":43},"01M6QRBN3EHQNJY42RERP7A149","write-a-skill","Create new agent skills with proper structure, progressive disclosure, and bundled resources. Use when user wants to create, write, build, or author a new skill.","https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fwrite-a-skill\u002FSKILL.md",[158],{"categoryNo":159,"categoryName":160,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[162,145,163,164,165,166,167,168,147,169,170,59,171,172,173,174,175,176,177,178],"write a skill","github","create","https","productivity","matt pocock","direct","example","build","new skill","structure","new agent","resources","with","tree","progressive disclosure","author",{"skillNo":180,"name":181,"nameZh":6,"description":182,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":183,"categories":184,"keywords":185,"publishedAt":43},"01M6QRB6G8P33PNGAF9Y69EJ9T","wrap-up","Close out a launched Claude Managed Agent — recap every primitive the founder now owns, regenerate the single-file overview page, and suggest the next 1-2 upgrades. Use when the user says \"wrap up\", \"close this out\", \"what do I own now\", \"give me the summary\", \"recap the agent\", or when the orchestrator routes phase=wrap-up. primitives_inventory.py tables everything owned (agent, environment, session, memory, outcome, deployment); overview_page.py regenerates a self-contained .\u002Fmy-agent\u002Fagent-overview.html; upgrade_suggester.py ranks the next moves from recorded deferrals plus standing hardening steps. Companion to run-without-you; the last stop before phase=done.","https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fwrap-up\u002FSKILL.md",[],[186,187,188,189,190,191,192,193,194,147,195,118,196,197,198,199,200,201,202,203],"wrap up","up","wrap","gemini","deployment","run","file","hardening","closeout","stop","upgrade","founder","close","companion","you","tables","directions","phase",{"skillNo":205,"name":206,"nameZh":6,"description":207,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":208,"categories":209,"keywords":211,"publishedAt":43},"01M6QRA5AYC1RBFZ39GTWGS3N8","workflow-builder","Design and write deterministic multi-agent workflow scripts (.js files in .claude\u002Fworkflows\u002F) for Claude Code's Workflow tool. Use when a user wants to build, create, author, scaffold, or run a custom Claude Code workflow, orchestrate sub-agents (fan-out, pipeline, loop, judge-panel), or automate a repeatable multi-step task across fresh-context agents.","https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fworkflow-builder\u002FSKILL.md",[210],{"categoryNo":159,"categoryName":160,"taxonomyType":21,"taxonomyTypeDesc":22},[212,213,214,215,216,164,191,217,218,219,220,221,145,222,117,223,224,225,226,227],"workflow","workflow builder","builder","design","workflows","code","orchestrate","pipeline","loop","multi-agent","context","across","fresh","scripts","judge","claude code workflow",{"skillNo":229,"name":230,"nameZh":6,"description":231,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":232,"categories":233,"keywords":234,"publishedAt":43},"01M6QR7QMCZESKQA0ERW1E657M","weekly-review","Use when someone wants to run a weekly review, close open loops, audit stalled projects and commitments, get their system back to trusted, restart a lapsed review habit, or says \"\u002Fcs:weekly-review\". Walks David Allen's three-phase loop — GET CLEAR, GET CURRENT, GET CREATIVE — with deterministic scripts that inventory open loops, gate the checklist with named gaps, and score commitment health 0-100.","https:\u002F\u002Fgithub.com\u002FTashima-Tarsh\u002FDisha6.6\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fweekly-review\u002FSKILL.md",[],[235,236,237,238,239,240,241,242,243,220,244,245,246,247,248,249,119,250,251,203],"review","weekly review","weekly","deterministic scripts","reflect","feeds","inventory","open","team","projects","project-management","scanner","conversation","back","project","sprint","cadence"]