by infusius
A research workspace where an agent works beside you: chat, PDFs, notebooks and files in one dock, plus custom panes the agent builds on request.
# Add to your Claude Code skills
git clone https://github.com/infusius/masalaLast scanned: 9/29/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-09-29T10:25:43.330Z",
"npmAuditRan": true,
"pipAuditRan": true,
"promptInjectionRan": true
}See how masala compares with popular alternatives.
masala is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by infusius. A research workspace where an agent works beside you: chat, PDFs, notebooks and files in one dock, plus custom panes the agent builds on request. It has 84 GitHub stars.
Yes. masala passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/infusius/masala" and add it to your Claude Code skills directory (see the Installation section above).
masala is primarily written in Python. It is open-source under infusius on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh masala against similar tools.
No comments yet. Be the first to share your thoughts!
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
A research workspace where the agent works beside you: chat, files, PDFs and notebooks in one dock, and the agent can also create custom viewers and apps when necessary
This is an early build for testers. Expect rough edges, and feel free to raise issues.
Masala was called Panel until September 2026. If you ran it under that name, see Upgrading from Panel.

Node 22.18 or newer (or 24.12 and newer)
uv, which fetches the Python it needs (3.12 or newer) by itself
An agent CLI, at least one of:
claude once and log in.npm install -g @openai/codex, plus an OpenAI API key (see The OpenAI key). Masala keeps Codex's settings in ~/Masala/codex, apart from your own ~/.codex, so signing in to Codex elsewhere does not sign Masala in.The chat agent and the Modules, such as the literature review, run through one of these.
pnpm install
uv sync
pnpm start
Then open http://localhost:4173. pnpm start builds the app first, so the first start takes a minute. Ctrl-C stops everything it started.
~/Masala/masala.db holds your conversations and everything the agents did.~/Masala/workspaces is where new Workspaces are created, unless you pick another folder.Both are outside this folder, so deleting or re-cloning the repo keeps them.
Copy apps/server/.env.example to apps/server/.env and set OPENAI_API_KEY. The key does two things:
The "OpenAI API" agent does not run literature reviews or the hypothesis Modules: those need an agent that can search the web, and only Claude Code and Codex can. Without a key, the picker shows OpenAI API and Codex as not set up, which is expected.
Masala's Modules (the literature review, the hypothesis Modules, and the ones that write and manage Panes) are also offered as an MCP server. Any agent that speaks MCP over stdio can call them, such as Claude Code or Codex in your own terminal.
Masala has to be running (pnpm start), because each call runs inside it. The call shows up in the app as a Module Run, and what it writes lands in the Workspace.
Replace /path/to/masala with where you cloned this repo.
Claude Code:
claude mcp add masala -- uv run --directory /path/to/masala/apps/server python -m masala_server.modules.mcp_main
Codex, in ~/.codex/config.toml:
[mcp_servers.masala]
command = "uv"
args = ["run", "--directory", "/path/to/masala/apps/server", "python", "-m", "masala_server.modules.mcp_main"]
Default. Add --workspace "My project" (a name or an id) to the end of the command to pick another. If the name is not found, the server lists the Workspaces it knows.Your conversations, Workspaces and Panes carry over, but they have to be moved by hand once. Stop Masala first, and back up ~/Panel/panel.db.
macOS and Linux, from this folder:
mv ~/Panel ~/Masala
mv ~/Masala/panel.db ~/Masala/masala.db
rm -f ~/Masala/panel.db.lock
for d in ~/Masala/workspaces/*/.panel; do mv "$d" "${d%.panel}.masala"; done
find ~/Masala/workspaces/*/.masala/panes ~/Masala/panes \( -name node_modules -prune \) -o -type f \( -name '*.vue' -o -name '*.ts' -o -name '*.js' \) \
-exec perl -pi -e 's/from ([\x27"])panel\1/from $1masala$1/g; s/\busePanel\b/useHost/g' {} + 2>/dev/null
uv run --directory apps/server python -c "import sqlite3, pathlib; sqlite3.connect(pathlib.Path.home() / 'Masala' / 'masala.db').executescript(open('../../scripts/upgrade-from-panel.sql').read())"
Windows, in PowerShell, from this folder:
Move-Item ~\Panel ~\Masala
Rename-Item ~\Masala\panel.db masala.db
Remove-Item ~\Masala\panel.db.lock -ErrorAction SilentlyContinue
Get-ChildItem ~\Masala\workspaces -Directory | ForEach-Object {
$old = Join-Path $_.FullName '.panel'
if (Test-Path $old) { Rename-Item $old '.masala' }
}
Get-ChildItem ~\Masala\workspaces -Directory | ForEach-Object { Join-Path $_.FullName '.masala\panes' } |
Where-Object { Test-Path $_ } | Get-ChildItem -Recurse -File -Include *.vue,*.ts,*.js |
Where-Object { $_.FullName -notmatch '\\node_modules\\' } | ForEach-Object {
$text = Get-Content $_.FullName -Raw
$new = $text -replace "from (['""])panel\1", 'from $1masala$1' -replace '\busePanel\b', 'useHost'
if ($new -ne $text) { [IO.File]::WriteAllText($_.FullName, $new) }
}
uv run --directory apps/server python -c "import sqlite3, pathlib; sqlite3.connect(pathlib.Path.home() / 'Masala' / 'masala.db').executescript(open('../../scripts/upgrade-from-panel.sql').read())"
What each step does:
.panel becomes .masala inside each Workspace. If you made a Workspace outside ~/Masala/workspaces, rename its .panel and rewrite its Panes the same way.'masala' now, and usePanel() is useHost(). Each rebuilds the first time it opens.scripts/upgrade-from-panel.sql points them at the new folders, so Workspaces open and old images still show.Also:
apps/server/.env, rename any PANEL_ setting to MASALA_. If you set PANEL_DB_PATH, run the SQL against that file instead.panel one.~/Masala and ~/Masala/workspaces again.pnpm start is in, then press Retry.pnpm dev:doctor. It says what is holding each port and how to clear it.The UI has multiple configurable windows, called Panes, that can display things ranging from image files, data files, code, as well as chat sessions. This is critical for researchers who often have to context switch between different types of files.
A default set of Panes are provided for common use cases. But custom Panes can also be added by humans and agents, such as a PDB viewer or SQLite visualizer.
Modules are similar to Skills but with additional definitions to support inter-module workflows and integration with the workspace.
Specifically, Modules have typed definitions for Inputs, Outputs, and Intermediates.
Inputs and Outputs are straightforward. Intermediates refer to objects that provide observability, such as the Chain-of-Thought or scratchpad for an agentic Module, or may be intermediate outputs in a multi-stage Module. These are especially important for processes that need transparency or long-running jobs that should show progress.
Having typed definitions for these enable validation at runtime and make it easier for humans and agents to develop custom Modules for downstream tasks and Panes for visualizations.
A data abstraction layer (DAL) bridges in-memory and filesystem objects. A DAL helps to map a URI to either an in-memory store or a local file, so that the Module just has to concern itself with the manipulation of the object.