Sharing a link to install ShellE. An interactive Shell Experience powered by Gen AI.
ShellE is a refocusing of the AgentM Pulse app I’ve been sharing screenshots of. Where Pulse was an open-ended experiment in creating a completely AI generated UI, ShellE is squarely focused on using GenAI to improve developer productivity. The primary addition over Pulse is the ability to run arbitrary terminal commands.
ShellE lets you define scripts that become tools that a model can generate code to call. Here’s an example of me asking ShellE to list the files in the current directory:
I just asked for a list of files in the current directory and the model wrote this code to run the terminal command that lists the files, parse the results, and display it in ShellE’s viewer.
window.onload = function() {
const chatMessages = document.getElementById('chatMessages');
chatMessages.scrollTo({
top: chatMessages.scrollHeight,
behavior: 'smooth'
});
// Execute the Windows terminal command to get the current directory
fetch('/api/scripts/windows-terminal', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ command: 'cd' }),
})
.then(response => response.text())
.then(data => {
document.getElementById('currentDirectory').textContent = data.trim();
})
.catch(error => {
console.error('Error:', error);
document.getElementById('currentDirectory').textContent = 'Error fetching current directory';
});
// Execute the Windows terminal command to list files
fetch('/api/scripts/windows-terminal', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ command: 'dir /b /o:gn' }),
})
.then(response => response.text())
.then(data => {
const files = data.trim().split('\n');
const fileListBody = document.querySelector('#fileList tbody');
fileListBody.innerHTML = ''; // Clear existing content
files.forEach(file => {
fetch('/api/scripts/windows-terminal', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ command: `for %I in ("${file}") do @echo %~nxI^|%~zI^|%~tI^|%~aI` }),
})
.then(response => response.text())
.then(fileInfo => {
const [name, size, lastModified, attributes] = fileInfo.trim().split('|');
const row = document.createElement('tr');
row.innerHTML = `
<td>${name}</td>
<td>${attributes.includes('D') ? 'Directory' : 'File'}</td>
<td>${attributes.includes('D') ? '-' : formatFileSize(parseInt(size))}</td>
<td>${lastModified}</td>
`;
fileListBody.appendChild(row);
})
.catch(error => console.error('Error fetching file info:', error));
});
})
.catch(error => {
console.error('Error:', error);
document.getElementById('fileList').innerHTML = 'Error fetching file list';
});
};
function formatFileSize(bytes) {
if (bytes === 0) return '0 Bytes';
const k = 1024;
const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
const i = Math.floor(Math.log(bytes) / Math.log(k));
return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
}
Instead of writing a bash script you can just ShellE what you need to do and it will essentially write the script for you and run it on the fly. It can also build whole UI’s with buttons and input boxes that translate to calling terminal commands or executing other JavaScript programs…
It’s radically changing the way I work so thought I’d share…