"use strict";(globalThis.webpackChunkproject_public_docs=globalThis.webpackChunkproject_public_docs||[]).push([[413],{6785(e,t,r){r.r(t),r.d(t,{assets:()=>a,contentTitle:()=>d,default:()=>h,frontMatter:()=>l,metadata:()=>n,toc:()=>c});const n=JSON.parse('{"id":"overview","title":"Ramble Overview","description":"AI-powered structured field extraction from unstructured text. A configurable GUI tool that lets users \\"ramble\\" about an idea and extracts structured fields using AI.","source":"@site/docs/overview.md","sourceDirName":".","slug":"/","permalink":"/rob/ramble/","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"slug":"/","sidebar_position":1},"sidebar":"docs","next":{"title":"Ramble Configuration","permalink":"/rob/ramble/configuration"}}');var s=r(4848),i=r(8453);const l={slug:"/",sidebar_position:1},d="Ramble Overview",a={},c=[{value:"Project Links",id:"project-links",level:2},{value:"Core Concept",id:"core-concept",level:2},{value:"Key Features",id:"key-features",level:2},{value:"Tech Stack",id:"tech-stack",level:2},{value:"Use Cases",id:"use-cases",level:2},{value:"Integration",id:"integration",level:2},{value:"Quick Start",id:"quick-start",level:2}];function o(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.header,{children:(0,s.jsx)(t.h1,{id:"ramble-overview",children:"Ramble Overview"})}),"\n",(0,s.jsx)(t.p,{children:'AI-powered structured field extraction from unstructured text. A configurable GUI tool that lets users "ramble" about an idea and extracts structured fields using AI.'}),"\n",(0,s.jsx)(t.h2,{id:"project-links",children:"Project Links"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Resource"}),(0,s.jsx)(t.th,{children:"URL"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:"Git Repository"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.a,{href:"https://gitea.brrd.tech/rob/ramble",children:"https://gitea.brrd.tech/rob/ramble"})})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:"Local Path"})}),(0,s.jsx)(t.td,{children:(0,s.jsx)(t.code,{children:"~/PycharmProjects/ramble"})})]})]})]}),"\n",(0,s.jsx)(t.h2,{id:"core-concept",children:"Core Concept"}),"\n",(0,s.jsx)(t.p,{children:"Ramble solves the problem of capturing ideas in a structured format. Instead of filling out rigid forms, you describe what you want in natural language, and AI extracts the structured data."}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{children:'\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Ramble \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 \u2502\n\u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502\n\u2502 \u2502 "I want a feature that lets users export their data \u2502 \u2502\n\u2502 \u2502 to CSV format. It should support filtering by date \u2502 \u2502\n\u2502 \u2502 and include all fields. Maybe add PDF export too." \u2502 \u2502\n\u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502\n\u2502 \u2502 \u2502\n\u2502 \u25bc AI Extraction \u2502\n\u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502\n\u2502 \u2502 { \u2502 \u2502\n\u2502 \u2502 "title": "Data Export Feature", \u2502 \u2502\n\u2502 \u2502 "type": "feature", \u2502 \u2502\n\u2502 \u2502 "formats": ["CSV", "PDF"], \u2502 \u2502\n\u2502 \u2502 "filters": ["date"], \u2502 \u2502\n\u2502 \u2502 "scope": "all fields" \u2502 \u2502\n\u2502 \u2502 } \u2502 \u2502\n\u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502\n\u2502 \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n'})}),"\n",(0,s.jsx)(t.h2,{id:"key-features",children:"Key Features"}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"Feature"}),(0,s.jsx)(t.th,{children:"Description"})]})}),(0,s.jsxs)(t.tbody,{children:[(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:"Free-form Input"})}),(0,s.jsx)(t.td,{children:"Type naturally without structure constraints"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:"AI Extraction"})}),(0,s.jsx)(t.td,{children:"Multiple providers (Claude, Codex, Gemini)"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:"Configurable Fields"})}),(0,s.jsx)(t.td,{children:"Define what fields to extract"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:"Field Locking"})}),(0,s.jsx)(t.td,{children:"Lock fields you've refined for re-extraction"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:"PlantUML Diagrams"})}),(0,s.jsx)(t.td,{children:"Auto-generate diagrams from descriptions"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:"Headless Mode"})}),(0,s.jsx)(t.td,{children:"CLI usage without GUI"})]}),(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.td,{children:(0,s.jsx)(t.strong,{children:"Programmatic API"})}),(0,s.jsx)(t.td,{children:"Import and use in Python scripts"})]})]})]}),"\n",(0,s.jsx)(t.h2,{id:"tech-stack",children:"Tech Stack"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.strong,{children:"Python 3.10+"})}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"PySide6"})," - Cross-platform GUI"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Multiple AI Providers"})," - Claude, Codex, Gemini, mock"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"PlantUML"})," - Diagram generation"]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"use-cases",children:"Use Cases"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Feature Requests"}),": Ramble about a feature, get structured spec"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Bug Reports"}),": Describe issue, extract steps/expected/actual"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Meeting Notes"}),": Ramble about discussion, extract action items"]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Documentation"}),": Describe concept, get structured outline"]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"integration",children:"Integration"}),"\n",(0,s.jsx)(t.p,{children:"Ramble integrates with CascadingDev to provide a user-friendly way to create feature requests that feed into the discussion workflow."}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"# Standalone usage\nramble\n\n# Integrated with CascadingDev\ncascading ramble # Opens GUI, saves to discussions/\n"})}),"\n",(0,s.jsx)(t.h2,{id:"quick-start",children:"Quick Start"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:'# Install\ncd ~/PycharmProjects/ramble\npip install -e .\n\n# Run GUI\nramble\n\n# Headless mode\necho "I want a dark mode toggle" | ramble --headless --fields title,type,priority\n'})})]})}function h(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(o,{...e})}):o(e)}},8453(e,t,r){r.d(t,{R:()=>l,x:()=>d});var n=r(6540);const s={},i=n.createContext(s);function l(e){const t=n.useContext(i);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]);